hive中对复杂数据类型的支持

本文详细介绍了Hive中复合数据类型的应用,包括Struct、Map、Array的创建、导入数据及查询示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive提供了复合数据类型:
struct:struct内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},可以通过c.a来访问域a
map(Key-Value对):访问指定域可以通过["指定域名称"]进行,例如,一个map M包含了一个group->gid的kv对,gid的值可以通过M['group']来获取
array:array中的数据为相同类型,例如,array A中元素['a','b','c'],则A[0]的值为'a',A[1]的值为'b'


**hive中暂没有支持list类型**


/*struct使用示例*/


建表:
create table s1(id INT,info struct<p1:string,p2:int>) 


ROW FORMAT DELIMITED //指定记录按行划分
FIELDS TERMINATED BY ','//指定元组之间的分隔符 


COLLECTION ITEMS TERMINATED BY ':';//指定元组各个字段之间的分隔符 






导入数据:
LOAD DATA LOCAL INPATH '/hivetest1' INTO TABLE s1;




/hivetest1中数据格式如下:
1,zhou:30
2,yan:30
3,chen:20


查询:
select info.p1 from s1;






查询结果为:
zhou
yan
chen


/*array使用示例*/


建表:
create table s2(id INT,info array<INT>) 


ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 


COLLECTION ITEMS TERMINATED BY ':';


导入数据:


LOAD DATA LOCAL INPATH '/hivetest2' INTO TABLE s2;
/hivetest2中数据格式如下:


1,1:2:3:4
2,5:6
3,7:8:9:10
4


,11


查询:
select info[1] from s2 ;


查询结果为:
2


6
8
NULL




/*map使用示例*/


建表:
create table s3(id INT,info map<STRING,INT>) 


ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 


COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';//指定key-value分隔符


导入数据:


LOAD DATA LOCAL INPATH '/hivetest3' INTO TABLE s3;




/hivetest3中数据格式如下:
1 job:80,team:60,person:70
2 job:60,team:80
3 job:90,team:70,person:100


查询:
select info['person'] from s3;
查询结果为:
70
NULL
100
Hive支持复杂数据类型,用于存储不同类型和结构的数据。建表时使用这些复杂数据类型可以帮助组织和管理数据。以下是一些主要的复杂数据类型: 1. **Struct(结构体)**: 它定义了一个带有序列字段的数据类型,每个字段有自己的名称和类型。例如: ``` CREATE TABLE my_table (struct_field struct<field1: string, field2: int>); ``` 2. **Map(映射)**: 存储键值对的数据结构,键和值可以是任意数据类型。例如: ``` CREATE TABLE my_map_table (map_field map<string, string>); ``` 3. **Array(数组)**: 存储同类型的元素序列。比如: ``` CREATE TABLE my_array_table (array_field array<int>); ``` 4. **Union类型(联合类型)**: 可以包含多个类型之一,如: ``` CREATE TABLE my_union_table (union_field uniontype(string, int)); ``` 5. **Decimal和Double(精确数字和浮点数)**: 用于存储带有更高精度的数字,与标准的int和double不同。 ``` CREATE TABLE my_decimal_table (decimal_field decimal(10,2), double_field double); ``` 6. **Timestamp和Date(日期和时间)**: 专门用于存储日期和时间信息。 ``` CREATE TABLE my_timestamp_table (timestamp_field timestamp, date_field date); ``` 7. **Binary和varbinary(二进制和可变长度二进制)**: 存储二进制数据。 ``` CREATE TABLE my_binary_table (binary_field binary, varbinary_field varbinary); ``` 使用这些数据类型时,要根据实际业务需求和数据特性来选择和设计表结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值