如何在Redshift的SUPER类型列上编写IN查询
Redshift Super类型数组的包含查询方法
针对你在Redshift中使用Super类型存储JSON数组,需要检查数组任意元素是否存在于指定集合中的需求,以下是两种可行的查询方式:
方法1:使用ANY操作符匹配数组元素
利用Redshift对Super数组的支持,通过user_segments[*]表示数组的所有元素,结合ANY操作符判断目标值是否存在于数组中:
SELECT * FROM test_table WHERE 5 = ANY(user_segments) OR 6 = ANY(user_segments);
如果目标值集合较大,可简化为数组形式传入:
SELECT * FROM test_table WHERE user_segments[*] && ARRAY[5,6]::SUPER;
方法2:通过UNNEST展开数组后筛选
使用PartiQL的UNNEST函数将数组展开为行,再筛选匹配的记录并去重:
SELECT DISTINCT t.* FROM test_table t, UNNEST(t.user_segments) AS segment WHERE segment IN (5, 6);
补充说明
- 你之前尝试的
user_segments IN (5,6)无法运行,是因为user_segments是数组类型,该写法会将整个数组与单个数值比较,逻辑不匹配; - 指定索引
user_segments[0]仅会检查数组第一个元素,无法覆盖所有元素。
内容的提问来源于stack exchange,提问作者user1468899
相关产品推荐
相关产品推荐

