hive创建表的语法参考如下网址:Create/Drop/Truncate Table
1.创建基础表
在这个网页里详细记录了创建表的每个语法,下面就一一来看这些创建表的语法内容:
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
``[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
``[COMMENT table_comment]
[ROW FORMAT row_format]
[LOCATION hdfs_path]
其中db_name指的是hive中数据库的名称,默认是default,第二行是定义表的列名称及列描述,第三行是表的描述。以常用的日志为例来创建一张hive的表:
create table IF NOT EXISTS default.log_test
(
ip string COMMENT 'client ip address',
user string ,
request_url string COMMENT 'client request url',
)
COMMENT 'Test access log'
hive中的表需要映射到hdfs文件中,所以需要定义文件中的每一行之间的分隔符,每一列之间的分隔符。增加行分隔符的语句如下:
ROW FORMAT DELIMITED FIELDS TERMINATED BY ’ ’
这句的意思是以空格来分隔行数据,那么这一行中的数据只要遇到一个空格就可以划分为一个数据。这里的分隔符可以是其他字符,比如",","#","|"等,一般只要用数据文件中可以区分每一行中的不同数据即可。
列与列直接的分隔符通常是以换行符来区分,可以用如下的语句来指定:
`COLLECTION ITEMS TERMINATED BY ‘\n’
通常列与列直接的分隔符是不需要写的。
[STORED AS file_format]是指定文件的类型,保存在hive中的文件的类型有多种,一般简单就保存为文本格式,即TEXTFILE,但是企业中一般不使用这种格式来保存数据,主要是因为文本格式占的空间比较大,不利于大数据分析。企业中一般使用ORC和PARQUET两种文件类型来保存,具体的会在后面讲解。
通过[LOCATION hdfs_path]可以在创建表的时候指定该表映射到到hdfs的文件路径,默认是映射到/user/hive/warehouse目录下。
完整的建表语句如下:
create table IF NOT EXISTS default.log_test
(
ip string COMMENT 'client ip address',
user string ,
request_url string COMMENT 'client request url',
)
COMMENT 'Test access log'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
location '/user/hadoop/warehouse/log_test';
STORED AS TEXTFILE ;
2.创建子表
[AS select_statement]这个语句是用来通过查询已有的表来创建一张新表,这样可以根据已有的表来创建子表,对于数据分析和优化都是有很大的好处的。相应的创建语句如下:
create table IF NOT EXISTS default.log_test_sl
as select ip,user from default.log_test;
3.创建相同结构的表
另外一种创建表的方式如下:
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
``LIKE existing_table_or_view_name
``[LOCATION hdfs_path];
由于日志是每天都会产生的,而且每天的日志格式都是一样的,我们没有必要每次都创建相同的表,上面这种创建表的方式就是根据已经存在的表来创建新的表,而新的表和已经存在的表表结构是一样的,但是数据可以映射到不同的hdfs文件上。
create table IF NOT EXISTS default.log_test_like
like default.log_test;
更多有关大数据的内容请关注微信公众号:大数据与人工智能初学者
扫描下面的二维码即可关注: