如何在 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 中连接之前排序字符串

在 Hive 中使用分隔符连接多行

通过 Hive 或 Impala 或 Pig 中的字符串匹配连接表

无法使用 Zookeeper 连接字符串通过 JDBC 连接到 Hive

如何使用R连接Hive与Impala

如何在 Terraform 中进行简单的字符串连接?