gpt4 book ai didi

hadoop - 字符串映射转换配置单元

转载 作者:可可西里 更新时间:2023-11-01 16:22:38 24 4
gpt4 key购买 nike

我有一个包含四列的表格。

C1    C2    C3    C4
--------------------
x1 y1 z1 d1
x2 y2 z2 d2

现在我想将其转换为具有键值对的 map 数据类型并加载到单独的表中。

create table test
(
level map<string,string>
)
row format delimited
COLLECTION ITEMS TERMINATED BY '&'
map keys terminated by '=';

现在我正在使用下面的 sql 来加载数据。

insert overwrite table test
select str_to_map(concat('level1=',c1,'&','level2=',c2,'&','level3=',c3,'&','level4=',c4) from input;

在表上选择查询。

select * from test;
{"level1":"x1","level2":"y1","level3":"z1","level4":"d1=\\"}
{"level1":"x2","level2":"y2","level3":"z2","level4":"d2=\\"}

我不明白为什么我在最后一个值中得到额外的“=\\”。

我仔细检查了数据,但问题仍然存在。

你能帮忙吗?

最佳答案

str_to_map(text, delimiter1, delimiter2) - 通过解析文本创建 map 使用两个分隔符将文本拆分为键值对。第一个分隔符分隔对,第二个分隔符分隔键和值。如果只给出一个参数,则使用默认分隔符:',' 作为 delimiter1'=' 作为 delimiter2.

您可以通过运行以下命令获取此信息:

describe function extended str_to_map

在你的语法中有两个错误:

insert overwrite table test
select str_to_map(concat('level1=',c1,'&','level2=',c2,'&','level3=',c3,'&','level4=',c4) from input;

首先是缺少一个括号)

其次,这基本上不是错误,您没有提供定界符,因此该函数采用定界符的默认值,这就是为什么您的结果中出现 ',' 的原因。

要获得当前格式的输出,您应该尝试这个查询:

insert overwrite table test
select str_to_map(concat('level1=',c1,'&','level2=',c2,'&','level3=',c3,'&','level4=',c4),'&','=') from input;

关于hadoop - 字符串映射转换配置单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com