4

InfluxDB 時系列を開発する必要があります。時系列には、次の情報が含まれている必要があります。

  • time - データが記録された時刻。これは InfluxDB 時間フィールドを使用します。
  • value - 時系列の値。単純な整数。
  • date - 値に関連付けられた別の日付。この日付は「時刻」フィールドとは関係ありません。クエリを絞り込むために使用されます。

私の現在の考え方は、上記の「日付」フィールドを時系列の別の「列」として保存して、「where」句を使用してその日付を使用してデータをフィルタリングできるようにすることです。しかし、それをどのように表現するかについて私は苦労しています。InfluxDB はあらゆる種類の日付または日付/時刻フィールドをサポートしていますか? 「時間」フィールドでは、ミリ秒を使用しているようです。ただし、別の名前のフィールドで同じことを試みると、通常の時間のクエリは機能しません。たとえば、次のようになります。

select * from myseries where time > now() - 1d

上記のクエリは問題なく機能します。

select * from myseries where date > now() - 1d

このクエリは、「日付」を時間値として扱う方法がわからないため、エラーで失敗します。

このシナリオで日付をより適切に表現する方法はありますか?

4

1 に答える 1

3

InfluxDB のデータ型は、float、int、bool、または string のいずれかのみです。timeフィールドは特別な例外です。

日付フィールドには、エポック以降のカウントを表す整数を使用できます。ただし、 now() のような便利な関数は機能しないようです (v0.13 を使用):

insert test_dates date_int=1573405622000000000i,desc="years from now"
insert test_dates date_int=1373405661000000000i,desc="years ago"

それをテストするnow()

select * from test_dates where date_int > now()

与えます:

name: test_dates

time                    date_int                desc 
1473404302801938064     1573405622000000000     years from now
1473404315927493772     1373405661000000000     years ago

と:

select * from test_dates where date_int < now()

与えます:

name: test_dates

time                    date_int                desc
1473462286404084162     1573405622000000000     years from now
1473462286408231540     1373405661000000000     years ago

everydate_intはどういうわけか大なり小なりのようですnow()

したがって、整数を使用する場合、比較は構文エラーにはなりませんが、希望どおりには機能しません。

これを解決する 1 つの方法は、フロントエンド アプリで独自の日付から整数への変換を作成することです。次に、フロントエンドでの日付比較は、InfluxDB 内の int 比較です。不格好ですが、これらは私たちが持っているデータ型です。

InfluxDB に格納される日付は、単一のエポックベースの int にするか、InfluxDB 内で年、月、日の個別の int フィールドを格納することができます。後者の場合、クエリは大きくて遅くなりますが、読み取りとデバッグは簡単です。

幸運を!

于 2016-09-09T07:36:18.583 に答える