Hive建表时,使用Array和Map类型以及数据导入

本文介绍了Hive中创建表时如何使用Array、Map数据类型,并详细阐述了如何通过ROW FORMAT SERDE指定数据分隔符来加载本地或HDFS上的数据。同时,展示了如何将数据转换为指定的Array和Map类型,以便于插入到表中,特别是使用str_to_map函数将字符串转换为Map类型的方法。此外,还提到了在数据导入过程中需要注意的细节,如特殊字符的处理。

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

在Hive建表时,我们是可以指定数据类型为Array和Map类型的。除此之外还有Struct类型,这里就不对此做过多延伸。
参考:Hive增删改查
建表:

CREATE TABLE  test001(
	id STRING COMMENT '',
	address ARRAY<string> COMMENT '',
	jobs map<string,string>
);

如果是从本地加载文件,我们可以把建表语句改成:

CREATE TABLE  test001(
	id STRING COMMENT '',
	address ARRAY<string> COMMENT '',
	jobs map<string,string>
)
row format delimited
collection items terminated by ','	--按逗号分割数组
map keys terminated by ':';	--按冒号分割map

然后从本地或者hdfs上导入数据

load data [local] inpath 'hdfsPath'
into table table_name
partition (Year='2020',month='9');

此外,如果是从其他表查询出来的结果,插入表中,则需要先把数据转换为指定的array类型或map类型才可以插入成功。

INSERT OVERWRITE TABLE test001 
SELECT '1' as id,split('南京,北京',',') as address,str_to_map('1:java&2:python','&',':') as jobs;

这里str_to_map是把字符串转换为map类型。第一个参数1:java&2:python是我们String类型的map数据,第二个参数&是指定map之间的分割符,会把1:java&2:python拆成两个map。这里需要提醒的是,如果我们的数据里只有1:java这一种,&(或其他类型的符号)也需要加上,否则返回值的key会变为1:java,value为NULL,即1:java:NULL这种类型。感兴趣的小伙伴也可以把&换成:试试效果。第三个参数:即为我们map的键值分割键。当我们按具体需要转换为map类型后,即可成功插入数据。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值