You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FLATTEN实现JSON变体列属性的去重ID计数统计?

解决方案:展开JSON属性并统计去重ID数

针对你需要按JSON列的属性统计去重ID数量的需求,使用FLATTEN函数可以轻松实现,以下是完整的SQL查询及说明:

完整查询语句

WITH Table1 AS (
    SELECT 'A123' AS ID, PARSE_JSON('{"ATTR1":"Y", "ATTR2":"Y","ATTR3":"Y"}') AS ATTR UNION ALL
    SELECT 'B234' AS ID, PARSE_JSON('{"ATTR1":"Y", "ATTR2":"Y","ATTR3":"Y"}') AS ATTR UNION ALL
    SELECT 'C567' AS ID, PARSE_JSON('{"ATTR1":"Y", "ATTR2":"Y","ATTR3":"Y"}') AS ATTR UNION ALL
    SELECT 'D019' AS ID, PARSE_JSON('{"ATTR1":"Y", "ATTR2":"Y","ATTR3":"Y"}') AS ATTR UNION ALL
    SELECT 'E923' AS ID, PARSE_JSON('{"ATTR1":"Y", "ATTR2":"Y"}') AS ATTR
)
SELECT 
    f.key::STRING AS "ATTR_FLAT",
    COUNT(DISTINCT t.ID) AS "count(distinct ID)"
FROM Table1 t,
LATERAL FLATTEN(input => t.ATTR, mode => 'OBJECT') f
GROUP BY ATTR_FLAT
ORDER BY ATTR_FLAT;

关键部分说明

  • LATERAL FLATTEN:通过mode => 'OBJECT'参数,将JSON对象的每个键值对拆分为独立行,每行包含属性名(key)和属性值(value)。LATERAL关键字确保每行原始数据都能被正确展开。
  • 属性名提取:用f.key::STRING将JSON键转换为字符串类型,作为最终的ATTR_FLAT列。
  • 分组统计:按ATTR_FLAT分组后,使用COUNT(DISTINCT t.ID)计算每个属性对应的去重ID数量。

查询结果

执行上述语句后,将得到你期望的结果:

ATTR_FLATcount(distinct ID)
ATTR15
ATTR25
ATTR34

内容的提问来源于stack exchange,提问作者BTag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:22:08