sql - Hive查询:根据条件选择一列,另一列值匹配某些特定值,然后将匹配结果创建为新列
问题描述
我必须在 HiveQL 中进行一些查询和创建列操作。
例如,
app col1
app1 anybody love me?
app2 I hate u
app3 this hat is good
app4 I don't like this one
app5 oh my god
app6 damn you.
app7 such nice girl
app8 xxxxx
app9 pretty prefect
app10 don't love me.
app11 xxx anybody?
我想匹配一个关键字列表 like['anybody', 'love', 'you', 'xxx', 'don't']
并选择匹配的关键字结果作为新列,命名keyword
如下:
app keyword
app1 anybody, love
app4 I don't like this one
app6 damn you.
app8 xxx
app10 don't, love
app11 xxx
看来我必须使用嵌套查询。
逻辑有点像选择匹配的结果行并设置应保存在列表或类似内容中的匹配结果作为新列。
但我对 HiveQL 还不够熟悉。
有人可以帮我吗?
提前感谢。
解决方案
在 Hive 中,您可以使用stack
UDTF:
with keywords as (
select stack(4, --the number of tuples
'anybody', 'you', 'xxx', 'don\'t'
) as keyword
)
select t.app, k.keyword
from mytable t
inner join keywords k
on t.col1 like concat('%', k.keyword, '%')
此外,对于旧版本的 hive 连接使用like
将不起作用,请在 WHERE 中使用带有堆栈和过滤器的交叉连接:
from mytable t
cross join keywords k
where t.col1 like concat('%', k.keyword, '%')
推荐阅读
- node.js - mapbox 无法验证电子邮件
- android - 嵌套对象到适配器
- kubernetes - 在 EKS 中以不受支持的版本创建集群
- azure - 如何自动启用新 Azure VM 的日志记录?
- python - 合并两列并使用熊猫库创建新列
- amazon-web-services - 如何创建 AWS 托管 KMS 密钥
- python - Kubernetes:1 Pod 和 3 Pod 的性能没有区别?
- asp.net-core - 如何使用 SumAsync 计算 Asp.Net 核心中自定义值对象的总和
- node.js - GraphQL 订阅成功握手后收不到消息
- python - 在我没有 root 访问权限的服务器中的 docker 映像中运行 python 代码