无法使用 BigQuery 标准 SQL 提取特定 ID 的自定义维度

Posted

技术标签:

【中文标题】无法使用 BigQuery 标准 SQL 提取特定 ID 的自定义维度【英文标题】:Unable to pull Custom Dimension for a specific ID using BigQuery Standard SQL 【发布时间】:2017-10-17 23:34:57 【问题描述】:

我遇到了一个案例,我可以在 GA 中看到特定 ID(CustomDimension 2)的 CustomDimension1 的值。但是当我使用标准 SQL 从 BigQuery 中提取值时,我找不到该值,而是显示空值。

SELECT fullVisitorId, CD1, CD2
FROM (
  SELECT
    fullvisitorid, 
    (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customDimensions)) AS CD1,
    (SELECT MAX(IF(index=2, value, NULL)) FROM UNNEST(hits.customDimensions)) AS CD2
  FROM `XXXXXXXXXXXXX`, UNNEST(hits) AS hits
)
WHERE CD2= '111111' and CD1 IS NOT NULL

【问题讨论】:

从 where 子句中删除 and CD1 is not null - 查询的其余部分对我来说看起来不错 - 但绝对是您的逻辑的主题 @MikhailBerlyant 感谢您的回复。当我删除“CD1 is not null”时,我只能看到空值。在逻辑方面,我正在寻找特定 CD2 ID 的 CD1 值,我可以在 Google Analytics 中看到它,它不是空值。 用 MAX 代替 MIN 还是没有运气?我建议您提供一个很好的数据示例来显示您的问题!我怀疑您的数据不是您所期望的,因此考虑 我的意思是thus nulls :o) 【参考方案1】:

您不需要标准 sql 中的 MAX(IF(...)) 技巧,只需在您的 SELECT 语句中使用子选择 - 类似于 (SELECT value FROM UNNEST(customDimensions) WHERE index=1) AS cd1 或在您的特定情况下

SELECT
  fullvisitorid, visitstarttime, hitnumber,
  (SELECT cd.value
   FROM h.customDimensions AS cd
   WHERE cd.index=16 ) AS hitsCd2
FROM
  `project.dataset.ga_sessions_20171210` AS t, t.hits as h -- flatten to hits scope with cross join
LIMIT
  1000

一般的做法是:首先展平到您想要的维度范围,在这种情况下命中范围。然后计算所有指标 - 较低范围的子选择和较高范围的 count(distinct some_id)。

【讨论】:

以上是关于无法使用 BigQuery 标准 SQL 提取特定 ID 的自定义维度的主要内容,如果未能解决你的问题,请参考以下文章

在 bigquery 标准 sql 上提取两个日期之间的小时数

bigquery 标准 sql = 从字符串中提取数据

努力从 BigQuery SQL 中的时间戳字段中提取特定月份的 DATE

bigquery 标准 sql 获取 dayofweek

无法在 python 中对 bigquery 运行标准 SQL 查询

无法识别的名称:使用 bigquery 标准 sql 进行嵌套查询时出错