#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
, как упоминалось ранее, для упрощения.