如何解决Clickhouse Array Field - 检查是否有任何项目符合条件
在我的 Clickhouse 服务器中,我有一个带有 整数数组 字段的表:
CREATE TABLE my_table
(
...
my_array_field Array(UInt32),...
)
非常简单的定义。
但现在我想过滤匹配这样的条件的记录:
my_array_field 中的任何 itens 都在 5000 到 6000 之间
在 postgres 中我做了这样的事情:
SELECT * FROM my_table WHERE EXISTS
(
SELECT 1 FROM unnest(my_array_field) AS my_array_field WHERE my_array_field BETWEEN 5000 AND 6000
)
但现在我在 clickhouse 遇到了同样的挑战,需要一些帮助。
提前致谢!
解决方法
尝试使用 arrayJoin 函数:
SELECT
*,arrayJoin(my_array_field) AS val
FROM my_table
WHERE val BETWEEN 5000 AND 6000
查找详情ARRAY JOIN Clause。
如果遇到一些性能问题,请考虑添加两个额外的列来存储数组中的 max 和 min 值:
CREATE TABLE my_table
(
...
my_array_field Array(UInt32),UInt32 min_my_array_field,UInt32 max_my_array_field,...
)
INSERT INTO my_table
VALUES (..,arr,arrayMin(arr),arrayMax(arr),..)
SELECT
*,arrayJoin(my_array_field) AS val
FROM
(
SELECT *
FROM my_table
WHERE (min_my_array_field <= 6000) AND (max_my_array_field >= 5000)
)
WHERE val BETWEEN 5000 AND 6000
看 skipping indexes :例如 bloom_filter 支持数组类型。
,./ngrok http https://app.test:9283
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。