timestamp_bucket関数
timestamp_bucket
関数は、指定されたタイムスタンプ値を、指定された間隔(バケット)の先頭に丸めます。間隔は、タイムラインの指定された起点から始まります。
この関数を使用すると、周期性と呼ばれる目的の時間間隔に時系列データを集計できます。場合によっては、すべての時系列データを指定された周期の等価バケットに配置し、各バケットが同じ時間量を表すようにすることが望ましい場合があります。
構文:
TIMESTAMP timestamp_bucket(<timestamp>[, interval [,origin ])
- timestamp:
timestamp
引数は、TIMESTAMP値またはTIMESTAMP型にキャストできる値を取ります。 - interval:
interval
引数はオプションであり、STRINGデータ型です。interval
は、<n> unit
として指定されます。説明
n
は、間隔の値を指定します。n
は0より大きくする必要がありますunit
は、時間隔コンポーネントを定義します。この関数は、単数形式または複数形式のWEEK、DAY、HOUR、MINUTEおよびSECONDをサポートします。たとえば、"5 MINUTE"または"5 MINUTES"です。
ノート:
単位の大/小文字は区別されません。 - origin:
origin
引数は、タイムライン上のバケットの開始点を表します。この引数はオプションで、TIMESTAMP値を取ります。originには、TIMESTAMP型にキャストできる任意のデータ型を指定できます。指定しない場合、Unixエポック1970-01-01がデフォルト値です。ノート:
また、この関数は、origin
より小さい入力タイムスタンプを指定された間隔の先頭に丸めます。つまり、タイムラインの入力タイムスタンプ値と比較して、将来のタイムスタンプ値を持つorigin
を指定できます。 - 戻り値: TIMESTAMP(9)
この関数は、次の場合にNULLを返します。
- いずれかの引数がNULLに設定されている場合。
- 入力
timestamp
がTIMESTAMP型にキャスト可能でない場合。
例12-16 2019年1月1日から始まるバケットを使用した、12時間ごとにIST空港から出発する乗客数の統計のフェッチ。2019年2月のデータのみを考慮します
SELECT $t AS DATE,
count($t) AS FLIGHTCOUNT
FROM BaggageInfo bag, bag.bagInfo[0].flightLegs[] $f,
timestamp_bucket($f.flightDate, '12 HOURS', '2019-01-01T00') $t
WHERE $f.fltRouteSrc =any "IST" AND timestamp_floor($f.flightDate, 'MONTH') = '2019-02-01T00:00:00Z'
GROUP BY $t
ORDER BY $t
説明: 2019年2月に旅行する乗客を考慮するには、timestamp_floor関数を使用して、flightDate
を月の初めまで切り下げます。結果を文字列"2019-02-01T00:00:00Z"と比較します。この例では、ISO-8601形式の文字列で日付を指定します。この文字列は、暗黙的にCASTをTIMESTAMP値に取得します。
IST空港からの乗継便を含めるには、配列コンストラクタ[ ]を使用して、flightLegs
が配列であることを示し、検索で各fltRouteSrc
配列要素を考慮します。
intervalが12時間でoriginが2019年1月1日であるflightDate
フィールドで、timsestamp_bucket
関数を使用します。
{"DATE":"2019-02-02T12:00:00.000000000Z","FLIGHTCOUNT":1}
{"DATE":"2019-02-04T00:00:00.000000000Z","FLIGHTCOUNT":1}
{"DATE":"2019-02-04T12:00:00.000000000Z","FLIGHTCOUNT":2}
{"DATE":"2019-02-07T12:00:00.000000000Z","FLIGHTCOUNT":1}
{"DATE":"2019-02-11T12:00:00.000000000Z","FLIGHTCOUNT":1}
{"DATE":"2019-02-12T00:00:00.000000000Z","FLIGHTCOUNT":2}
{"DATE":"2019-02-12T12:00:00.000000000Z","FLIGHTCOUNT":1}
例12-17 ストリーミング・メディア・サービス・データから、2023年1月1日の正午から始まるバケットを使用した、毎週期限切れになるアカウント数の統計のフェッチ。2023年12月1日からのデータを考慮します
SELECT array_collect(s.account_expiry) as ACCOUNT_EXPIRY,
$t AS WEEK,
count($t) AS ACCOUNTS
FROM stream_acct s,
timestamp_bucket(s.account_expiry, '1 week', '2023-01-01T12') $t
WHERE s.account_expiry >= '2023-12-01'
GROUP BY $t
ORDER BY $t;
説明: interval
が1週間、originが1月12日の午後1時であるaccount_expiry
フィールドでtimsestamp_bucket
関数を使用します。この関数は、2023年1月1日午後12時から1週間の周期性を計算し、account_expiry
値を対応する週バケットの先頭に丸めます。
array_collect関数を使用して、account_expiry
フィールドを表示することに注意してください。SELECT式にグループ化関数が含まれている場合、グループ化式、集計関数または外部変数のみを参照できます。
{"ACCOUNT_EXPIRY":["2023-12-18T00:00:00.000000000Z"],"WEEK":"2023-12-17T12:00:00.000000000Z","ACCOUNTS":1}
{"ACCOUNT_EXPIRY":["2023-12-31T00:00:00.000000000Z"],"WEEK":"2023-12-24T12:00:00.000000000Z","ACCOUNTS":1}
{"ACCOUNT_EXPIRY":["2024-03-18T00:00:00.000000000Z"],"WEEK":"2024-03-17T12:00:00.000000000Z","ACCOUNTS":1}