0


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

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

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

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

CREATETABLE  test001(
    id STRING COMMENT'',
    address ARRAY<string>COMMENT'',
    jobs map<string,string>)row format delimited
collection items terminatedby','--按逗号分割数组
map keysterminatedby':';--按冒号分割map

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

loaddata[local] inpath 'hdfsPath'intotable 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类型后,即可成功插入数据。

标签: hive

本文转载自: https://blog.csdn.net/qq_43012693/article/details/124283763
版权归原作者 小五家的二哈 所有, 如有侵权,请联系我们删除。

“Hive建表时,使用Array和Map类型以及数据导入”的评论:

还没有评论