Сглаживание нескольких повторяющихся полей в Google BigQuery

Я пытаюсь сгладить данные из повторяющихся полей в 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
      }
    ]
  }
]

То, что я хочу, это поля в повторяющихся полях на странице хитов.

Например, я хочу получить hit.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 по этой теме, она действительно хорошо написана, и вы многое узнаете о новых методах обработки больших данных.

Другие вопросы по тегам