gpt4 book ai didi

sql - 在 Impala 中使用字符串或数组检查子集

转载 作者:可可西里 更新时间:2023-11-01 16:36:53 25 4
gpt4 key购买 nike

我有一张这样的 table

 col
-----
A,B

col 可以是带逗号的字符串或数组。我在存储方面具有灵 active 。

如何检查 col 是另一个字符串或数组变量的子集?例如:

B,A --> TRUE(顺序无关紧要)

A,D,B --> TRUE(中间的其他项)

A,D,C --> FALSE(缺少 B)

我在类型上有灵 active 。该变量是我无法存储在表中的内容。

如果您仅对 Impala(无 Hive)有任何建议,请告诉我。

谢谢

最佳答案

一个不太漂亮的方法,但也许是一个起点......

假设一个表有一个唯一标识符列 id和一个 array<string>专栏col , 和一个带有 ',' 的字符串变量作为分隔符 (并且没有出现转义的 '\,' )...

SELECT
yourTable.id
FROM
yourTable,
yourTable.col
GROUP BY
yourTable.id
HAVING
COUNT(DISTINCT CASE WHEN find_in_set(col.item, ${VAR:yourString}) > 0 THEN col.item END)
=
LENGTH(regexp_replace(${VAR:yourString},'[^,]',''))+1

基本上...

  • 扩展表格中的数组,每个数组项一行。
  • 检查字符串中是否存在每一项。
  • 重新聚合以计算在字符串中找到了多少项。
  • 检查找到的项数是否与字符串中的项数相同

COUNT(DISTINCT <CASE>)处理类似 {'a', 'a', 'b', 'b'} 的数组.

如果不将字符串扩展为数组或表(我不知道该怎么做),您需要字符串中的项目是唯一的。 (因为我只是计算字符串中的逗号以找出有多少项...)

关于sql - 在 Impala 中使用字符串或数组检查子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50483408/

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