SQL шпаргалка по запросам Firebase
Шпаргалка по SQL запросам к Firebase.
01 Show distinct user_pseudo_id
SELECT
distinct(user_pseudo_id)
FROM
`firebase-public-project.analytics_153293282.events_20181003`
02 Table suffix
SELECT
distinct(user_pseudo_id)
FROM
`firebase-public-project.analytics_153293282.events_*`
WHERE
(_TABLE_SUFFIX between '20180719' and '20181122')
03 Demo and show a basic select * to look at data
SELECT
*
FROM
`firebase-public-project.analytics_153293282.events_20181003`
LIMIT
100
04 Filter by event. Take a look at event_params.key with diff values
SELECT
*
FROM
`firebase-public-project.analytics_153293282.events_20181003`
WHERE
event_name = "level_complete_quickplay"
05 Event name and key
SELECT
*
FROM
`firebase-public-project.analytics_153293282.events_20181003`,
UNNEST(event_params) as param
WHERE
event_name = "level_complete_quickplay"
AND param.key = "firebase_screen_class"
06 Built-in functions
SELECT
AVG(param.value.int_value) as avg_value,
STDDEV(param.value.int_value) as stddev
FROM
`firebase-public-project.analytics_153293282.events_20181003`,
UNNEST(event_params) as param
WHERE
event_name = "level_complete_quickplay"
AND param.key = "value"
07 Group By Count
SELECT
count(param.value.int_value) as value,
device.category
FROM
`firebase-public-project.analytics_153293282.events_20181003`,
UNNEST(event_params) as param
WHERE
event_name = "level_complete_quickplay"
AND param.key = "value"
GROUP BY
device.category
08 Group By AVG
SELECT
avg(param.value.int_value) as avg_value,
device.category
FROM
`firebase-public-project.analytics_153293282.events_20181003`,
UNNEST(event_params) as param
WHERE
event_name = "level_complete_quickplay"
AND param.key = "value"
GROUP BY
device.category
09 Getting all event params
SELECT
event_name, param
FROM
`firebase-public-project.analytics_153293282.events_20181003`,
UNNEST(event_params) as param
WHERE
event_name = "level_complete_quickplay"
10 To get one event param
SELECT
param.value.int_value as value
FROM
`firebase-public-project.analytics_153293282.events_20181003`,
UNNEST(event_params) as param
WHERE
event_name = "level_complete_quickplay"
AND param.key = "value"
11 Can be written in the same way
SELECT
event_name,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = "value") AS value
FROM
`firebase-public-project.analytics_153293282.events_20181003`
WHERE
event_name = "level_complete_quickplay"
12 Still 18 rows, but with all parameters
SELECT
event_name,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = "value") as value,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = "board") as board
FROM
`firebase-public-project.analytics_153293282.events_20181003`
WHERE
event_name = "level_complete_quickplay"
13 Final query
SELECT
AVG(value) as avg_value,
MAX(board) as board_name
FROM
(SELECT
event_name,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = "value") as value,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = "monster") as board
FROM
`firebase-public-project.analytics_153293282.events_20181003`
WHERE
event_name = "level_complete_quickplay")
GROUP BY
board
ORDER BY
avg_value desc
14 Actual screen progressions
SELECT
screen_0,
screen_1,
COUNT(*) AS count
FROM (
SELECT
user_pseudo_id,
event_timestamp,
param.value.string_value AS screen_0,
LEAD (param.value.string_value, 1) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp ) AS screen_1
FROM
`firebase-public-project.analytics_153293282.events_20181003`,
UNNEST(event_params) AS param
WHERE
event_name = "screen_view"
AND param.key = "firebase_screen_class"
ORDER BY
user_pseudo_id,
event_timestamp )
WHERE
screen_1 = "shop_menu" # IS NOT NULL
GROUP BY
screen_0,
screen_1
ORDER BY
count DESC
15 Closed funnel with time constraints
SELECT
COUNTIF(funnel_start_time IS NOT NULL) AS funnel_begin_count,
COUNTIF(funnel_end_time - funnel_start_time < 5 * 1000 * 1000) AS funnel_end_count
FROM (
SELECT
funnel_start_time,
LEAD(funnel_end_time, 1) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp) AS funnel_end_time
FROM (
SELECT
event_name,
IF (event_name = "level_start_quickplay",
event_timestamp,
NULL) AS funnel_start_time,
IF (event_name = "level_end_quickplay",
event_timestamp,
NULL) AS funnel_end_time,
user_pseudo_id,
event_timestamp
FROM
`firebase-public-project.analytics_153293282.events_20181003`
WHERE
event_name = "level_start_quickplay"
OR event_name = "level_end_quickplay"
# AND _TABLE_SUFFIX BETWEEN '<yyyymmdd>'
# AND '<yyyymmdd>'
ORDER BY
user_pseudo_id,
event_timestamp) )
16 Trio of events are leading up to a desired
SELECT
s0,
s1,
s2,
COUNT(*) AS count
FROM (
SELECT
user_pseudo_id,
event_timestamp,
event_name AS s0,
LEAD (event_name, 1) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp) AS s1,
LEAD (event_name, 2) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp) AS s2
FROM
`firebase-public-project.analytics_153293282.events_20181003`
ORDER BY
user_pseudo_id,
event_timestamp )
WHERE
s2 = "level_end_quickplay"
GROUP BY
s0,
s1,
s2
ORDER BY
count DESC
17 Common screen patterns
SELECT
screen_0,
screen_1,
screen_2,
COUNT(*) AS count
FROM (
SELECT
user_pseudo_id,
event_timestamp,
param.value.string_value AS screen_0,
LEAD (param.value.string_value, 1) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp ) AS screen_1,
LEAD (param.value.string_value, 2) OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp ) AS screen_2
FROM
`firebase-public-project.analytics_153293282.events_20181003`,
UNNEST(event_params) AS param
WHERE
event_name = "screen_view"
AND param.key = "firebase_screen_class"
ORDER BY
user_pseudo_id,
event_timestamp )
WHERE
screen_1 IS NOT NULL
AND screen_2 IS NOT NULL
GROUP BY
screen_0,
screen_1,
screen_2
ORDER BY
count DESC