将 argMax 应用于 Clickhouse 中的多个列
Apply argMax over multiple columns in Clickhouse
我的 Clickhouse table 有一个主键列(pk
),一个插入时间戳列(insert_ts
)和一堆数据列。我想获取每个数据列的最新值。我的查询可能如下所示:
SELECT pk, argMax(data1, insert_ts), argMax(data2, insert_ts), ... GROUP BY pk
这太冗长了,我更喜欢像这样在 EXCEPT/APPLY 中使用通配符:
SELECT * EXCEPT(insert_ts) APPLY(argMax) GROUP BY pk
但是我无法指定 argMax
的第二个参数。有什么想法吗?
我对这个特定问题的答案很感兴趣,对 XY 问题的答案也很感兴趣,后者提出了一种不同的方式来构建我的 table。
感谢 Clickhouse 团队非常快速地实施解决方案!
SELECT * EXCEPT(insert_ts) APPLY(x->argMax(x,insert_ts)) GROUP BY pk
对于 XY 问题,Clickhouse 提供了 ReplacingMergeTree 引擎以明确仅保留最新的行:
我的 Clickhouse table 有一个主键列(pk
),一个插入时间戳列(insert_ts
)和一堆数据列。我想获取每个数据列的最新值。我的查询可能如下所示:
SELECT pk, argMax(data1, insert_ts), argMax(data2, insert_ts), ... GROUP BY pk
这太冗长了,我更喜欢像这样在 EXCEPT/APPLY 中使用通配符:
SELECT * EXCEPT(insert_ts) APPLY(argMax) GROUP BY pk
但是我无法指定 argMax
的第二个参数。有什么想法吗?
我对这个特定问题的答案很感兴趣,对 XY 问题的答案也很感兴趣,后者提出了一种不同的方式来构建我的 table。
感谢 Clickhouse 团队非常快速地实施解决方案!
SELECT * EXCEPT(insert_ts) APPLY(x->argMax(x,insert_ts)) GROUP BY pk
对于 XY 问题,Clickhouse 提供了 ReplacingMergeTree 引擎以明确仅保留最新的行: