如何在Presto中基于URL首段路径对关联数值进行聚合
Presto 按URL首段路径分组聚合实现方案
需求说明
对给定URL字段按「域名+首段路径」分组,聚合计算对应Some_Value的总和。
实现方案
方法1:substr配合定位函数实现(符合你指定的substr使用要求)
通过strpos定位第二个/的位置,再做截断,兼容仅含一级路径的URL场景:
SELECT -- 截取从开头到第二个/之前的内容,无第二个/时保留完整URL substr( URL, 1, coalesce(nullif(strpos(URL, '/', 2), 0), length(URL)) ) AS URL, sum(Some_Value) AS agg_value FROM 你的数据表名 GROUP BY 1
参数解释:
strpos(URL, '/', 2):查找URL中第2次出现/的索引位置,不存在第2个/时返回0nullif(返回值, 0):将无匹配时返回的0转为nullcoalesce(返回值, length(URL)):如果是null(无第二个/)则取完整URL长度,避免截断错误
方法2:split_part拆分拼接实现(更简洁)
直接按/拆分URL后拼接域名和首段路径,逻辑更直观不易出错:
SELECT split_part(URL, '/', 1) || '/' || split_part(URL, '/', 2) AS URL, sum(Some_Value) AS agg_value FROM 你的数据表名 GROUP BY 1
两种方法执行后都可以得到你预期的聚合结果。
内容的提问来源于stack exchange,提问作者Kbbm
相关产品推荐
相关产品推荐

