【问题标题】:Apply argMax over multiple columns in Clickhouse在 Clickhouse 中的多个列上应用 argMax
【发布时间】:2021-08-19 14:31:04
【问题描述】:

我的 Clickhouse 表有一个主键列 (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 问题的答案都感兴趣,这些答案提出了一种不同的方式来构建我的表格。

【问题讨论】:

标签: clickhouse


【解决方案1】:

感谢 Clickhouse 团队快速实施解决方案!

SELECT * EXCEPT(insert_ts) APPLY(x->argMax(x,insert_ts)) GROUP BY pk

对于 XY 问题,Clickhouse 提供了 ReplacingMergeTree 引擎,用于明确保留最新的行:

【讨论】:

  • 最新的行只保留在一个分区内,并在分区中合并部分后。如果你有大分区或频繁插入或同时插入多个分区,你将面临ReplacingMergeTree中具有相同PK的多行。而且,当然,这些东西只在一个分片内有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
相关资源
最近更新 更多