更多干货抢先看:大数据干货合集
3. Hive的数据类型
Hive内置数据类型主要分为两类:基础数据类型和复杂数据类型。
基础数据类型无外乎就是tinyint、smallint、int、bigint、boolean、float、double、string、timestamp、decimal等。
笔者这里主要介绍Hive的复杂数据类型,或者称之为集合类型。
Hive的复杂数据类型主要分三种:map、array、struct,并且支持复杂类型嵌套,利用好这些数据类型,将有效提高数据查询效率。目前为止对于关系型数据库不支持这些复杂类型。
- 首先创建一张表
create table t_complex(id int,
hobby1 map<string,string>,
hobby2 array<string>,
address struct<country:string,city:string>)
row format delimited
fields terminated by ','
collection items terminated by '-'
map keys terminated by ':' ;
- 准备数据文件
1,唱歌:一般-跳舞:喜欢-游泳:不喜欢,唱歌-跳舞-游泳,USA-New York
2,打游戏:不喜欢-学习:非常喜欢,打游戏-篮球,CHINA-BeiJing
- 将数据文件load到创建的表中
load data local inpath '/root/complex.txt' into table t_complex;
- 查询map、array、struct类型数据
查询map和array跟java中是类似的,都是通过key查找map的value或者根据索引查找array中的元素,而struct则通过列名.标识来访问元素。
查询map示例:select hobby1['唱歌'] from t_complex;
查询array示例:select hobby2[0], hobby2[1] from t_complex;
查询struct示例:select address.country, address.city from t_complex;
4. 内部表和外部表
Hive在创建表时默认创建的是内部表(又称托管表)。当指定external关键字时,则创建的为外部表。并可以通过location指定建表的数据存储的hdfs路径。
Hive创建内部表时,会将数据复制/移动到数据仓库指向的路径;若创建外部表,仅记录数据所在路径,不对数据位置做任何改变。在删除表时,内部表的元数据和表数据都会被删除,而外部表只删除元数据,不删除表数据。
建议在生产中创建Hive表时采用外部表的方式,这样在发生误删表的时,不至于把表数据也删除,利于数据恢复和安全。当然也可以按照下述情况做细分处理:
1)所有数据处理,全部由hive完成,适合用内部表
2)有hive和其他工具共同处理一个数据集即同一数据集有多个应用要处理,适合用外部表
3)从hive中导出数据,供其他应用使用,适合用外部表
4)普遍用法:初始数据集由外部表操作,数据分析中间表使用内部表
更多干货抢先看:大数据干货合集