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

Snowflake中如何聚合VARIANT列并保留原有JSON结构?

Snowflake中保留原有结构聚合VARIANT列的实现

可以实现这类需求,无需拆分后手动重新组合,通过Snowflake的JSON处理函数和聚合函数即可完成。以下是针对你提供的示例数据的具体实现方案:

假设你的数据存储在表your_table中,FEES_APPLIED为目标VARIANT列,执行以下SQL即可得到期望的聚合结果:

SELECT
  OBJECT_AGG(
    fee_key,
    OBJECT_CONSTRUCT(
      'Amount', SUM(fee_value:Amount::FLOAT),
      'Currency', MAX(fee_value:Currency::STRING)
    )
  ) AS aggregated_fees
FROM
  your_table,
  LATERAL FLATTEN(input => FEES_APPLIED, mode => 'OBJECT') f(fee_key, fee_value);

代码说明:

  • LATERAL FLATTEN:将VARIANT列的顶层键值对(如FeesAppliedTotal、ReceiptFee等)展开为行,每行包含一个费用项的键(fee_key)和对应的嵌套对象(fee_value)。
  • 聚合计算:对每个fee_key分组,累加Amount值;由于示例中所有Currency取值一致,用MAX或ANY_VALUE提取即可。
  • OBJECT_AGG + OBJECT_CONSTRUCT:将聚合后的每个费用项重新构造为嵌套对象,再通过OBJECT_AGG组合回原始的VARIANT结构。

执行上述SQL后,得到的结果与你期望的结构完全一致:

{
  "FeesAppliedTotal": {
    "Amount": 1.6,
    "Currency": "GBP"
  },
  "ReceiptFee": {
    "Amount": 0.4,
    "Currency": "GBP"
  },
  "ReminderFee": {
    "Amount": 0.4,
    "Currency": "GBP"
  },
  "TransactionFee": {
    "Amount": 0.8,
    "Currency": "GBP"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:56:30