1.hive表的两种类型
在hive上创建表时,有内表与外表两种类型,对应的语句为
CREATE TABLE
与CREATE EXTERNAL TABLE
。
其中创建内表过程中,hive会将数据移动到数据仓库指向路径。
而创建外表时,记录数据所在路径,不对数据进行任何操作。
因此删除数据表时,内表的元数据与数据一同删除,而外表数据不会改动,仅删除元数据。在使用时尽量使用外表,以防不时删除表带来数据缺失的不便。
2.hive表的分区
hive表的分区是指在创建表时指定partition的分区,每个分区以文件夹的形式单独存在表文件夹的目录下。创建代码如下:
CREATE EXTERNAL TABLE transaction(
Type string,
TransID string,
AgentID string,
Client string,
RcptTime string,
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY ‘\n’
PARTITIONED BY(year string,month string)
/*PARTITIONED BY为分区语句*/
STORED AS TEXTFILE
LOCATION '/user/data';
注意:LOCATION后面跟的是HDFS系统下的文件目录,若不指定则默认创建为 /user/hive/warehouse 目录
hive分区不是表中实际的字段,在使用时一般预先在hdfs上创建好分区对应的目录路径,再使用分区。对于transaction表,事先在hdfs上创建/user/data/year/month文件夹,然后创建表。
动态分区/静态分区(待续….)
3.hive表导入数据的几种方式
参照该博客,讲的很详细——Hive总结(七)Hive四种数据导入方式
http://blog.csdn.net/lifuxiangcaohui/article/details/40588929
4.split函数使用
split是hive中的字符串分割函数,使用非常简单。
split(str, regex) - Splits str around occurances that match regex
表中RcptTime的数据格式类型为“2014/7/4 14:50”使用split函数提取其中小时数的语句为split(split("2014/7/4 14:50",' ')[1],':')[0]
首先对空格进行分割,得到两部分{“2014/7/4” “14:50”},其中[1]={“14:50”}。然后同理得到小时数14。