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

Sql 在Impala中使用字符串或数组检查子集,sql,hadoop,hive,bigdata,impala,Sql,Hadoop,Hive,Bigdata,Impala,我有一张这样的桌子 col ----- A,B col可以是带有逗号或数组的字符串。我在存储方面有灵活性 如何检查col是否是另一个字符串或数组变量的子集?例如: B,A-->TRUE(顺序不重要) A、D、B-->TRUE(中间的其他项目) A、D、C-->FALSE(缺少B) 我对字体有弹性。这个变量是我无法存储在表中的 请让我知道,如果你有任何建议的黑斑羚只(没有蜂巢) 谢谢,这不是一个很好的方法,但也许是一个起点 假设一个表具有唯一标识符列id和数组列col,以及一个字符串变量,其

我有一张这样的桌子

 col
-----
 A,B
col
可以是带有逗号或数组的字符串。我在存储方面有灵活性

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

B,A
-->
TRUE
(顺序不重要)

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

A、D、C
-->
FALSE
(缺少
B

我对字体有弹性。这个变量是我无法存储在表中的

请让我知道,如果你有任何建议的黑斑羚只(没有蜂巢)


谢谢,这不是一个很好的方法,但也许是一个起点

假设一个表具有唯一标识符列
id
数组
col
,以及一个字符串变量,其中
,'
作为分隔符(并且没有出现转义的
,'

基本上

  • 将表中的数组展开为每个数组项一行
  • 检查字符串中是否存在每个项
  • 聚合备份以计算在字符串中找到的项的数量
  • 检查找到的项目数是否与字符串中的项目数相同
COUNT(DISTINCT)
处理像
{'a','a','b','b'}
这样的数组


如果不将字符串扩展为数组或表(我不知道怎么做),您将依赖于字符串中的项是唯一的。(因为我只是在字符串中计算逗号来找出有多少项……)

从来没有,甚至考虑将数据集存储为逗号分隔的列表。使结构正常化,或者按照您的建议使用数组。但是在任何数据库中使用逗号分隔的字符串都应该受到monty python的惩罚…@MatBailie它的企业设计将LDAP信息存储在列中。如果需要的话,我可以单独安排一张桌子。但我无法控制变量组件,因为它同样来自LDAP,被引入“活动”(不是作为缓存保存在表中),我现在无法访问Impala。如何选择数组变量的每一行?例如,
SELECT*fromtyourtable,yourTable.col
将数组列展开成新行。使用变量执行此操作的语法是什么?(完成后,我可以向您展示标准的SQL方法。)不,变量是固定字符串,而不是来自另一个表。变量不能是数组?这非常有创意。非常感谢。
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