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

如何在BigQuery中通过SQL按映射规则对数据分组?

纯SQL实现BigQuery大规模数据的分组映射汇总

是的,完全可以仅用SQL在BigQuery中实现这种分组映射需求,而且针对大规模数据也能高效运行。以下是两种常用的实现方式:

方法1:使用CASE语句直接映射

如果你的映射规则固定且数量不多,直接用CASE WHEN语句是最简洁的方式:

SELECT
  CASE
    WHEN Product_Code IN ('AA1', 'AA2') THEN 'AA1'
    WHEN Product_Code IN ('BB1', 'BB2') THEN 'BB1'
    ELSE Product_Code  -- 保留不需要映射的产品编码
  END AS Mapped_Product_Code,
  Country,
  SUM(Sales) AS Total_Sales
FROM
  `你的项目名.你的数据集名.你的表名`
GROUP BY
  Mapped_Product_Code,
  Country;

BigQuery会并行处理CASE逻辑,即使是数十亿行的大规模数据,也能高效完成计算,不会成为性能瓶颈。

方法2:使用映射表关联查询

如果映射规则复杂、数量较多或需要频繁更新,建议创建一个独立的映射表,通过关联查询实现分组:

步骤1:创建映射表(临时或永久均可)

-- 创建临时映射表(会话结束后自动销毁)
CREATE TEMP TABLE Product_Mapping AS
SELECT 'AA1' AS Original_Code, 'AA1' AS Mapped_Code UNION ALL
SELECT 'AA2' AS Original_Code, 'AA1' AS Mapped_Code UNION ALL
SELECT 'BB1' AS Original_Code, 'BB1' AS Mapped_Code UNION ALL
SELECT 'BB2' AS Original_Code, 'BB1' AS Mapped_Code;

步骤2:关联原始表并汇总

SELECT
  pm.Mapped_Code,
  o.Country,
  SUM(o.Sales) AS Total_Sales
FROM
  `你的项目名.你的数据集名.你的表名` o
LEFT JOIN  -- 使用LEFT JOIN保留未在映射表中的产品编码
  Product_Mapping pm
ON
  o.Product_Code = pm.Original_Code
GROUP BY
  pm.Mapped_Code,
  o.Country;

这种方式的优势在于映射规则集中管理,后续修改只需更新映射表,无需修改主查询逻辑,同样能高效支持大规模数据处理。

性能说明

BigQuery的分布式架构天生适合处理大规模数据,上述两种方法都会被自动优化为并行执行。如果你的表已经做了分区或聚类,查询性能会进一步提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:50:05