web-dev-qa-db-ja.com

influxdbからデータを削除できますか?

Influxdbからデータを削除するにはどうすればよいですか?

ドキュメントには、次のように単純である必要があることが示されています。

delete from foo where time < now() -1h

何らかの理由で、influxdbは "時間を参照しないwhere句を削除クエリに含めることはできません"という私の削除ステートメントを拒否します

select * from bootstrap where duration > 1000 and time > 14041409940s and time < now()

期間が1000秒を超える5つのエントリを削除したい

enter image description here

これは有効なSQL文である必要がありますが、失敗します

enter image description here

これらの削除ステートメントはいずれも機能しません

delete from bootstrap where duration > 3000000"

delete from bootstrap where duration > 300000"

delete from bootstrap where time = 1404140994043"

delete from bootstrap where duration > 300000 and time > 1404141054508 "

delete from bootstrap where duration > 300000 and time > 1404141054508s "

delete from bootstrap where time > 1404141054508s and duration > 300000 "

delete from bootstrap where duration > 30000 and time > 1s"

ドキュメント参照

http://influxdb.com/docs/v0.8/api/query_language.html

更新

追加のクエリ

delete from bootstrap where time > 1404141416824 and duration > 3000;
delete sequence_number from bootstrap where time > 1s and duration > 1000;

たぶんこれはバグですか?

https://github.com/influxdb/influxdb/issues/975
https://github.com/influxdb/influxdb/issues/84

43
spuder

Influxdb 0.9でこれを実行できるようです。たとえば、私にとって成功したクエリは次のとおりです。

DROP SERIES FROM temperature WHERE machine='zagbar'

(@MuratCorluによる寛大なコメントごとに、以前のコメントを回答として再投稿しています...)

37
John Clements

流入では、時間によってのみ削除できます

たとえば、次は無効です。

#Wrong
DELETE FROM foo WHERE time < '2014-06-30' and duration > 1000 #Can't delete if where clause has non time entity

これは私がデータを削除できた方法です

DELETE FROM foo WHERE time > '2014-06-30' and time < '2014-06-30 15:16:01'

更新:これは、流入8で機能しました。おそらく、流入9では動作しません。

20
spuder

自動データ削除について InfluxDB保存ポリシー に言及している人がいないことに驚いています。デフォルトの保持ポリシーを設定し、データベースごとのレベルで設定することもできます。

ドキュメント から:

CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [DEFAULT]
13
Dan Esparza

InfluxDBは削除に少し苦痛があるため、ラインプロトコル(v0.9)を介して投稿する場合は、「ForUse」というブールフィールドを持つスキーマを使用します。

your_measurement,your_tag=foo ForUse=TRUE,value=123.5 1262304000000000000

同じ測定、タグキー、および時間を送信するフィールドキーで上書きできます。そのため、「ForUse」をfalseに設定し、保持ポリシーでデータベースサイズを制御できるようにして「削除」を行います。

上書きはシームレスに行われるため、スキーマもさかのぼって追加できます。いいね.

8
Jason

受け入れられた回答(DROP SERIES)は多くの場合に機能しますが、削除する必要があるレコードが多くの時間範囲とタグセットに分散している場合は機能しません。

(より遅い方法ですが)より一般的な目的のアプローチは、別のプログラミング言語を使用して、削除クエリを1つずつ発行することです。

  1. 削除する必要があるすべてのレコードを照会します(またはスクリプトでフィルターロジックを使用します)
  2. 削除するレコードごとに:

    1. 時間とタグセットを抽出します(フィールドは無視します)
    2. これをクエリにフォーマットします。

      DELETE FROM "things" WHERE time=123123123 AND tag1='val' AND tag2='val'
      

      各クエリを1つずつ送信します

2
max pleaner

時間フィールド(数値)でのみ削除できます。

Delete from <measurement> where time=123456

動作します。単一引用符または二重引用符を与えないでください。その数。

1
Mahaveer Jangir