具有BigQuery的unnesting customDimensions

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有BigQuery的unnesting customDimensions相关的知识,希望对你有一定的参考价值。

我已经编写了一个标准SQL查询来从BigQuery中提取一些Google Analytics数据。我在下面粘贴了一个用于测试的简化版本:

SELECT COUNT(DISTINCT(session_id))
FROM (
  SELECT
    CONCAT(CAST(fullVisitorId AS STRING), '.', CAST(visitStartTime AS STRING)) AS session_id
  FROM `myproject.ga_sessions_20180227`, UNNEST(hits) AS hits
);

运行此查询会输出6,696的唯一会话计数,与GA UI相比,这是准确的。

但是,当我将customDimensions引入查询时,我会丢失许多行。运行此查询仅输出6,606个唯一会话。

SELECT COUNT(DISTINCT(session_id))
FROM (
  SELECT
    CONCAT(CAST(fullVisitorId AS STRING), '.', CAST(visitStartTime AS STRING)) AS session_id,
    MAX(IF(customs.index = 14, customs.value, NULL)) AS custom_id
  FROM `myproject.ga_sessions_20180227`, UNNEST(customDimensions) AS customs
  GROUP BY fullVisitorId, visitStartTime
);

我没有使用hits.customDimensions,因为有问题的自定义维度是基于用户级别而不是命中级别。如果我不对输出进行分组,则会出错。

如何在不丢失行的情况下取消基于非命中的自定义维度?

答案

问题是CROSS JOIN(逗号):当用NULL交叉连接表时 - 或者在这种情况下是一个空的customDimensions - 结果总是NULL而不是只有左表。你想使用LEFT JOIN而不是CROSS JOIN,因为这会保留左表:

FROM `table` LEFT JOIN customDimensions AS cd

除此之外,您还可以使用简单的子选择而不是连接子表/数组:

SELECT
  (SELECT value FROM t.customDimensions WHERE index=1) AS cd1
  , COUNT(1) AS Qty
FROM `project.dataset.ga_sessions_20180202` AS t
GROUP BY 1

以上是关于具有BigQuery的unnesting customDimensions的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google BigQuery 中使用 UNNEST 函数获取 COUNT?

BigQuery:使用 UNNEST 检查数组的内容

UNNEST(hit.eCommerceAction),谷歌 Bigquery

Google Bigquery 外部加入 UNNEST

在 BIGQUERY 上使用 UNNEST 左连接

一次选择中的 Bigquery 多个 unnest