2017-03-15 7 views
2

Was ist der beste Weg, um InfluxDB für bestimmte Stunden jeden Tag abzufragen, zum Beispiel habe ich eine Serie, die Check-in/Checkout-Aktivitäten haben, und ich muss sie zwischen 2 Uhr morgens - 3 Uhr alle sehen Tag für letzten Monat, bin mir bewusst, dass es keine direkte Möglichkeit gibt, dies in der Abfragesprache zu tun - aktuelle Version 1.2 - Nicht sicher, ob es eine Arbeit oder etwas gibt?Query InfluxDB für bestimmte Stunden jeden Tag

Antwort

4

Ich habe nach dem gleichen gesucht und Ihre Frage gefunden. Wie Sie sagen, die Syntax scheint es nicht zu ermöglichen, es zu tun.

Mein nächster Versuch war es, einen regulären Ausdruck für eine Zeit WHERE Clausus zu verwenden, die derzeit nicht von InfluxDB unterstützt wird.

Das sollte also wohl die Antwort sein, und ich würde keine Antwort posten, nur um das zu sagen.

Allerdings habe ich an einem anderen Problem, habe ich einen Weg gefunden, dass kann oder nicht helfen Ihnen in Ihrem speziellen Fall. Es ist eine Workaround das ist nicht sehr nett, aber es scheint zu arbeiten in dem Fall, dass Sie eine Aggregation/Auswahl von dem, was Sie in der gegebenen Stunde sehen möchten, so dass Sie am Ende mit einem Wert pro Stunde. Zum Beispiel (Mittelwert/Höchstwert/Anzahl der Check-in-Checkouts in dieser Stunde für eine bestimmte Person, die möglicherweise das ist, wonach Sie suchen, oder die Sie verwenden können, um die Tage zu identifizieren, die Sie einzeln abfragen möchten was ist dort passiert).

Zum Beispiel möchte ich die Messung des Stromverbrauchs täglich von 00:00 bis 06:00 Uhr erhalten. Ich mache eine erste Unterabfrage, die die Gruppierung der Messungen um 6:00 Uhr ab einem bestimmten Datum um 00:00 Uhr teilt. Dann gruppiere ich mich in der Hauptabfrage nach 24 Stunden und wähle den ersten Wert aus. Wie dies

SELECT first("mean") FROM (SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5' AND time > '2017-01-01' GROUP BY time(6h)) WHERE time > '2017-01-01' GROUP BY time(24h) 

Wenn Sie 2-4 Uhr wollen, also 14: 00-16: 00 Uhr, müssen Sie erste Gruppe von 2 Stunden in der Unterabfrage, dann wettmachen kann die von 14 Uhr so ​​eingestellt, dass es bei 14 beginnt : 00.

SELECT first("mean") FROM (SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5' AND time > '2017-01-01T14:00:00Z' GROUP BY time(2h)) WHERE time > '2017-01-01T14:00:00Z' GROUP BY time(24h,14h) 

Nur zur Überprüfung. In meinem 1.2 InfluxDB das ist das Endergebnis:

Energy 
time first 
2017-01-01T14:00:00Z 86.41747572815534 
2017-01-02T14:00:00Z 43.49722222222222 
2017-01-03T14:00:00Z 81.05416666666666 

Die Unteranfrage:

Energy 
time mean 
2017-01-01T14:00:00Z 86.41747572815534 
2017-01-01T16:00:00Z 91.46879334257974 
2017-01-01T18:00:00Z 89.14027777777778 
2017-01-01T20:00:00Z 94.47434119278779 
2017-01-01T22:00:00Z 89.94305555555556 
2017-01-02T00:00:00Z 86.29542302357837 
2017-01-02T02:00:00Z 92.2625 
2017-01-02T04:00:00Z 89.93619972260748 
2017-01-02T06:00:00Z 87.78888888888889 
2017-01-02T08:00:00Z 50.790277777777774 
2017-01-02T10:00:00Z 0.6597222222222222 
2017-01-02T12:00:00Z 0.10957004160887657 
2017-01-02T14:00:00Z 43.49722222222222 
2017-01-02T16:00:00Z 86.0610263522885 
2017-01-02T18:00:00Z 86.59778085991678 
2017-01-02T20:00:00Z 91.56527777777778 
2017-01-02T22:00:00Z 90.52565880721221 
2017-01-03T00:00:00Z 86.79166666666667 
2017-01-03T02:00:00Z 87.15533980582525 
2017-01-03T04:00:00Z 89.47988904299584 
2017-01-03T06:00:00Z 91.58888888888889 
2017-01-03T08:00:00Z 41.67732962447844 
2017-01-03T10:00:00Z 16.216366158113733 
2017-01-03T12:00:00Z 25.27739251040222 
2017-01-03T14:00:00Z 81.05416666666666 

Wenn Sie 13 benötigen: 00-15: 00 Uhr, müssen Sie die Unterabfrage im vorherigen Beispiel zum Ausgleich um 1 Uhr.

Für 14: 00-15: 00:

SELECT first("mean") FROM (SELECT mean("value") FROM "Energy" WHERE "devicename" = 'Electricity' AND "deviceid" = '0_5' AND time > '2017-01-01T14:00:00Z' GROUP BY time(1h)) WHERE time > '2017-01-01T14:00:00Z' GROUP BY time(24h,14h) 

this helps :)

+0

Ich werde Aggregate nicht in der Lage sein, trotzdem zu verwenden, habe ich einen anderen Fall, aber +1 gäbe wie es jemand anderem helfen kann;) –

Verwandte Themen