如何在 hive 中进行字符串连接
Posted
技术标签:
【中文标题】如何在 hive 中进行字符串连接【英文标题】:How to do string concatination in hive 【发布时间】:2020-07-13 10:06:44 【问题描述】:我有 2 个表,让我们说表 1 如下
和表2如下
我期望的结果是
我在 hive 中尝试了 concat_ws 方法,但结果与预期不符,而且当我使用 concat_ws 方法时,我只能申请 1 个字段。请告诉我如何克服或有任何可用的解决方案。
【问题讨论】:
【参考方案1】:使用collect_set
获取每个 (name, function
) 的部分数组,然后使用 concat_ws
以逗号作为分隔符连接数组:
select t.name1, t1.function, t2.parts, t2.body, t1.scope
from
(select name1, function,
concat_ws(',',collect_set(scope)) as scope
from table1
group by name1, function
) t1
inner join
(select name2, function,
concat_ws(',',collect_set(parts)) as parts,
concat_ws(',',collect_set(Body)) as Body
from table2 t2
group by name2, function
)t2
on t1.name1=t2.name2 and t1.function=t2.function
另一种方法 - 没有加入,使用 UNION ALL+聚合,这可能会更高效:
select name, function,
concat_ws(',',collect_set(parts)) as parts,
concat_ws(',',collect_set(Body)) as Body,
concat_ws(',',collect_set(scope)) as scope
from
(
select name1 as name, function, null as parts, null as Body, scope from table1
UNION ALL
select name2 as name, function, parts, Body, null as scope from table2
)s
group by name, function
【讨论】:
我需要将表 1 中的范围添加到最终结果中。以上是关于如何在 hive 中进行字符串连接的主要内容,如果未能解决你的问题,请参考以下文章
通过 Hive 或 Impala 或 Pig 中的字符串匹配连接表