子句嵌套的 BigQuery 不符合预期

Posted

技术标签:

【中文标题】子句嵌套的 BigQuery 不符合预期【英文标题】:Clausing a nested BigQuery doesn't as expected 【发布时间】:2020-06-11 12:55:45 【问题描述】:

我基本上是在尝试查询一个名为 hits.CustomDimension.index 的列,所以我必须嵌套多次才能访问数据。我正在尝试过滤,因此它只显示 hits.CustomDimension.index = 16 的行以及下面的查询,但它返回所有 CustomDimension 行以获取任何具有 CustomDimension.index = 16 某处的观察。 不知道我做错了什么?正如您在我添加的图像中看到的那样,仍然出现 customDimension.index = 16 的所有自定义维度,我只希望将其展平。

SELECT * EXCEPT(hit, hits)

FROM ***,

UNNEST(hit) h

CROSS JOIN UNNEST(customDimensions) cd 

WHERE cd.index = 16 AND timeOnSite IS NOT NULL

【问题讨论】:

【参考方案1】:

下面试试

SELECT * 
FROM ******.ga_sessions_export, 
UNNEST(hits) h 
CROSS JOIN UNNEST(h.customDimensions) cd 
WHERE cd.index = 16 
LIMIT 10   

原始查询中的问题是您不是按 hits.customDimensions 过滤,而是按名为 customDimensions 的单独字段过滤

对比

【讨论】:

同样的问题。它会在自定义维度 11 出现的任何观察结果中返回所有自定义维度 那么我认为你应该用更多的细节/例子更好地定义你的问题 再仔细阅读我的回答!你可能会注意到一些有用的东西。这是答案的重点 @linacar231 这个解决方案是对的。您可能对字段感到困惑(GA 数据有三个名为 customDimensions 的字段)【参考方案2】:

自定义维度存储为数组。如果您只想查看特定的自定义维度,可以从 select 语句中排除匹配和匹配列。

SELECT * EXCEPT(hits, hit),
FROM ******.ga_sessions_export, 
UNNEST(hits) hit,
UNNEST(customDimensions) cd
WHERE cd.index = 16
LIMIT 10

【讨论】:

这仍然返回任何出现 cd.index = 16 的观察结果!附上它的外观图片 啊,我明白了。你只想看到 cd.index = 16。我现在正在编辑它。

以上是关于子句嵌套的 BigQuery 不符合预期的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中展平嵌套层次结构

插入到选定的 BigQuery 嵌套列中

BigQuery UPDATE 嵌套数组字段

如何使用 bigquery 流向现有记录插入嵌套数据

如何从未嵌套的数据(BigQuery 中的 Google Analytics 数据)返回正确的汇总总数

Google BigQuery 优化策略