在 Google BigQuery 中展平多个重复字段

Posted

技术标签:

【中文标题】在 Google BigQuery 中展平多个重复字段【英文标题】:Flattening multiple repeated fields in Google BigQuery 【发布时间】:2017-06-08 13:52:50 【问题描述】:

我正在尝试从 Big Query 中的重复字段中展平数据。我看过这个Querying multiple repeated fields in BigQuery,但我似乎无法让它工作。

我的数据如下所示:

[
  
    "visitorId": null,
    "visitNumber": "15",


    "device": 
      "browser": "Safari (in-app)",
      "browserVersion": "(not set)",
      "browserSize": "380x670",
      "operatingSystem": "ios",
    ,
    "hits": [
      
        "isEntrance": "true",
        "isExit": "true",
        "referer": null,
        "page": 
          "pagePath": "/news/bla-bla-bla",
          "hostname": "www.example.com",
          "pageTitle": "Win tickets!!",
          "searchKeyword": null,
          "searchCategory": null,
          "pagePathLevel1": "/news/",
          "pagePathLevel2": "/bla-bla-bla",
          "pagePathLevel3": "",
          "pagePathLevel4": ""
        ,
        "transaction": null
      
    ]
  
]

我想要的是点击页面重复字段中的字段。

例如,我想获取 hits.page.pagePath(值为“/news/bla-bla-bla”)

我已尝试使用以下查询,但出现错误:

SELECT 
visitorId,
visitNumber,
device.browser,
hits.page.pagePath
FROM 
`Project.Page`
LIMIT 1000

我得到的错误是这样的

Error: Cannot access field page on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> 

【问题讨论】:

【参考方案1】:

ga_sessions 架构中,字段hits 表示为ARRAY 类型。

通常在使用此类型字段时,您需要应用 UNNEST 操作才能打开数组。

具体来说,在FROM 子句中,您可以应用CROSS JOIN(通过应用交叉连接操作来取消嵌套数组,可以表示为逗号后跟UNNEST 函数),如下所示:

SELECT 
  visitorId,
  visitNumber,
  device.browser,
  hits.page.pagePath
FROM `Project.Page`,
UNNEST(hits) hits
LIMIT 1000

如果你想要特定的 pagePaths,你可以像这样过滤掉它们:

SELECT 
  visitorId,
  visitNumber,
  device.browser,
  hits.page.pagePath
FROM `Project.Page`,
UNNEST(hits) hits
WHERE regexp_contains(hits.page.pagePath, r'/news/bla-bla-bla')
LIMIT 1000

请务必阅读有关此主题的 BigQuery 文档,它写得非常好,您将学到很多关于处理大数据的新技术。

【讨论】:

这个blog post 提供了更多信息。

以上是关于在 Google BigQuery 中展平多个重复字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 中使用 UDF 展平 Google Analytics 自定义维度?

在 BigQuery 中展平嵌套和重复的结构(标准 SQL)

Bigquery:UNNEST 重复与展平表性能

BigQuery:展平两个重复的列

在 BigQuery 上展平多个嵌套数组

在 BigQuery 表中展平多个相同大小的数组列