首页 > 解决方案 > 在 bigquery 中查询嵌套数据

问题描述

我正在尝试提取我按主机名过滤的 bigquery 谷歌分析数据中的所有列。但是,结果仍然显示其他主机名,如屏幕截图所示。我正在使用过滤器进行此选择,以将数据复制到具有相同架构的另一个数据集。在此处输入图像描述

下方查询:

SELECT g.* FROM `10241241.ga_sessions_20160805` g, UNNEST (hits) as hits WHERE hits.page.hostname= "www.googlemerchandisestore.com"

已更新 如何在不更改嵌套结构的情况下复制相同的架构?

嵌套模式中的错误

标签: google-bigquery

解决方案


您要过滤的值位于数组中......因此您可以过滤/清理数组或排除包含不包含该值的数组的行或排除不仅包含该值的行。不确定哪个适用于您,因为您似乎没有理由将数组与整个表交叉连接(这极大地膨胀了它)。

清理阵列:

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

等等


推荐阅读