1

我有以下架构:

查看活动、日期、来源___媒体、关键字、会话、New_sessions__、Avg__session_length__sec_、用户、New_users、跳出、Goal_completions_all_goals

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

例如,在来源和媒体中,我有 google/Organic、google/discovery、google/CPC、付费/搜索、Facebook/社交等字段,我想将它们分组为 Google Organic、Video Discovery、Google CPC、付费搜索、Facebook有机等。我该怎么做?

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

4

2 回答 2

1

我如何能够将此列添加到原始列?

考虑使用下面的 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`     

上面例子的输出是

在此处输入图像描述

于 2021-02-05T22:12:37.047 回答
0

您应该能够执行以下操作

更改表以允许附加列

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
于 2021-02-05T17:08:19.247 回答