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]
- CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常
- EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)(当删除外部表时,外部表的数据不会删除;删除分区时,对应的分区数据也不会从HDFS上删除)
CREATE EXTERNAL TABLE ext_tbl ( dept INT COMMENT '部门', name STRING COMMENT '名称', gender STRING COMMENT '性别' ) COMMENT 'This is an external table' PARTITIONED BY ( id INT COMMENT '编号') ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054' STORED AS TEXTFILE LOCATION '/user/hadoop/warehouse/ext_tbl' ;
- LIKE 允许用户复制现有的表结构,但是不复制数据,即创建一个与当前表结构完全相同的空表。
CREATE TABLE comp_tbl LIKE ext_tbl;
- COMMENT可以为表与字段增加描述
- PARTITION 表示分区表,后面括号里的字段为分区字段,可有一个或多个
- CLUSTERD 表示 BUCKET表,按SORTED字段排序
- ROW FORMAT:
DELIMITED [FILEDS TERMINATED BY char][COLLECTION ITEMS TERMINATED BY char][MAP KEYS TERMINATED BY char][LINES TERMINATED BY char] |SERDE serde_name [WITH SERDEPROPETIES(propety_name=property_value,propety_name=property_value,…)]如果建表的时候没有指定ROW FORMAT系统会默认为使用SERDE,相关内容可参考链接点击打开链接;
[ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符。
比如:ROW FORMAT DELIMITED
FILEDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
表示不同列之间用一个'\001'分割,集合(例如array,map)的元素之间以'\002'隔开,map中key和value用'\003'分割。
- SORTED AS
SEQUENCEFILE
|TEXTFILE
|RCFILE
|ORC
|INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
只有TEXTFILE表能直接加载数据(如本地load数据,外部表直接加载路径数据),hadoop默认支持的压缩格式也只能用TEXTFILE表直接读取,即其他形式的表都要通过insert table as select from text_table来导入数据;如果数据需要压缩,需使用SEQUENCEFILE;RCFILE是一种行列存储相结合的存储方式;ORC是RCFILE的升级版。更详细的源文件存储格式可参考HIVE的源文件存储格式
ORC三种创建/使用方式:
1、 STORED AS ORC;
2、ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' with serdeproperties('serialization.null.format' = '') STORED AS ORC;
3、 ROW FORMAT DELIMITED NULL DEFINED AS '' STORED AS ORC;