【问题标题】:BigQuery error: Cannot query the cross product of repeated fieldsBigQuery 错误:无法查询重复字段的叉积
【发布时间】:2015-08-04 17:09:32
【问题描述】:

我正在 Google BigQuery 网络界面上运行以下查询,以获取 Google Analytics 提供的数据:

SELECT *
FROM [dataset.table]
WHERE
  hits.page.pagePath CONTAINS "my-fun-path" 

我想将结果保存到新表中,但是在使用 Flatten Results = False 时收到以下错误消息:

错误:无法查询重复字段的叉积 customDimensions.value 和 hits.page.pagePath。

这个答案暗示这应该是可能的:Is there a way to select nested records into a table?

发现的问题有解决方法吗?

【问题讨论】:

标签: google-analytics google-bigquery


【解决方案1】:

根据您可以接受的过滤类型,您可以通过从 WHERE 切换到 OMIT IF 来解决此问题。它会给出不同的结果,但同样,这种不同的结果也许是可以接受的。 如果其中的(某些)页面符合标准,则以下将删除整个命中记录。注意两点:

  • 它使用 OMIT hits IF,而不是更常用的 OMIT RECORD IF)。
  • 条件倒置,因为 OMIT IF 与 WHERE 相反

查询是:

SELECT *
FROM [dataset.table]
OMIT hits IF EVERY(NOT hits.page.pagePath CONTAINS "my-fun-path")

【讨论】:

  • 这可能适合我现在的目的,但我不确定未来的查询是否会这样。是否适合为此功能创建新的功能请求,因为我最初发布的查询应该返回原始表的子集而不是报告的错误?非常感谢!
【解决方案2】:

更新:见related 线程,恐怕这已经不可能了。 可以使用 NEST 功能并按字段分组,但这是一个很长的镜头。

对查询使用 flatten 调用:

SELECT *
FROM flatten([google.com:analytics-bigquery:LondonCycleHelmet.ga_sessions_20130910],customDimensions)
WHERE
  hits.page.pagePath CONTAINS "m"  

因此在 web ui 中:

  • 设置目标表
  • 允许较大的结果
  • 并且没有展平结果

工作正确,生成的表与原始模式匹配。

【讨论】:

  • 感谢您的回复,但这不是本意。我只想将表子集为一个新表,同时保持原始结构。您提出的解决方案在 FLATTEN() 函数中输入的字段上引入了展平,无论“展平结果”未勾选这一事实。
【解决方案3】:

我知道 - 这是老问题。 但是现在可以通过使用标准 SQL 方言而不是 Legacy 来实现

#standardSQL
SELECT t.*
FROM `dataset.table` t, UNNEST(hits.page) as page
WHERE
  page.pagePath CONTAINS "my-fun-path" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多