我有一个ClickHouse表,其中有一个Array(UInt16)列。我想要过滤这个表的结果,只获取数组列中值大于某个阈值的行。我一直在尝试使用一些数组函数(如arrayFilter和arrayExists),但我对SQL/Clickhouse查询语法不够熟悉,无法使其工作。
我使用以下命令创建了该表:
CREATE TABLE IF NOT EXISTS ArrayTest (
date Date,
sessionSecond UInt16,
distance Array(UInt16)
) Engine = MergeTree(date, (date, sessionSecond), 8192);
距离值将是从某个点在一定秒数(sessionSecond)后的距离。我已添加了一些示例值,因此表格如下所示:
现在我想获取所有包含距离大于7的行。我在这里找到了数组运算符文档,并尝试使用arrayExists函数,但它的工作方式不符合我的预期。根据文档,该函数"如果' arr '中至少有一个元素使' func '返回非零,则返回1。否则,返回0"。但是当我运行以下查询时,我得到三个零,而我应该得到一个零和两个一:
SELECT arrayExists(
val -> val > 7,
arrayEnumerate(distance))
FROM ArrayTest;
最终我想执行此选择,然后将其与表内容连接以仅返回具有exists = 1的行,但我需要先完成这一步骤。我使用arrayExists有误吗?更令我困惑的是,当我将比较值更改为2时,我会得到所有的1。这种过滤是否可以使用数组函数实现?
谢谢
SELECT * FROM ArrayTest WHERE distance[1] > 5
- Mikhail