sql - 如何在 hive 中进行字符串连接
问题描述
我有 2 个表让我们说表 1 如下
和表2如下
我期望的结果是
我在 hive 中尝试了 concat_ws 方法,但结果与预期不符,而且当我使用 concat_ws 方法时,我只能申请 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
推荐阅读
- docker - 使用 GitHub Action 在自定义 docker 容器中运行步骤时出现问题
- ansible - Ansible Molecule 如何使用多个 group_vars
- javascript - 让 setTimeout() 加载页面
- corda - Corda Performance 多次调用 Flow
- javascript - 如何使用 d3plus.TextBox() 模块进行 SVG 换行和自动字体大小缩放(在 D3.js 层次结构树上)
- java - 在客户端手动创建 Solr CursorMark
- node.js - 如何显示来自 Mongoose 的错误?
- ionic-framework - 在 Azure B2C + 离子电容器 InAppBrowser 谷歌登录上获取 403 disallowed_useragent
- vb.net - 将 WHERE 子句添加到组连接
- firebase - 在 ionic 3 中使用 changes.map 从 firebase 获取数据时出错