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"
我 运行 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"