Hive学习笔记

148 阅读3分钟

hive基础 -- blog.csdn.net/qq_41975699…

Hive基本介绍

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成为一张数据库表,并提供类SQL的查询功能。可以将sql语句转化为MapReduce任务进行运行。Hive提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制

Hive基本语法

1. 数据库操作:
  • 创建数据库: create database if not exists 数据库名
  • 创建数据库并指定HDFS存储位置: create database 数据库名 location 位置
  • 查看有哪些数据库:show databases
  • 修改数据库的信息(数据库的元数据信息是不可更改的,包括数据库的名称以及数据库所在的位置) alter database 数据库名 set dbproperties()
  • 查看数据库信息:desc database 数据库名
  • 查询详细数据库信息:desc database extended 数据库名
  • 删除数据库(数据库的元数据信息是不可更改的,包括数据库的名称以及数据库所在的位置):drop database 数据库名
  • 强制删除数据库:drop database 数据库名 cascade
2. 数据库表操作
  • 创建数据库表语法:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type[COMMENT col_comment],..)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type[COMMENT col_comment],..)]
[CLUSTERED BY (col_name,col_name,...)]
[SORTED BY (col_name[ASC|DESC],...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path];
说明:
1.  CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常
2.  COMMENT 后面跟的字符串是给表字段或者表内容添加注释说明的,虽然它对于表之间的计算没有影响,但是为了后期的维护,所以实际开发都是必须要加COMMENT的.
3.  STORED AS SEQUENCEFILE|TEXTFILE|RCFILE:  如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE
4.  PARTITIONED BY其实是给表做分区,决定了表是否是分区表。Hive中所谓分区表就是将表里新增加一个字段,就是分区的名字,这样你在操作表中的数据时,可以按分区字段进行过滤。具体分区解释后面博客有说明。
5.  CLUSTERED BY对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中
6.  LOCATION 其实是定义hive表的数据在hdfs上的存储路径,一般管理表(内部表不不要自定义),但是如果定义的是外部表,则需要直接指定一个路径。实际上不指定也没事,会使用默认路径
  • 修改数据库表信息语法:

    • alter table 旧表名 rename to 新表名;

    • alter table 表名 add columns (列名 类型,列名 类型...);

    • alter table 表名 change column 旧列名 新列名 类型;

  • 删除数据库表

    • drop table 表名
  • 向表中添加数据

    • 直接插入: insert into table 表名 partition () values();
    • 通过load加载: load data local inpath '数据所在路径' overwrite into table 表名 partition();
    • 通过查询插入数据: insert overwrite table 表名 partition() select col_name, .. from table_name;
  • 将一张表拆开为两部分或多部分

    1. 给score表加载数据: load data local inpath '数据路径' overwrite into table score partition(month='201816');

    2. 创建第一部分表: create table score_first(s_id string, c_id string) partitioned by (month,string) row format delimited fields terminated by '\t'