2017-05-26 15 views
0

私はBigqueryのためにStandartSQLを使用します。私は朝、午後、または夕方に起こったすべての出来事を見つける必要があります。私はこのようなことをすることができますBigqueryイベントの時刻による照会

WHERE TIMESTAMP_MICROS(event.timestamp_micros) BETWEEN '2017-04-01 12:00:00' AND '2017-06-01 16:00:00' 

しかし、私は日付なしで時間が必要です。時間だけで照会する方法はありますか?

答えて

2

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 
+0

ありがとうございました – DzouSi

1

根本的に異なるアプローチが2つあります。 1つは、値をタイムスタンプに変換し、タイムスタンプで処理することです。たとえば、値を1時間としてフォーマットします。

もう1つは、マイクロ秒で作業することです。除算とモジュラス演算で、あなたが望むことができます。したがって、今日の時間を計算するには:

where mod(cast(event.timestamp_micros/(1000000 * 60 * 60) as int64), 24) between 12 and 13 

これは12:00:00と13:59.59.999999の時間になることに注意してください。

+0

エラーが発生しました:引数型の関数MODに一致するシグネチャがありません:FLOAT64、INT64。サポートされているシグネチャ:MOD(INT64、INT64) – DzouSi

1

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 
); 
関連する問題