2016-12-29 5 views
1

に照会InfluxDB(v1.1)を使用して、特定のキーの最終エントリタイムスタンプを取得する必要があります。どの測定値が格納されていても、これがどの値であっても関係なく特定のキーの最新のタイムスタンプ(MAX/Last)をInflux

セットアップは簡単です。ここでは、3つの測定値:location,networkおよびusageがあります。
キーは1つだけです:device_id。これを照会する最も効率的な方法だろう何:

# notice the lack of a FROM clause on measurement here... 
SELECT MAX(time) WHERE 'device_id' = 'x'; 

質問:擬似コードで

は、このようなものでしょうか?

私がこれを望む理由は、分散型の同期プロセスがあるからです。 1時間前に更新されたデバイスもあれば、数か月後に更新されたデバイスもあります。デバイス(キー)の「最後に更新された」タイムスタンプを得ることができると、新しいポイントをより効率的にInfluxに保存することができます。

私はまた、InfluxDB's GitHub repo (#5793)についても同様の議論があることに気付きましたが、フィールド/キーによってフィルタリングされていないという質問があります。そして、これはまさに私が望むことです:特定のキーのための「最後の」エントリを得ること。

答えて

2

残念ながら、あなたが探しているものを得ることができる単一のクエリはありません。あなたは仕事のクライアント側のビットを行う必要があります。

お勧めしますクエリは、各測定のために、このクエリを実行する必要があります

SELECT last(<field name>), time FROM <measurement> WHERE device_id = 'x' 

です。

SELECT last(<field name>), time FROM location WHERE device_id = 'x' 
SELECT last(<field name>), time FROM network WHERE device_id = 'x' 
SELECT last(<field name>), time FROM usage WHERE device_id = 'x' 

は、そこから最大のタイムスタンプ

> select last(value), time from location where device_id = 'x'; select last(value), time from network where device_id = 'x'; select last(value),  time from usage where device_id = 'x'; 
name: location 
time    last 
----    ---- 
1483640697584904775 3 

name: network 
time    last 
----    ---- 
1483640714335794796 4 

name: usage 
time    last 
----    ---- 
1483640783941353064 4 
+0

おかげでマイケルとの1を取得します。確かに、これは作業するための解決策なので、私はこれを上書きしました。ただし、値を決定するには、3回のAPI呼び出し(各測定に1回)が必要です。それでもまだ効率的ではありません。また、もっと重要なのは、実際に言及したクエリでは、を指定する必要があります。これは私が前もって知りません。そのため、まだ私は答えとしてマークしていません。多分、将来のInfluxのバージョンには、これに対するすてきな解決策があるでしょう。 –

+0

意味があります。この種の機能を要求するInfluxDBリポジトリで問題を開くことができれば、適切に計画することができます。 –

関連する問題