如何在 WHERE 子句中使用 hits.customDimensions.index 查询 GA 导出到 BQ 模式?
Posted
技术标签:
【中文标题】如何在 WHERE 子句中使用 hits.customDimensions.index 查询 GA 导出到 BQ 模式?【英文标题】:How to query GA export to BQ schema with hits.customDimensions.index in WHERE clause? 【发布时间】:2015-06-26 03:28:31 【问题描述】:截至几天前,以下查询在 the schema generated by an export from GA 的 BQ 上运行良好:
SELECT hits.customDimensions.value
FROM TABLE_DATE_RANGE([88399188.ga_sessions_], TIMESTAMP('20150623'), TIMESTAMP('20150623'))
WHERE hits.customDimensions.index=14
LIMIT 1000
现在,我收到以下错误:
Error: Cannot query the cross product of repeated fields customDimensions.index and hits.customDimensions.index.
有趣的是,以下查询可以正常工作(即没有 WHERE 子句):
SELECT hits.customDimensions.value
FROM TABLE_DATE_RANGE([88399188.ga_sessions_], TIMESTAMP('20150623'), TIMESTAMP('20150623'))
LIMIT 1000
此外,以下查询也可以正常工作:
SELECT hits.customDimensions.value
FROM [88399188.ga_sessions_20150623]
WHERE hits.customDimensions.index=14
LIMIT 1000
请注意,FROM 子句是这个和失败查询之间的唯一区别;即使它们应该解析为完全相同的查询。请帮忙!我做错了什么?
【问题讨论】:
【参考方案1】:问题在于 customDimensions 都是 REPEATED RECORD,而 hits 是 REPEATED RECORD,并且每个都可以相互独立地重复。因此,在过滤 hits.customDimensions.index 时选择 hits.customDimensions.value 的含义并没有很好的定义。例如,如果您想在非 hits.customDimensions.index 为 14 时跳过整条记录,则可以使用以下查询:
SELECT hits.customDimensions.value
FROM TABLE_DATE_RANGE(
[88399188.ga_sessions_], TIMESTAMP('20150623'), TIMESTAMP('20150623')
OMIT RECORD IF EVERY(hits.customDimensions.index != 14)
LIMIT 1000
【讨论】:
那么为什么我的问题中的最后一个查询有效?是不是同样模棱两可? 您的上一个查询使用了相同的重复组 hits.customDimensions,并从中选择了两个字段 - 索引和值。由于它们一起重复 - 为哪个索引选择哪个值没有歧义。 但这两个字段与我在第一个查询失败时使用的完全相同。第一个查询和最后一个查询之间的唯一区别是 FROM 子句应该解析到同一个表。 我一定误读了您的原始问题,出于某种原因,我认为您混合使用了 customDimensions 和 hits.customDimensions。如果您只使用 hits.customDimensions - 那么一切正常,包括您的第一个查询。 看起来有一个临时错误现在已修复。【参考方案2】:此异常不再可重现。虽然我没有得到谷歌的确认,但我不得不假设这是一个已修复的临时错误。
【讨论】:
以上是关于如何在 WHERE 子句中使用 hits.customDimensions.index 查询 GA 导出到 BQ 模式?的主要内容,如果未能解决你的问题,请参考以下文章