Как группировать по часам в Google Bigquery - PullRequest
0 голосов
/ 26 октября 2018

В моей таблице Google Bigquery есть столбец даты и времени.Новые данные публикуются в таблице каждые 10 минут, поэтому поле даты будет иметь, например, «2018-10-26» и поле времени «19:05:00».Следующая запись будет выглядеть как «2018-10-26» и «19:15:00» для поля даты и времени.Как агрегировать данные за каждый день по одному часу (24 записи в день)?

Запрос SQL отправляется из Google Sheets с помощью Apps Script.Вот часть скрипта google bigquery.gs: ( полный скрипт на GitHub )

...
var sheet = SpreadsheetApp.getActiveSheet();

var sql = 'SELECT  date, time, SUM(col1) AS Col1, SUM(col2) AS Col2 GROUP BY 
time, date ORDER BY time ASC';

var queryResults; 

// Inserts a Query Job
try {
var queryRequest = BigQuery.newQueryRequest();
queryRequest.setQuery(sql).setTimeoutMs(100000);
queryResults = BigQuery.Jobs.query(queryRequest, projectNumber);
}
....

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Ниже для BigQuery Standard SQL

#standardSQL
SELECT date, TIME_TRUNC(time, HOUR) hour, SUM(col1) AS Col1, SUM(col2) AS Col2 
FROM `project.dataset.table`
GROUP BY date, hour 
ORDER BY date, hour

Вы можете протестировать, поиграть с вышеупомянутыми, используя фиктивные данные в вашем вопросе:

#standardSQL
WITH `project.dataset.table` AS (
  SELECT DATE "2018-10-26" date, TIME "19:05:00" time, 1 col1, 2 col2 UNION ALL
  SELECT "2018-10-26", "19:15:00", 3, 4
) 
SELECT date, TIME_TRUNC(time, HOUR) hour, SUM(col1) AS Col1, SUM(col2) AS Col2 
FROM `project.dataset.table`
GROUP BY date, hour 
ORDER BY date, hour  

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

Row date        hour        Col1    Col2     
1   2018-10-26  19:00:00    4       6    
0 голосов
/ 26 октября 2018

Вы можете использовать extract():

SELECT date, extract(hour from time) as hh,
       SUM(col1) AS Col1, SUM(col2) AS Col2
FROM ?
GROUP BY date, hh 
ORDER BY date, hh ASC;

Зачем вам хранить значения даты и времени в двух отдельных столбцах, а не в одном столбце datetime или timestamp?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...