Разделение временных блоков по временному окну в Google BigQuery - PullRequest
0 голосов
/ 28 января 2019

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

Например, учитывая это table:

timestamp                  |  value
___________________
2018-08-09 17:25:22 UTC    |  40000
2018-08-09 17:55:22 UTC    |  10000
2018-08-09 18:25:22 UTC    |  20000
2018-08-09 18:55:22 UTC    |  20000
2018-08-10 12:55:22 UTC    |  5000

Я хочу иметь возможность запросить его, чтобы я мог отображать результаты как по часам, так что строка 2018-08-09 17:00:00 будет комбинацией двух временных блоков и имеетсреднее значение 25000 (40000 + 10000/2).

Как мне написать запрос в BigQuery, чтобы сгруппировать его по часовым или даже дневным блокам.

Я хочу, чтобы результат моего запроса был таким:

timestamp                     | value
_____________________________________
2018-08-09 17:00:00 UTC       |  25000
2018-08-09 18:00:00 UTC       |  20000
2018-08-10 12:00:00 UTC       |  5000

В BigQuery SQL есть функция AVG, которая может быть усреднена за промежуток времени, но я не уверен, как сначала их агрегировать, прежде чем усреднять.

1 Ответ

0 голосов
/ 28 января 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT TIMESTAMP_TRUNC(ts, HOUR) ts, AVG(value) AS value 
FROM `project.dataset.table`
GROUP BY TIMESTAMP_TRUNC(ts, HOUR)  

вы можете протестировать, поиграть с ним, используя образцы данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT TIMESTAMP '2018-08-09 17:25:22 UTC' ts, 40000 value UNION ALL
  SELECT '2018-08-09 17:55:22 UTC', 10000 UNION ALL
  SELECT '2018-08-09 18:25:22 UTC', 20000 UNION ALL
  SELECT '2018-08-09 18:55:22 UTC', 20000 UNION ALL
  SELECT '2018-08-10 12:55:22 UTC', 5000 
)
SELECT TIMESTAMP_TRUNC(ts, HOUR) ts, AVG(value) AS value 
FROM `project.dataset.table`
GROUP BY TIMESTAMP_TRUNC(ts, HOUR)   

с результатом

Row     ts                          value    
1       2018-08-09 17:00:00 UTC     25000.0  
2       2018-08-09 18:00:00 UTC     20000.0  
3       2018-08-10 12:00:00 UTC     5000.0   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...