我使用StandartSQL for Bigquery。我需要找到在上午,下午或傍晚發生的所有事件。我可以做這樣的事情Bigquery按事件時間查詢
WHERE TIMESTAMP_MICROS(event.timestamp_micros) BETWEEN '2017-04-01 12:00:00' AND '2017-06-01 16:00:00'
但我只需要沒有日期的時間。有什麼方法只能按時間查詢嗎?
我使用StandartSQL for Bigquery。我需要找到在上午,下午或傍晚發生的所有事件。我可以做這樣的事情Bigquery按事件時間查詢
WHERE TIMESTAMP_MICROS(event.timestamp_micros) BETWEEN '2017-04-01 12:00:00' AND '2017-06-01 16:00:00'
但我只需要沒有日期的時間。有什麼方法只能按時間查詢嗎?
BigQuery中的標準SQL可以使用
EXTRACT(HOUR FROM TIMESTAMP_MICROS(event.timestamp_micros))
下面是使用例子
#standardSQL
SELECT
CASE
WHEN hr >= 4 AND hr < 12 THEN 'morning'
WHEN hr >= 12 AND hr < 15 THEN 'afternoon'
WHEN hr >= 15 AND hr < 17 THEN 'late_afternoon'
WHEN hr >= 17 AND hr < 19 THEN 'evening'
WHEN hr >= 19 AND hr < 21 THEN 'late_evening'
ELSE 'night'
END AS day_part
FROM `dataset.yourtable`,
UNNEST([EXTRACT(HOUR FROM TIMESTAMP_MICROS(event.timestamp_micros))]) AS hr
有兩種根本不同的方法。一種方法是將該值轉換爲時間戳,然後使用時間戳 - 例如通過格式化該值爲一個小時。
另一種方法是隻用微秒。你可以用分割和模數算術來做你想要的。因此,要計算一天中的小時:
where mod(cast(event.timestamp_micros/(1000000 * 60 * 60) as int64), 24) between 12 and 13
請注意,這會從12:00:00和13:59.59.999999得到時間。
我得到錯誤:對於參數類型:FLOAT64,INT64,函數MOD沒有匹配的簽名。支持的簽名:MOD(INT64,INT64) – DzouSi
的BigQuery有TIME
type,您可以使用。例如,
SELECT
COUNTIF(time BETWEEN '04:00:00' AND '12:00:00') AS morning_events,
COUNTIF(time BETWEEN '12:00:00' AND '20:00:00') AS evening_events,
COUNTIF(time < '04:00:00' OR time > '20:00:00') AS night_events
FROM (
SELECT
EXTRACT(TIME FROM TIMESTAMP_MICROS(event.timestamp_micros)) AS time
FROM YourTable
);
太好了。謝謝 – DzouSi