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

Tia*_*awy 3 google-bigquery bigquery-standard-sql legacy-sql

我正在尝试将Big Query中重复字段中的数据弄平。我已经看过这个查询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
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

我想要的是hits-page重复字段中的字段。

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

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

SELECT 
visitorId,
visitNumber,
device.browser,
hits.page.pagePath
FROM 
`Project.Page`
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

Error: Cannot access field page on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> 
Run Code Online (Sandbox Code Playgroud)

Wil*_*uks 6

ga_sessions模式中,该字段hits表示为一种ARRAY类型。

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

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

SELECT 
  visitorId,
  visitNumber,
  device.browser,
  hits.page.pagePath
FROM `Project.Page`,
UNNEST(hits) hits
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)

如果需要特定的pagePath,则可以像这样过滤掉它们:

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
Run Code Online (Sandbox Code Playgroud)

确保遵循有关该主题的BigQuery文档,该文档的编写确实不错,并且您将学到很多处理大数据的新技术。