BigQuery и Firebase — как определить недельный рост

Я пытаюсь создать панель инструментов для отслеживания ключевых показателей моего приложения для Android. Для этого я использую аналитику Firebase, поддерживаемую BigQuery.

Я пытаюсь получить еженедельный прирост first_open событий count и ratio для

  • текущая неделя
  • предыдущая неделя
  • лучшая неделя

Я могу получить количество событий first_open за текущую неделю и за предыдущую неделю как отдельные запросы в BigQuery (например, следующий пример для запроса за предыдущую неделю):

SELECT
  FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL CAST ( FORMAT_DATE("%u", CURRENT_DATE()) as INT64 ) + 6 DAY)) AS previousMonday,
  FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL CAST ( FORMAT_DATE("%u", CURRENT_DATE()) as INT64 ) DAY)) AS previousSunday,
  COUNT(*) as counter,
  h.name as event
FROM `com_package_app_ANDROID.app_events_*`, UNNEST(event_dim) as h
WHERE _TABLE_SUFFIX
BETWEEN
  FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL CAST ( FORMAT_DATE("%u", CURRENT_DATE()) as INT64 ) + 6 DAY)) 
AND 
  FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL CAST ( FORMAT_DATE("%u", CURRENT_DATE()) as INT64 ) DAY))
AND 
 h.name='first_open'
GROUP BY event
ORDER BY counter DESC

Но я не могу получить соотношение, комбинируя 2 запроса (для текущей недели по сравнению с предыдущей неделей), а также я не могу получить лучший за всю неделю счет first_open.


person TurhanTech    schedule 18.01.2017    source источник


Ответы (1)


Чтобы получить «лучшую неделю», вы можете сгруппировать события по неделям и упорядочить их по количеству. Что-то вроде этого...

SELECT 
    DATE_TRUNC(event_date, WEEK) AS week,
    COUNT(*) AS count
FROM BQ_TABLE
WHERE BQ_TABLE.name = 'first_open'
GROUP BY week
ORDER BY count DESC

Чтобы получить текущую/предыдущую неделю, вы можете превратить приведенный выше запрос в подзапрос и отфильтровать его по целевым неделям.

Обратите внимание, что запрос «лучшая неделя» всегда будет полным сканированием таблицы и может стать дорогостоящим в зависимости от количества событий и частоты выполнения запроса.

person mnort9    schedule 18.01.2017
comment
Я не уверен, что вы можете сделать такой запрос (по крайней мере, я не мог заставить его работать). Действительно, столы в BQ разбиты на дневные столы. Кроме того, что такое event_date ? Спасибо - person TurhanTech; 18.01.2017
comment
event_date — это любое поле даты, которое вы используете в своей таблице events. Итак, вы используете ежедневные таблицы вместо разделения одной таблицы по дням? (может быть связано с тем, как firebase интегрируется с BQ, с чем я не знаком) - person mnort9; 18.01.2017