如何在 bigquery sql 中匹配多列中的值并替换为多列中的新值?

How to match values from multiple columns and replace with new values in multiple columns in bigquery sql?

我的主要 table 数据由媒体、网络组成,需要通过与这 3 列中的值完全匹配来重命名字典中 3 列中的值 table。我如何在 bigquery sql 中执行此操作?

我目前有一本字典 table,其中包含如下数据:

medium network name newMedium newNetwork newName
CPI FBIg campaignA CPC meta campaignA
flyering offline flyerA offline flyering flyerA

和主要 table 这样的:

medium network name date
cpc meta campaignA 2022-05-01
CPI FBIg campaignA 2022-03-01
offline flyering flyerA 2022-04-01
flyering offline flyerB 2022-04-02
flyering offline flyerA 2022-04-03

进入

medium network name date
cpc meta campaignA 2022-05-01
CPC meta campaignA 2022-03-01
offline flyering flyerA 2022-04-01
flyering offline flyerB 2022-04-02
flyering offline flyerA 2022-04-03

因此它将匹配媒体、网络、名称并将所有值替换为 newMedium、newNetwork、newName。

我想这个查询就是你要找的:

SELECT
  COALESCE(dict.newMedium, main.medium) medium
  , COALESCE(dict.newNetwork, main.network) network
  , COALESCE(dict.newName, main.name) name
  , main.date
FROM
  main_table main
  LEFT JOIN dictionary_table dict
  ON (main.medium = dict.medium AND main.network = dict.network AND main.name = dict.name)

基本上,只需 LEFT JOIN 两个表。这样做,non-matching 个字段将是 NULL。这样,您可以使用 COALESCE 来使用 newField,如果它存在,或者 main.field 否则。