#python-3.x #datetime #google-bigquery
#python-3.x #дата и время #google-bigquery
Вопрос:
Я использую этот запрос
Select
distinct
creation_time,
max(total_bytes_processed) as total,
query
FROM `project-id.region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
where creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)AND job_type = "QUERY"
group by creation_time, query
и я хочу получить данные за последний час и получить максимальное значение, основанное на минуте. Например, допустим, у меня есть этот образец данных:
10 ,2020-10-19 15:50:58.108000 00:00"
20 ,2020-10-19 15:51:25.718000 00:00"
45, 2020-10-19 15:51:55.356000 00:00"
50, 2020-10-19 15:52:50.269000 00:00"
5, 2020-10-19 15:50:40.527000 00:00"
15, 2020-10-19 15:51:08.883000 00:00"
25, 2020-10-19 15:51:39.082000 00:00"
47, 2020-10-19 15:52:16.587000 00:00"
60, 2020-10-19 15:53:02.901000 00:00"
Как бы я мог получить максимальное значение по минутам для этих данных?
моим желаемым результатом было бы: поскольку 10 ,2020-10-19 15:50:58.108000 00:00
значение выше, чем 5, 2020-10-19 15:50:40.527000 00:00 выводится максимальное значение .
10, 2020-10-19 15:50
45, 2020-10-19 15:51
50 , 2020-10-19 15:52
60, 2020-10-19 15:53
Ответ №1:
Ниже приведен стандартный SQL для BigQuery
#standardSQL
select max(value) value, timestamp_trunc(ts, minute) ts
from data
group by timestamp_trunc(ts, minute)
Вы можете протестировать, поиграть с приведенными выше примерами данных из вашего вопроса, как в примере ниже
#standardSQL
with data AS (
select 10 value, timestamp '2020-10-19 15:50:58.108000 00:00' ts union all
select 20, '2020-10-19 15:51:25.718000 00:00' union all
select 45, '2020-10-19 15:51:55.356000 00:00' union all
select 50, '2020-10-19 15:52:50.269000 00:00' union all
select 5, '2020-10-19 15:50:40.527000 00:00' union all
select 15, '2020-10-19 15:51:08.883000 00:00' union all
select 25, '2020-10-19 15:51:39.082000 00:00' union all
select 47, '2020-10-19 15:52:16.587000 00:00' union all
select 60, '2020-10-19 15:53:02.901000 00:00'
)
select max(value) value, timestamp_trunc(ts, minute) ts
from data
group by timestamp_trunc(ts, minute)
с выводом
Комментарии:
1. Привет, да, я пробовал это решение, оно работает, но из любопытства есть ли способ включить и секунды? . Допустим, для 51 минуты 15-го часа есть 4 метки времени, и поскольку 45 — это максимальное значение 51 минуты, могу ли я выполнить вывод
2020-10-19 15:51:55.356000 00:00
или должна быть реализована дополнительная логика2. возможно ли с помощью этого запроса преобразовать это в ответ json непосредственно в bigquery?