Сведение нескольких повторяющихся полей в 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
      }
    ]
  }
]

Что мне нужно, так это поля в повторяющихся полях хитов.

Например, я хочу получить 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, ...>> 

person Tiawy    schedule 08.06.2017    source источник


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

person Willian Fuks    schedule 08.06.2017
comment
В этом сообщении в блоге содержится дополнительная информация. - person Steren; 22.12.2017