在ClickHouse,JOIN中查询此信息的最佳方法vs重复信息

问题描述:

我遇到以下问题。在ClickHouse,JOIN中查询此信息的最佳方法vs重复信息

我需要记录很多信息,而不是以多种方式进行组合和过滤。 这些信息恰巧有这样的步骤,让我们想象它有4个步骤,其中每一步添加更多信息到上一步。

目前,我有4个表格,每一步的每一步,每一步的所有信息和前一个。

所以一个例子是。

第一步(TRANSACTION_ID,日期,COUNTRY_ID,DEVICE_ID,browser_id,IP,LANGUAGE_ID,target_id等) - > 40kk记录

第二步(TRANSACTION_ID,日期,COUNTRY_ID,DEVICE_ID,browser_id,IP,LANGUAGE_ID,target_id, step2_date,step2_ip等) - > 35kk记录

第三步(TRANSACTION_ID,日期,COUNTRY_ID,DEVICE_ID,browser_id,IP,LANGUAGE_ID,target_id,step2_date,step2_ip,step3_date,step3_ip,TIME_TAKEN等) - > 5KK记录

Step4(transaction_id,date,country_id,device_id,browser_id,ip,language_id,target_id,step 2_date,step2_ip,step3_date,step3_ip,time_taken,step4_date,step4_ip,final_value等) - > 1kk记录

正如您在示例中看到的,每个步骤都包含所有以前的数据和新的字段。

理想的做法是先将所有初始数据(当前大约有50个字段)和其他步骤与每个步骤的附加数据进行第一步,然后通过transaction_id加入JOIN并能够GROUP和过滤。

我试过这种方法,但是因为它必须对每个条目进行迭代才能匹配其他步骤中的事务,所以它看起来不太理想。 (查询时间大约需要3秒,而另一方面需要大约0.1秒)

另一方面,拥有每个表中所有可用信息,允许我过滤UNION或JOIN之前的数据,这是相当快,但我需要在每一步复制数据..

我需要从4个步骤查询一个SELECT,这将告诉我例如一个特定的日期和device_id和group_ country_id多少个step1,步骤2,步骤3,步骤4以及每个步骤可能具有的其他标志。

因此,问题是如果有其他方法来加快步骤之间的关系,以避免在每个步骤中重复信息并保持速度? 也许一种方法来索引transaction_id(这是唯一的,并在第一步中生成)

让我们考虑一下step1表会每天接收约100kk的记录,而另一个则获得尽可能多的信息。

谢谢。

我会保留所有数据在一个表中,然后使用AggregatingMergeTree/CollapsingMergeTree引擎和/或聚合函数,如argMin/argMax或sequenceMatch。

我会避免JOINs,因为它们花费很多,重复似乎是OLAP情况下的最佳解决方案。