Sql 单击将一个表中的数据聚集到另一个表中

Sql 单击将一个表中的数据聚集到另一个表中,sql,view,aggregate,materialize,clickhouse,Sql,View,Aggregate,Materialize,Clickhouse,我试图解决这个问题: 给定一个输入_表: 我想使用MV更新用户和应用程序的状态映射,如下面的output_表所示 一旦数据被插入到输入_表中,输出_表应立即更新 当输入_表中有输入数据时,如: 输出表应如下所示: > App1 , [user4, user5, user1] \ > App2 , [user2, user3] 我有一个非常简单的解决方案版本,但它是一个批处理更新,需要表扫描数据来重建映射。 是否有任何方法可以在短时间内完成部分操作,或者通过插入的每一行进行更新。我认

我试图解决这个问题:

给定一个输入_表:

我想使用MV更新用户和应用程序的状态映射,如下面的output_表所示

一旦数据被插入到输入_表中,输出_表应立即更新

当输入_表中有输入数据时,如:

输出表应如下所示:

> App1 , [user4, user5, user1] \
> App2 , [user2, user3]
我有一个非常简单的解决方案版本,但它是一个批处理更新,需要表扫描数据来重建映射。
是否有任何方法可以在短时间内完成部分操作,或者通过插入的每一行进行更新。我认为Materialize View可能会有所帮助,但我不确定每次插入input_table时要更新的输出表,因为您正在执行GroupBy,如果您在增量事务中执行,结果数据集将应用于该增量部分,而不是整个数据,因此,如果您的数据不是很大,那么在整个表中执行的最佳方式如下所示

SELECT app_name, GROUP_CONCAT(user_id) AS combined
FROM T
GROUP BY app_name

在使用物化视图之前,我建议对原始数据使用查询。为了加快查询的速度,请考虑在WHERE子句中定义日期范围。 选择app_name,groupArrayuser_id users 从…起 选择应用程序名称、用户id、argMaxstate、时间戳最后状态 从输入_表 其中时间戳介于1和11之间/*
> App1, user5, open, 6 \
> App1, user1, open, 7
> App1 , [user4, user5, user1] \
> App2 , [user2, user3]
SELECT app_name, GROUP_CONCAT(user_id) AS combined
FROM T
GROUP BY app_name