私のGoogleBigqueryテーブルには日付と時刻の列があります。新しいデータは10分ごとにテーブルに投稿されるため、日付フィールドには次のようになります。 「2018-10-26」とタイムフィールド「19:05:00」。次のレコードは、日付と時刻のフィールドで「2018-10-26」と「19:15:00」のようになります。毎日のデータを1時間(1日あたり24レコード)で集計するにはどうすればよいですか?
SQLリクエストは、AppsScriptを使用してGoogleスプレッドシートから送信されます。これがgooglebigquery.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);
}
....
以下はBigQuery標準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
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
列ではなく、2つの別々の列に格納するのはなぜですか?