InfluxDB 1.7 の使い方 その2( RETENTION POLICY , CONTINUOUS QUERY )
InfluxDB では、データを保持しておく期間を指定することができ期限が過ぎたデータを自動的に削除することができます。また、定期的にデータの解像度を下げたデータを生成したりすることもできます。
【動作環境】
- CentOS 7
- InfluxDB 1.7
データ保持期間に関するポリシー[RETENTION POLICIES(RP)]
InfluxDB にデータベースを作成すると autogen という名前の保持期間無期限のポリシーが作成されます。作成されているポリシーを確認するには、「 SHOW RETENTION POLICIES 」コマンドを実行します。
# influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.7
InfluxDB shell version: 1.7.7
> USE データベース名
Using database factory_env
> SHOW RETENTION POLICIES
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
例えば、 「 factory_env 」 データベースに RETENTION POLICY を1時間で作成します。
> CREATE RETENTION POLICY "one_hour" ON "factory_env" DURATION 1h REPLICATION 1 DEFAULT
DURATION に保持しておく期間を指定し、 DEFAULT と付加することでデータベースのデフォルトポリシーとしています。
REPLICATION は、クラスター構成時に影響を与えるようですが必須パラメータとなっておりシングルノードインスタンスの場合は、「1」になります。
> SHOW RETENTION POLICIES ON "factory_env"
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
one_hour 1h0m0s 1h0m0s 1 true
設定されたことを確認し、しばらくしてからデータを確認するとおよそ 1時間 分のデータが残っていることが確認できます。
DURATION の単位
Units | Meaning |
---|---|
ns | nanoseconds (1 billionth of a second) |
u or µ | microseconds (1 millionth of a second) |
ms | milliseconds (1 thousandth of a second) |
s | second |
m | minute |
h | hour |
d | day |
w | week |
ダウンサンプリング
もう一つ特徴的な機能として「 CONTINUOUS QUERY 」という機能があり、データの解像度を下げたデータを作ることができます。
また、 measurement と RETENTION POLICY はセットとして扱うことができポリシーに紐ついた状態でデータを管理することができます。
例えば、1年分のデータを保持する RETENTION POLICY を作成します。
> CREATE RETENTION POLICY "yearly" ON "factory_env" DURATION 52w REPLICATION 1
> SHOW RETENTION POLICIES ON "factory_env"
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
one_hour 1h0m0s 1h0m0s 1 true
yearly 8736h0m0s 168h0m0s 1 false
「 CONTINUOUS QUERY 」を使って15分単位にまとめたデータを downsampling_env という measurement に追加していきます。このとき、事前に作成しておいた RETENTION POLICY に紐付けておくことができます。
> CREATE CONTINUOUS QUERY "cq_15m" ON "factory_env"
BEGIN
SELECT mean("temp") AS "mean_temp" INTO "yearly"."downsampling_env"
FROM "environment"
GROUP BY time(15m)
END
しばらくしてからデータを確認すると yearly.downsampling_env に指定単位でデータができていることを確認できます。
> SELECT * FROM yearly.downsampling_env
name: downsampling_env
time mean_temp
---- ---------
2019-08-08T15:45:00Z 37.77499999999999
2019-08-08T16:00:00Z 38.425
2019-08-08T16:15:00Z 38.3
2019-08-08T16:30:00Z 37.525000000000006