无法使用 WHERE 进行过滤(无法访问类型为 ARRAY<STRUCT<hitNumber INT64、时间 INT64、小时 INT64 的值的字段小时)

Unable to filter using WHERE (Cannot access field hour on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64)

#standardSQL
SELECT DISTINCT geoNetwork.country
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170701' 
AND
hits.hour > '11'

我正在尝试查看在中午 12 点到午夜(在标准 SQL 中)向 Google Analytics 发送点击的国家/地区列表 我正在使用 https://support.google.com/analytics/answer/3437719?hl=en 中的 hits.hour 但出现此错误: 无法访问类型为 ARRAY 的值的字段小时

您可以使用以下方法修正语法:

SELECT DISTINCT geoNetwork.country
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170701' AND
      hits[offset(0)].hour > 11

但这并不能真正满足您的需求。相反,您需要 unnest(),因为 hits 是一个数组。所以:

SELECT DISTINCT geoNetwork.country
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`,
     unnest(hits) hit
WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170701' and
      hit.hour > 11;

另请注意,hour 似乎是一个数字,因此单引号不合适。

#standardSQL
SELECT DISTINCT geoNetwork.country
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN '20170701' AND '20170701' 
AND EXISTS (SELECT 1 FROM UNNEST(hits) hit WHERE hit.hour > 11)