Как сопоставить каждый параметр в Firebase Analytics SQL в отдельном столбце? - PullRequest
0 голосов
/ 24 сентября 2018

Мы используем Firebase Analytics и BigQuery для запуска SQL запросов на собранные данные.Это оказывается сложным, поскольку некоторые поля, такие как event_params, являются повторяющимися записями.Я хочу отобразить каждое из этих повторяющихся полей в отдельный столбец.

Repeated Record example

Я хочу написать запросы в вышеуказанном наборе данных, например, найти разницу между minIso иmaxIso.Как определить UDF или представление, которое может вернуть мне таблицу в схеме столбца?

1 Ответ

0 голосов
/ 25 октября 2018

Я хочу отобразить каждое из этих повторяющихся полей в отдельный столбец.

Концептуально выполнимое направление поворота параметров в столбцы, но (по моему сильному мнению) в большинстве практических случаев является «тупиком»
Здесь много постов, показывающих, как поворачивать /транспонировать строки в столбцы и шаблоны: 1) вы просто жестко закодируете все возможные ключи в своем запросе) и, очевидно, никому это не нравится) или 2) вы создаете служебный запрос, который извлекает все ключи для вас и запрашивает необходимый вам контракт, который затем вынужно выполнить - так что либо вы делаете это вручную в два этапа, либо вы используете клиент по своему выбору, чтобы написать сценарий для этих шагов, чтобы они выполнялись в автоматическом режиме
Как я уже упоминал - здесь достаточно примеров на SO

Я хочу написать запросы в указанном выше наборе данных, например, найти разницу между minIso и maxIso

Если все, что вам нужно, это сделать некоторые математические операции с несколькими параметрами в записи - см. Пример ниже

Пример фиктивного : для каждого app_instance_idtween найдите разность между coins_awarded и xp_awarded

#standardSQL
SELECT user_dim.app_info.app_instance_id,  ARRAY(
  SELECT AS STRUCT name,
    (SELECT value.int_value FROM UNNEST(dim.params) param WHERE key = 'coins_awarded') -
    (SELECT value.int_value FROM UNNEST(dim.params) param WHERE key = 'xp_awarded') diff_awarded
  FROM UNNEST(event_dim) dim
  WHERE dim.name = 'round_completed'  
  ) AS event_dim
FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`
WHERE 'round_completed' IN (SELECT name FROM UNNEST(event_dim))  

с результатом как

Row     app_instance_id                     event_dim.name      event_dim.diff_awarded   
1       02B6879DF2639C9E2244AD0783924CFC    round_completed     226  
2       02B6879DF2639C9E2244AD0783924CFC    round_completed     171  
3       0DE9DCDF2C407377AE3E779FB05864E7    round_completed     25   
...

Пустой пример : оставить целым user_dim без изменений, но заменить event_dim только что вычисленными значениями

#standardSQL
SELECT * REPLACE(ARRAY(
  SELECT AS STRUCT name,
    (SELECT value.int_value FROM UNNEST(dim.params) param WHERE key = 'coins_awarded') -
    (SELECT value.int_value FROM UNNEST(dim.params) param WHERE key = 'xp_awarded') diff_awarded
  FROM UNNEST(event_dim) dim
  WHERE dim.name = 'round_completed'  
  ) AS event_dim)
FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`
WHERE 'round_completed' IN (SELECT name FROM UNNEST(event_dim)) 

Это оказывается сложным, так как некоторые поля, такие как event_params, являются повторяющимися записями.Я хочу отобразить каждое из этих повторяющихся полей в отдельный столбец.

Надеюсь, из приведенных выше примеров вы можете увидеть, насколько просто работать с повторяющимися полями.Я действительно рекомендую вам научиться / практиковать работу с массивами , чтобы получить долгосрочные выгоды, а не искать то, что [ошибочно] выглядит как ярлык

...