сгруппировать все чтения по дням в BigQuery - PullRequest
0 голосов
/ 14 сентября 2018

Я новичок в BigQuery и поэтому пытаюсь сгруппировать свои данные так, чтобы это было полезно. На данный момент я конвертировал метки времени Unix в дату (например, 2018-08-27 04:54:56 UTC и т. Д.). У меня есть показания каждые 10 минут или около того, и я хотел бы сгруппировать их только по дате, а затем взять среднее дневное значение для моих различных столбцов. Я думаю, что «group by», а затем «avg» может быть способом продвижения вперед, но я не уверен, как реализовать первую часть. Код, который я использовал для создания моей таблицы, выглядит следующим образом:

  SELECT TIMESTAMP_SECONDS(timestamp) as timestamp,humidity,co2,temperature,app_id
  FROM data.staging 
  where timestamp is not null
  ;

и вот несколько строк того, как выглядит мой вывод:

|| Timestamp              || humidity  || co2   || temperature  || app id||

||========================||===========||=======||==============||========||

||2018-08-31 13:35:50 UTC || 63.4      || 634.5 || 21.2         || office_||

||2018-08-31 14:37:20 UTC || 67.8      || 600.4 || 20.8         || office_||

и т.д ..

Извините за плохое форматирование, и если есть что-то еще, я был бы рад предоставить. Спасибо за любую помощь!

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете преобразовать отметку времени в дату и затем использовать GROUP BY:

SELECT DATE(TIMESTAMP_SECONDS(timestamp)) as dte, AVG(humidity), AVG(co2), AVG(temperature)
FROM data.staging 
WHERE timestamp is not null
GROUP BY dte
ORDER BY dte;

Обратите внимание, что дата является датой UTC. DATE() принимает второй аргумент. Я часто называю это так:

SELECT DATE(TIMESTAMP_SECONDS(timestamp), 'America/New_York') as dte, 
...