Athena/Presto统计ROW类型字段条目数的SQL实现方法
解决方案
你可以通过将ROW类型的records字段转为JSON,再统计JSON根节点的元素数量实现需求。
场景1:单device_id+date对应单行记录
如果你的表中每个device_id + date组合仅对应唯一一行数据,使用以下SQL:
SELECT device_id, date, json_size(CAST(records AS JSON), '$') AS recordsNb FROM "default"."table" -- 可按需添加WHERE过滤条件 WHERE date = '2021-07-24'
场景2:单device_id+date对应多行记录
如果同一个device_id + date组合存在多条数据,需要汇总所有行的records条目总数,使用以下SQL:
SELECT device_id, date, SUM(json_size(CAST(records AS JSON), '$')) AS recordsNb FROM "default"."table" GROUP BY device_id, date -- 可按需添加过滤条件
说明
json_size函数会返回指定JSON路径下的元素数量,这里指定$根路径,刚好对应records转换为JSON后的顶层键的数量,也就是你需要的records条目数。
如果尝试将records直接转为MAP统计长度,会因为子ROW的结构不一致触发类型匹配错误,因此转为JSON统计的方案适配性更高。
内容的提问来源于stack exchange,提问作者Quentin Del
相关产品推荐
相关产品推荐

