google-bigquery - 在 bigquery 中查询嵌套数据
问题描述
我正在尝试提取我按主机名过滤的 bigquery 谷歌分析数据中的所有列。但是,结果仍然显示其他主机名,如屏幕截图所示。我正在使用过滤器进行此选择,以将数据复制到具有相同架构的另一个数据集。
下方查询:
SELECT g.* FROM `10241241.ga_sessions_20160805` g, UNNEST (hits) as hits WHERE hits.page.hostname= "www.googlemerchandisestore.com"
已更新 如何在不更改嵌套结构的情况下复制相同的架构?
解决方案
您要过滤的值位于数组中......因此您可以过滤/清理数组或排除包含不包含该值的数组的行或排除不仅包含该值的行。不确定哪个适用于您,因为您似乎没有理由将数组与整个表交叉连接(这极大地膨胀了它)。
清理阵列:
SELECT
*
REPLACE(
ARRAY(SELECT AS STRUCT * FROM g.hits WHERE page.hostname='www.googlemerchandisestore.com') AS hits
)
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20160805` g
limit 1000
排除不包含该值的行
SELECT
*
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20160805` g
WHERE
(SELECT COUNT(1)>0 FROM g.hits WHERE page.hostname='www.googlemerchandisestore.com')
limit 1000
等等