繁体   English   中英

x 将值设置为两个变量时的 BigQuery 案例

[英]BigQuery case when x set values to two variables

我正在尝试在 BigQuery 中识别 GA4 数据中的会话级流量来源。 我最初使用 traffic_source 变量,直到我意识到它们与首先获得用户的流量来源相关:即如果我在 Google 上搜索 Apple,那么我的 traffic_source 将是有机的。 如果我然后单击来自 Apple 的 email 链接,我的 traffic_source 仍然是有机的(不是电子邮件)。

我可以从 session 开始事件中使用 utm 标签发现来自营销渠道的流量,但我现在正试图从不使用 utm 标签的渠道中查找流量:直接、有机搜索和推荐。 如果 page_location 没有 utm 标签并且 event_params 包含一个名为 referral 的填充字段,那么我就知道流量来自哪里。

SELECT
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS url,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer') AS referrer,
REPLACE(REGEXP_EXTRACT((SELECT value.string_value FROM UNNEST(event_params) WHERE 
 key = 'page_location'), 'utm_source=([^&]+)'), '%20', ' ') AS utm_source,
REPLACE(REGEXP_EXTRACT((SELECT value.string_value FROM UNNEST(event_params) WHERE 
 key = 'page_location'), 'utm_campaign=([^&]+)'), '%20', ' ') AS utm_campaign,
REPLACE(REGEXP_EXTRACT((SELECT value.string_value FROM UNNEST(event_params) WHERE 
 key = 'page_location'), 'utm_content=([^&]+)'), '%20', ' ') AS utm_content,
REPLACE(REGEXP_EXTRACT((SELECT value.string_value FROM UNNEST(event_params) WHERE 
 key = 'page_location'), 'utm_term=([^&]+)'), '%20', ' ') AS utm_term,
CASE
 WHEN 
REGEXP_CONTAINS((SELECT value.string_value FROM UNNEST(event_params) WHERE 
 key = 'page_location'), 'utm_') IS FALSE 
 AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer') IS NOT NULL 
      THEN 'organic' 
      AND utm_medium = (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer')
      ELSE REPLACE(REGEXP_EXTRACT((SELECT value.string_value FROM UNNEST(event_params) WHERE 
      key = 'page_location'), 'utm_medium=([^&]+)'), '%20', ' ')
  END AS utm_medium
FROM `bigquery***.analytics_***.events_***`
WHERE event_name = 'session_start'

所以在我的查询中,我从页面位置提取 utm 值并将它们放在新列中。 我用于自然搜索(不使用 utm 标签)我使用的是 CASE 语句。 我想将 utm_medium 设置为“有机”并将 utm_source 设置为推荐站点。 本质上是尝试这样做:

CASE 
 WHEN A = 1 THEN
  B = 'apple' AND C = 'fruit'
END 

这在 BigQuery 中可能吗?

CASE语句是用于创建单个列的表达式。 最简单的做法是简单地应用相同的表达式两次:

...
    CASE WHEN a = 1 THEN 'apple' ELSE ... END AS b,
    CASE WHEN a = 1 THEN 'fruit' ELSE ... END AS c,
...

或者,您可以使事情复杂化并使用STRUCT类型的列:

...
    CASE WHEN a = 1 THEN STRUCT('apple' AS B, 'fruit' AS C) ELSE ... END AS new_struct,
...

这一步完成了您的目标,并允许您将来执行SELECT new_struct.B, new_struct.C类的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM