#sql #firebase #google-bigquery
# #sql #firebase #google-bigquery
Вопрос:
Мне нужна помощь в SQL-запросе в BigQuery. Я хочу знать, какое событие сделал пользователь, прежде чем он / она удалил приложение (event_name = ‘app_remove’)
Я пытаюсь получить ‘event_timestamp’, ‘event_name’, ‘event_params.key’, ‘event_value.string_value’ непосредственно перед тем, как пользователь запускает event_name = ‘app_remove’.
Мои данные выглядят так: (есть столбец с именем ‘user_pseudo_id’, который не отображается на рис.)
Я использовал приведенный ниже запрос, чтобы получить ‘user_pseudo_id’, ‘event_params.key’, ‘event_value.string_value’, связанные с пользователями, которые выполнили event_name = ‘app_remove’.
SELECT
TIMESTAMP_MICROS(event_timestamp),
user_pseudo_id,
event_name,
e.key,
e.value.string_value
FROM
`privatedata.events_20201129`, unnest(event_params) as e
WHERE
user_pseudo_id in
(
SELECT
user_pseudo_id
FROM
`privatedata.events_20201129`
WHERE
event_name = 'app_remove')
Однако мне нужно только это событие (а также его параметры), которое было выполнено непосредственно перед событием ‘app_remove’.
Любая помощь для меня будет высоко оценена.
Спасибо и с уважением, Шантану Джейн
Комментарии:
1. В ваших образцах данных нет события «app_remove».
2. Привет @GordonLinoff, на самом деле данные содержат миллиард строк, и я попытался получить скриншот app_remove, но вручную найти его очень сложно, поскольку событие происходило очень редко. раз.
Ответ №1:
Хммм … я подумываю об использовании логики массива;
SELECT p.*, event_params[SAFE_OFFSET(n - 1)]
FROM (SELECT p.*,
(SELECT MIN(n)
FROM unnest(event_params) ep WITH OFFSET n
WHERE ep.event_name = 'app_remove'
) as app_remove_n
FROM `privatedata.events_20201129` p
) p
WHERE app_remove_n IS NOT NULL
Комментарии:
1. Привет @Gordon, спасибо за такой быстрый ответ. Я использовал запрос и получил сообщение об ошибке — «Нераспознанное имя: p в [2:14]». Я не смог исправить ошибку. Было бы здорово, если бы вы могли помочь.
2. Привет @Gordon, большое спасибо за редактирование. Извините, что пишу еще раз, но теперь я получаю другую ошибку: «Имя поля event_name не существует в STRUCT<СТРОКА ключа, значение STRUCT<string_value СТРОКА, int_value INT64, float_value FLOAT64, …>> в [5:24]» Был бы очень признателен, если бы вы могли разобраться в этом..