ClickHouse 查询优化:groupArray() 函数位置调整
这个查询中使用了ClickHouse的特有函数'groupArray()',但是在该查询中的位置有误,需要修改为在子查询中使用。以下是修改后的查询:
SELECT ts, if(i >= 31, length(arrayDistinct(arrayFlatten(arraySlice(total, i-30, 31)))), length(arrayDistinct(arrayFlatten(arraySlice(total, 1, i))))) as total_num FROM ( SELECT groupArray(Ds) as t, groupArray(AppIdentifier) as app_id_list FROM ( SELECT AppIdentifier, Ds FROM log_iMonkey_iOS_overview GROUP BY AppIdentifier, Ds ) GROUP BY Ds order by Ds ) as A JOIN ( SELECT toStartOfMonth(Ds) as ts, count(distinct AppIdentifier) as app_count FROM log_iMonkey_iOS_overview WHERE Ds >= toDate('monthly_active_new_business.start') GROUP BY ts ORDER BY ts ) as C ON A.Ds = C.ts ARRAY JOIN A.t as t, A.total as total JOIN t as ts, arrayEnumerate(t) as i WHERE ts >= toDate('monthly_active_new_business.start')
这个查询首先在子查询中使用'groupArray()'函数,将每个日期和对应的AppIdentifier列表组合成两个数组。然后在主查询中,使用ARRAY JOIN将这两个数组展开,并按日期进行JOIN。最后,使用'arrayEnumerate()'函数对每个日期进行枚举,并根据条件计算'total_num'。
原文地址: https://www.cveoy.top/t/topic/oBfv 著作权归作者所有。请勿转载和采集!