Google bigquery 如何对特定列中的字符串值进行分组,并使用分组的字符串创建和添加列?

Google bigquery 如何对特定列中的字符串值进行分组,并使用分组的字符串创建和添加列?,google-bigquery,bigquery-udf,Google Bigquery,Bigquery Udf,我有以下模式: 看法 运动 日期 源介质, 关键词, 会议, 新课程, 平均会话长度秒, 用户, 新用户, 反弹, 目标\完成\所有\目标 我想将源/中字符串名称项分组到特定的组中: 例如,在源代码和媒体中,我有google/Organic、google/discovery、google/CPC、Paid/search、Facebook/social等字段,我想将它们分组为google Organic、Video discovery、google CPC、Paid search、Facebook

我有以下模式:

看法 运动 日期 源介质, 关键词, 会议, 新课程, 平均会话长度秒, 用户, 新用户, 反弹, 目标\完成\所有\目标

我想将源/中字符串名称项分组到特定的组中:

例如,在源代码和媒体中,我有google/Organic、google/discovery、google/CPC、Paid/search、Facebook/social等字段,我想将它们分组为google Organic、Video discovery、google CPC、Paid search、Facebook Organic等。我如何做到这一点


然后,当我创建了分组列后,我将如何将此列添加到原始列?

您应该能够执行以下操作

更改表格以允许添加列

ALTER TABLE mydataset.mytable
      ADD COLUMN grouped_column STRING;
创建一个函数来处理逻辑

CREATE TEMP FUNCTION grouper (source_medium string)
AS (
    CASE source_medium
    WHEN 'google/Organic' THEN 'Google Organic'
    ELSE 'OTHER LOGIC' END
);
使用您创建的函数更新表

UPDATE mydataset.mytable
set grouped_column = grouper(Source___medium)
where true
或者,您可以使用位于基础表顶部的视图执行此操作,如下所示:

CREATE VIEW  mydataset.myview AS
SELECT *
   , CASE source___medium
     WHEN 'google/Organic' THEN 'Google Organic'
     ELSE 'OTHER LOGIC' END
FROM mydataset.mytable
我如何才能将此列添加到原始列

考虑在UDF下面使用,并参见使用示例

CREATE TEMP FUNCTION DECODE(expr ANY TYPE, map ANY TYPE, `default` ANY TYPE ) AS ((
  IFNULL((SELECT result FROM UNNEST(map)  WHERE lower(search) = lower(expr)), `default`)
));  
WITH `project.dataset.table` AS (
    select 'google/Organic' Source_medium union all
    select 'google/discovery' union all
    select 'google/ CPC' union all
    select 'Paid /search' union all
    select 'Facebook / social' 
)
SELECT Source_medium,
  DECODE(Source_medium, 
    [STRUCT<search STRING, result STRING>
    ('google/Organic', 'Google Organic'),
    ('google/discovery', 'Video Discovery'),
    ('google/ CPC', 'Google CPC'),
    ('Paid /search', 'Paid Search'),
    ('Facebook / social', 'Facebook Organic')
    ], 'Other') AS Adjusted_Source_medium
FROM `project.dataset.table`     
上面示例的输出是


嗨,谢谢你的帮助。但是,如何对具有不同可变性的源\介质字段进行分组。例如,如果我想将包含谷歌、谷歌和有机或Orgic的字符串分组到谷歌Orgic中,我该如何重新定义函数?同时,如果您有后续或新问题-请发布新问题,我们将很乐意提供帮助!