hive 标准hql建表语法格式
一.标准hql建表语法格式
1.官方标准语法:(hql不区分大小写,下面[]里的属性是可选属性)
具体参考官网界面:hive官网建表说明文档
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 选项来忽略这个异常,一般也可以不加这个if not exists语句,最多抛出错误。
2.external关键字可以让用户创建一个外部表,默认是内部表,外部表在建表的必须同时指定一个指向实际数据的路径(location),hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
3.comment 后面跟的字符串是给表字段或者表内容添加注释说明的,虽然它对于表之间的计算没有影响,但是为了后期的维护,所以实际开发都是必须要加comment的。
4. partitioned by其实是给表做分区,决定了表是否是分区表。hive中所谓分区表就是将表里新增加一个字段,就是分区的名字,这样你在操作表中的数据时,可以按分区字段进行过滤。具体分区解释后面博客有说明。
5.[row format delimited fields terminated by ',' ] 这里指定表存储中各列的划分格式,默认是\001,这里指定的是逗号分隔符,还可以指定其他列的分隔符,看实际需求
6.stored as sequencefile|textfile|rcfile如果文件数据是纯文本,可以使用 stored as textfile。如果数据需要压缩,使用 stored as sequencefile。这里主要牵涉到hive存储的三种文件格式,具体区别参考后续博客。
7.clustered by对于每一个表(table)或者分区, hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。hive也针对某一列进行桶的组织。hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中
8.location 其实是定义hive表的数据在hdfs上的存储路径,一般管理表(内部表不不要自定义),但是如果定义的是外部表,则需要直接指定一个路径。实际上不指定也没事,会使用默认路径