gpt4 book ai didi

java - hive : Merge two maps into one column

转载 作者:行者123 更新时间:2023-12-04 10:13:35 61 4
gpt4 key购买 nike

我有一个 hive 表

create table mySource(
col_1 map<string, string>,
col_2 map<string, string>
)

这是记录的样子
col_1                col_2
{"a":1, "b":"2"} {"c":3, "d":"4"}

我的目标表看起来像这样
create table myTarget(
my_col map<string, string>
)

现在我想将 mySource 中的两列组合成一个 map 并将其提供给我的目标表。基本上我想写一些类似的东西
insert into myTarget
select
some_method(col_1, col_2) as my_col
from mySource;

hive 中是否有内置方法可以做到这一点?我用 collect_set 尝试了一些东西,但有很多错误

最佳答案

仅使用内置方法的解决方案。分解两个 map ,UNION ALL 结果,收集 key:value 的数组, 用 ',' 连接数组, 使用 str_to_map 将字符串转换为映射:

with mytable as (--Use your table instead of this
select
map('a','1', 'b','2') as col_1, map('c','3', 'd','4') as col_2
)

select str_to_map(concat_ws(',',collect_set(concat(key,':',val)))) as mymap
from
(
select m1.key, m1.val
from mytable
lateral view explode(col_1) m1 as key, val
union all
select m2.key, m2.val
from mytable
lateral view explode(col_2) m2 as key, val
)s
;

结果:
mymap

{"a":"1","b":"2","c":"3","d":"4"}

brickhouse图书馆会容易得多:
ADD JAR /path/to/jar/brickhouse-0.7.1.jar;
CREATE TEMPORARY FUNCTION COMBINE AS 'brickhouse.udf.collect.CombineUDF';

select combine(col_1, col_2) as mymap from mytable;

关于java - hive : Merge two maps into one column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61199595/

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