BigQuery error: Cannot query the cross product of repeated fields

BigQuery error: Cannot query the cross product of repeated fields

我 运行 Google BigQuery 网络界面上的以下查询,用于 Google Analytics 提供的数据:

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

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

Error: Cannot query the cross product of repeated fields customDimensions.value and hits.page.pagePath.

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

是否有针对所发现问题的解决方法?

更新:参见related 线程,恐怕这不再可能了。 可以使用 NEST 函数并按字段分组,但这是不可能的。

对查询使用展平调用:

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

因此在网络中ui:

  • 设置目的地table
  • 允许大结果
  • 没有扁平化结果

正确执行作业并且生成的 table 与原始模式匹配。

根据您可以接受的过滤类型,您可以通过从 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")

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

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