Site cover image
InfluxDB データのダウンサンプリング設定方法(CQ/RP)

時系列データを保存していくと、いつかはストレージがいっぱいになってしまいます。

InfluxDBでは、一定期間が過ぎたときにデータの解像度を落として(ダウンサンプリング)保持することができます。

このエントリでは、ダウンサンプリングしてデータを保持するための2つの機能「Continuous Query(CQ)」と「Retention Policy(RP)」の設定方法を説明します。

Continuous Query(CQ)は定期的に自動実行するクエリです。

Retention Policy(RP)は保持期間を持つデータ構造です。

使い方は次のようなイメージです。

  1. 短期用RP、長期用RPのように保持期間ごとにRPを作成しておく
  2. 最初に短期用RPにデータを保存する
  3. 短期用RPで期限が来たデータに対し、CQを使ってダウンサンプリングし長期用RPに保存する

それでは実際に公式ドキュメントを参考に試してみましょう。

まずDBを作成します。

CREATE DATABASE "food_data"

次に、DBに対してデフォルトのRPを保持期間1時間で作成します。

> CREATE RETENTION POLICY "one_hour" ON "food_data" DURATION 1h REPLICATION 1 DEFAULT

RPにはDEFAULTを設定することができます。

DB内に存在する全てのmeasurementsのデータ保持期間はデフォルトのRPになります。

明示的にデフォルトRPを設定しない場合は、自動生成された無期限のRPになっています (autogen という名前のRP)。

REPLICATION 1はシングルノードインスタンスのとき必須のパラメータになります。

サンプルデータとしてfood_dataに適当なordersを作成しておきます。

ordersにはデフォルトのRPであるone_hourが適用されます。

> INSERT orders,phone=10 website=30
> INSERT orders,phone=12 website=39
> INSERT orders,phone=11 website=56

> SELECT * FROM orders
name: orders
time                phone website
----                ----- -------
1557546012214138700 10    30
1557546027823595200 12    39
1557546035939292400 11    56

さらに、ダウンサンプリング後のデータを保存する保持期間1年(52週)のRPも作成しておきましょう。

> CREATE RETENTION POLICY "a_year" ON "food_data" DURATION 52w REPLICATION 1

food_data.ordersを30分ごとにまとめ、RP a_yeardown_sampled_ordersに保存するCQを作成します。

現行のCLIツールではクエリ内の改行がサポートされていないので注意が必要です。

> CREATE CONTINUOUS QUERY "cq_30m" ON "food_data" BEGIN
  SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone"
  INTO "a_year"."downsampled_orders"
  FROM "orders"
  GROUP BY time(30m)
END

30分以上待ってからa_year.downsampled_ordersを見ると、データがダウンサンプリングされていることがわかります。

ここではタイムスタンプのフォーマットを見やすくするためにprecision rfc3339としています。

> precision rfc3339
> select * from a_year.downsampled_orders
name: downsampled_orders
time                 mean_website
----                 ------------
2019-05-11T03:30:00Z 41.666666666666664
2019-05-11T04:00:00Z 60
2019-05-11T04:30:00Z 53

さらに、期限を過ぎたデータが削除されていることも確認しておきましょう。

期限の切れたデータは1時間ちょうどで削除されるわけではなく、チェックのタイミングで削除されます。

> SELECT * FROM one_hour.orders
name: orders
time                         phone website
----                         ----- -------
2019-05-11T04:18:35.2291329Z 13    60
2019-05-11T04:57:23.267411Z  14    53

設定したRPとCQは下記のようにして確認します。

> SHOW RETENTION POLICIES ON "food_data"

> SHOW CONTINUOUS QUERIES

以上です。

このエントリでは、ダウンサンプリングしてデータを保持するための2つの機能「Continuous Query(CQ)」と「Retention Policy(RP)」の設定方法を説明しました。

InfluxDBの紹介を見たい方には下記の記事が参考になると思います。

Thank you!
Thank you!
URLをコピーしました

コメントを送る

コメントはブログオーナーのみ閲覧できます