Как получить несколько event_params в качестве столбца в BigQuery

#sql #google-bigquery #firebase-analytics

#sql #google-bigquery #firebase-аналитика

Вопрос:

Что мне нужно: общее количество событий и данные, связанные с этим событием.

Что я пробовал: на устройствах я отправлял некоторые события в Firebase Analytics. События выглядят так:

 event_name = "business_global_view_profile"
  

с помощью параметров:

 business_global_name :String
business_global_city:String
business_global_ID:String
  

Итак, в BigQuery я получил что-то вроде (между гораздо большим количеством значений и событий, которые для этого не нужны):

введите описание изображения здесь

Мне нужно получить ТОЛЬКО те параметры, которые я отправил, поэтому мне нужно отбросить все такие вещи, как ga_session_id , firebase_event_origin , и т.д…

Итак, сначала я попытался «отфильтровать» нужное мне событие от всех других событий :

 SELECT params.key AS ParamKey, params.value.string_value as Value
FROM `xxxxxx.xxxxx.xxxxx`,
UNNEST(event_params) as params
WHERE event_name = "business_global_view_profile"
  

После этого я получаю таблицу типа:

введите описание изображения здесь

На данный момент я получил количество вхождений по идентификатору

 SELECT Value AS BusinessID, COUNT(Value) Occurrences
  FROM(SELECT params.key AS ParamKey, params.value.string_value as Value
  FROM `xxxxxx.xxxxx.xxxxx`,
  UNNEST(event_params) as params
  WHERE event_name = "business_global_view_profile"
  AND event_date = "20190409")
WHERE ParamKey = "business_global_ID"
Group by Value
  

введите описание изображения здесь

Но здесь я теряюсь, потому что мне нужно что-то вроде:

 |BusinessID | Occurrences | BusinessName | BusinessCity |
  

Где

  • BusinessName = business_global_name
  • BusinessCity = business_global_city

Как я могу собрать всю эту информацию вместе? Конечно, есть более короткий способ сделать это, но я мало работал с SQL

Ответ №1:

Я не совсем уверен, что правильно понял ваше требование, но вот возможное решение. Для простоты я использовал следующую схему:

введите описание изображения здесь

И придумал следующий запрос:

 SELECT occ_count.BusinessID, occ_count.Occurrences, flat_data.BusinessName, flat_data.BusinessCity
FROM
(
SELECT params.value AS BusinessID, count(params.value) AS Occurrences
FROM `XXXX.XXXX.XXXX`, UNNEST(event_params) as params
WHERE event_name = 'business_global_view_profile'
AND event_date = "20190409"
AND params.key = 'business_global_id'
GROUP BY params.value
) AS occ_count
JOIN
(
SELECT DISTINCT arr1.value AS BusinessID, arr2.value AS BusinessName, arr3.value as BusinessCity
FROM `XXXX.XXXX.XXXX`, UNNEST(event_params) as arr1, UNNEST(event_params) arr2, UNNEST(event_params) arr3
WHERE arr2.key = 'business_global_name'
AND arr3.key = 'business_global_city'
) AS flat_data
ON occ_count.BusinessID = flat_data.BusinessID
  

Пожалуйста, обратите внимание, что я предполагаю, что для любого business_global_id существует единственная комбинация business_global_name и business_global_city . Я также беру значения из event_params.value вместо event_params.value.string_value , как упоминалось ранее, для упрощения.