Как анализировать столбцы GA4 BigQuery RECORD в SQL Server?

Мы используем скрипт Python для подключения к BigQuery, чтобы загружать файлы ежедневных событий GA4 и загружать их в хранилище данных SQL Server. Большинство столбцов представляют собой целые числа или строки, с которыми легко работать. Есть также 11 полей типа RECORD.

Согласно документации Google по RECORDS они

К RECORD можно получить доступ как к типу STRUCT в GoogleSQL. СТРУКТУРА – это контейнер упорядоченных полей. Столбец RECORD может иметь режим REPEATED, который представлен в виде массива типов STRUCT. Кроме того, поле внутри запись может быть повторена, что представлено как СТРУКТУРА, которая содержит МАССИВ.

Вот пример данных event_params, который имеет массив типов STRUCT:

   [{'key': 'engaged_session_event', 'value': {'string_value': None, 'int_value': 1, 'float_value': None, 'double_value': None}}
     {'key': 'ga_session_number', 'value': {'string_value': None, 'int_value': 2, 'float_value': None, 'double_value': None}}
     {'key': 'ga_session_id', 'value': {'string_value': None, 'int_value': 1679860220, 'float_value': None, 'double_value': None}}
     {'key': 'session_engaged', 'value': {'string_value': None, 'int_value': 1, 'float_value': None, 'double_value': None}}
     {'key': 'page_title', 'value': {'string_value': 'Heavy Duty Truck Parts Online, Medium Duty, Light Duty - FinditParts', 'int_value': None, 'float_value': None, 'double_value': None}}]

Вот пример данных device, который является СТРУКТОМ:

{'category': 'mobile', 'mobile_brand_name': 'Apple', 'mobile_model_name': 'iPhone', 'mobile_marketing_name': None, 'mobile_os_hardware_model': None, 'operating_system': 'iOS', 'operating_system_version': 'iOS 14.8', 'vendor_id': None, 'advertising_id': None, 'language': 'en-us', 'is_limited_ad_tracking': 'No', 'time_zone_offset_seconds': None, 'browser': None, 'browser_version': None, 'web_info': {'browser': 'Safari', 'browser_version': '14.1.2'}}

Есть ли функция SQL, которую можно использовать для анализа STRUCTS или массивов STRUCTS? Можно ли каким-то образом преобразовать эти данные в формат JSON, чтобы использовать встроенные функции JSON для запроса?

Если вы используете BigQuery, почему вы пометили SQL-сервер?

Dale K 04.04.2023 20:39

Пробовали ли вы искать готовые решения для выравнивания таблицы GA4 BQ? Лучше всего не трогать вложенный JSon, а сначала сгладить его, чтобы затем можно было легко запрашивать данные.

BNazaruk 04.04.2023 22:30

Привет, Дейл! Мы анализируем результаты данных BigQuery в SQL Server.

Matthew Walk 05.04.2023 01:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте UNNEST. Пример:

SELECT
  EP.key AS event_param_key,
  COUNT(*) AS occurrences
FROM
  -- Replace table name.
  `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`, UNNEST(event_params) AS EP
WHERE
  -- Replace date range.
  _TABLE_SUFFIX BETWEEN '20201201' AND '20201202'
GROUP BY
  event_param_key
ORDER BY
  event_param_key ASC;

Источник

Также в этой статье есть подробная информация о том, как использовать UNNEST: Как использовать функцию UNNEST в BigQuery для анализа параметров событий в Analytics

Спасибо, Минхаз, мы рассмотрели возможность использования функции UNNEST, но существует 102 различных значения event_param_key. Мы подумали, что будет проще проанализировать все поле event_params в DW, чем писать массивный запрос, который UNNEST объединяет эти 102 столбца.

Matthew Walk 05.04.2023 01:06

Если вы не пытаетесь изменить event_params (т. е. каждый параметр события отображается как новое поле/столбец), вам не нужно писать массивный запрос. Запрос в моем ответе должен создавать отдельные строки для каждого параметра события.

Minhaz Kazi 06.04.2023 04:01

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