hive建表手记

来源:互联网 发布:魔音软件 编辑:程序博客网 时间:2024/06/04 18:04

hive 建表语法

Create TableCREATE [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]

 

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

但实测有出入,使用如下语句:

create external table weblog(accdate string,acctime string,sip string,csmethod string,csuristem string,csuriquery string,sport string,csusername string,cip string,csUserAgent string,scstatus string,scsubstatus string,scwin32status string,timetaken string) row format delimited fields terminated by ' ' stored as textfileLOAD DATA LOCAL INPATH '/home/hadoop/u_ex130613.log' OVERWRITE INTO TABLE weblog;


 

关于create table网上说的不全对,实测结果如下:

1.      create external table时也可以不指定location,在create后,执行load data也可以的;

2.      使用create table建内部表时,也可以指定location目录,但在drop时,会删除location中指定的目录及文件;

3.      可见,内部表和外表部的主要区别在于删除时是否删除数据文件。

4.   使用create external table,可以先建表,指定目录,然后再往目录中不停的增加数据,每次查询结果可以包含最新的数据。

 

另:

stored as有三种TextFileSequenceFile RCFile

SequenceFile是一个由二进制序列化过的key/value的字节流组成的文本存储文件,它可以在map/reduce过程中的input/outputformat时被使用。在map/reduce过程中,map处理文件的临时输出就是使用SequenceFile处理过的。所以一般的SequenceFile均是在FileSystem中生成,供map调用的原始文件。

RCFileRecord Columnar File)是facebook的东东,存储结构结合了行存储和列存储的优点,遵循“先水平划分,再垂直划分”的设计理念。

 

 

原创粉丝点击