Вопрос о том, как выбрать значение event_params.key в большом запросе - PullRequest
0 голосов
/ 06 июля 2019

В нашем проекте есть некоторые события, записывающие, как долго пользователь остается на странице. Мы добавляем event_params.key с именем time_ms, и его значение показывает продолжительность. Как я могу выбрать сумму 'time_ms'?

Я пытался использовать операторы SQL, но не смог.

SELECT *
FROM analytics_152426080.events_20190626
WHERE event_name = 'details_viewtime' AND
      event_params.key = 'time_ms'

Показывает сообщение об ошибке:

'Cannot access field key on a value with type ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, ...>>> at [7:20]'.

Я ожидаю получить сумму 'time_ms', но сначала мне нужно решить этот вопрос.

1 Ответ

0 голосов
/ 06 июля 2019

Я думаю, вам нужно unnest:

SELECT *
FROM analytics_152426080.events_20190626 e CROSS JOIN
     UNNEST(event_params) ep
WHERE e.event_name = 'details_viewtime' AND
      ep.key = 'time_ms';

Я не уверен, где находится фактическое значение, но что-то вроде этого:

SELECT SUM(ep.value.int_value)
FROM analytics_152426080.events_20190626 e CROSS JOIN
     UNNEST(event_params) ep
WHERE ep.event_name = 'details_viewtime' AND
      ep.key = 'time_ms';

Предполагая, что выхочу, чтобы сумма была целым числом.

Это предполагает, что столбец значения является числом некоторого рода.В противном случае вам нужно преобразовать его в единицу.

Или, если вы хотите суммировать значение в строке:

SELECT e.*,
       (SELECT SUM(ep.value.int_value)
        FROM UNNEST(event_params) ep
        WHERE ep.key = 'time_ms'
       ) as sum_ms
FROM analytics_152426080.events_20190626 e
WHERE e.event_name = 'details_viewtime'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...