> 文档中心 > Hive基础04、Hive建表语句详解

Hive基础04、Hive建表语句详解

Hive基础04、Hive建表语句详解

1、HQL建表语句语法格式

语法格式(hql不区分大小写,[ ]中的属性是可选属性)

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_buckers BUCKETS][ROW FORMAT row_format][STORED AS file_format][LOCATION hdfs_path]

英文关键字解析:

1、CREATE TABLE 创建一个指定名字的表,如果库中已有相同名的表,则抛出异常;
用户可以使用 IF NOT EXISTS 选项来忽略此异常。

2、EXTERNAL 关键字可以让用户创建一个外部表(默认创建内部表)。外部表在建表的同时必须指定一个指向实际数据的路径(LOCATION),Hive在创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

3、COMMENT 是给表字段或者表内容添加注释说明的。

4、PARTITIONED BY 给表做分区,决定了表是否为分区表。

5、CLUSTERED BY 对于每一个表(table)或者分区, Hive 可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分,Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

6、ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’, 这里指定表存储中列的分隔符,默认是 \001,这里指定的是逗号分隔符,还可以指定其他列的分隔符。

7、STORED AS SEQUENCEFILE|TEXTFILE|RCFILE,如果文件数据是纯文本,可以使用 STORED AS TEXTFILE,如果数据需要压缩,使用 STORED AS SEQUENCEFILE。

8、LOCATION 定义 hive 表的数据在 hdfs 上的存储路径,一般管理表(内部表不不要自定义),但是如果定义的是外部表,则需要直接指定一个路径。

2、建表案例

PARTITIONED BY 给表做分区,决定了表是否为分区表。

ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’, 这里指定表存储中列的分隔符,默认是 \001,这里指定的是逗号分隔符,还可以指定其他列的分隔符。

这里用的是【\t】作为分隔符

create table users(id int,userName string,sex string,introduce string)row format delimited fields terminated by '\t'stored as textfile;

从无到有: 

使用【desc】可以查看建表情况: 

注:Hive表中的数据不能通过insert语句插入,而是load data语句进行加载,其中加载的数据来源主要包括:

1、本地文件系统加载数据

2、HDFS文件系统加载数据

删除语句

truncate table table_name;