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

Snowflake平台AB4、AB5用户统计查询效率优化咨询

Snowflake查询优化方案

你原有的UNION实现需要对同一张表扫描2次,我们可以通过单次表扫描+行转列+条件聚合的方式实现相同逻辑,性能更优,尤其在大表场景下提升明显。

优化后代码(适配Snowflake特性)

SELECT
    v.value::STRING AS Product,
    COUNT(*) AS CNT,
    SUM(IFF(Multi_unit = 1, 1, 0)) AS Multi,
    -- 仅统计multi_unit用户的其他产品持有量,贴合需求描述
    SUM(IFF(Multi_unit = 1, AB300_ind, 0)) AS AB300,
    SUM(IFF(Multi_unit = 1, AB10_ind, 0)) AS AB10,
    SUM(IFF(Multi_unit = 1, AB20_ind, 0)) AS AB20,
    SUM(IFF(Multi_unit = 1, AB30_ind, 0)) AS AB30
FROM TABLE.VIEW.MAW,
LATERAL FLATTEN(input => ARRAY_CONSTRUCT(
    IFF(AB4_ind = 1, 'AB4', NULL),
    IFF(AB5_ind = 1, 'AB5', NULL)
)) v
WHERE v.value IS NOT NULL
GROUP BY 1
ORDER BY 1

方案说明

  1. 性能优势:仅对源表扫描1次,IO消耗比原UNION写法降低一半,数据量越大性能提升越明显
  2. 逻辑正确性:对同时持有AB4和AB5的用户,会自动拆分到两个产品的统计口径中,和原有逻辑完全一致,输出结果和你给出的预期完全匹配
  3. 易扩展性:后续如果要新增AB6、AB7等其他产品的同口径统计,只需要在ARRAY_CONSTRUCT中新增对应行即可,不需要重复编写UNION子句
  4. 适配性调整:如果你的需求是统计所有持有对应产品用户的其他产品持有量,去掉SUM函数里的Multi_unit = 1判断即可,和你原有写法的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:03