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

在BigQuery(dbt Cloud)中如何实现多列code与维度表的正确关联?

解决方案:BigQuery中实现列转行并关联表

你当前的问题核心是未先完成列转行操作,直接用OR关联会导致code值无法正确映射到独立行,还会产生不符合预期的重复数据。正确的步骤是先把t1中2021_code、2022_code、2023_code这三列的非空值转为独立行,再和t2关联获取label。

以下是两种适配BigQuery的实现方式:

方法1:使用UNPIVOT语法(推荐,直观易维护)

WITH unpivoted_t1 AS (
  SELECT 
    id,
    code
  FROM t1
  UNPIVOT (
    code FOR year_code IN (2021_code, 2022_code, 2023_code)
  )
  WHERE code IS NOT NULL -- 过滤空的code值
)
SELECT 
  ut.id,
  ut.code,
  t2.label
FROM unpivoted_t1 ut
JOIN t2 ON ut.code = t2.code
ORDER BY ut.id, ut.code;

方法2:使用UNNEST+数组构造

WITH unpivoted_t1 AS (
  SELECT
    id,
    UNNEST([2021_code, 2022_code, 2023_code]) AS code
  FROM t1
  WHERE UNNEST([2021_code, 2022_code, 2023_code]) IS NOT NULL
)
SELECT 
  ut.id,
  ut.code,
  t2.label
FROM unpivoted_t1 ut
JOIN t2 ON ut.code = t2.code
ORDER BY ut.id, ut.code;

说明

  • UNPIVOT是BigQuery专门用于列转行的语法,清晰指定要转换的列集合,自动生成每行对应的code值,再过滤空值即可得到t1的扁平化数据。
  • UNNEST方式是将三个code列打包成数组,再打散为多行,同时过滤空值,适合灵活处理动态列的场景。
  • 两种方式处理后,再与t2通过code等值关联,就能得到你需要的最终结果表。

你之前的SQL错误在于:用OR关联时,无法将每个code值映射为独立行,且code列无法明确对应到t1的某一列,最终会出现数据重复或值不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:03:19