InfluxDB でタイムゾーンを指定する

メモ:

InfluxDB の時間項目は、 UTC として扱われるようなので InfluxDB の機能としてローカル時間として取得する方法があります。

タイムゾーンを指定する

InfluxDB でデータを取得すると時間項目は UTC として取得されます。 InfluxDB では、内部的に UTC として扱われるため WHERE 句も UTC を前提として指定する必要があるようです。

次の InfluxQL ( SQL ライクな構文)を実行すると取得される time 項目は、 UTC で取得されてきます。

> SELECT * FROM environment WHERE time >= '2019-08-23T03:10:03Z';
name: environment
time                           host  humidity pressure temp zone
----                           ----  -------- -------- ---- ----
2019-08-23T03:10:03.58450688Z  hostA 44       1006.9   37   BLD13
2019-08-23T03:12:04.221785088Z hostA 44.4     1006.9   36.5 BLD13
2019-08-23T03:14:03.861267968Z hostA 44.6     1006.9   36.1 BLD13
2019-08-23T03:16:03.443504896Z hostA 43.7     1006.9   36.1 BLD13
2019-08-23T03:18:04.253985024Z hostA 44.1     1006.9   35.5 BLD13
2019-08-23T03:20:03.852579072Z hostA 44.1     1006.9   35.2 BLD13

この時間項目を指定したタイムゾーンで表示したい場合、タイムゾーン句( tz )というものが用意されており次のように指定することで望みのタイムゾーンで取得することができます。

結果として分かりにくいですが、指定したタイムゾーンで出力されます。

> SELECT * FROM environment WHERE time >= '2019-08-23T03:10:03Z' tz('Asia/Tokyo');
name: environment
time                                host  humidity pressure temp zone
----                                ----  -------- -------- ---- ----
2019-08-23T12:10:03.58450688+09:00  hostA 44       1006.9   37   BLD13
2019-08-23T12:12:04.221785088+09:00 hostA 44.4     1006.9   36.5 BLD13
2019-08-23T12:14:03.861267968+09:00 hostA 44.6     1006.9   36.1 BLD13
2019-08-23T12:16:03.443504896+09:00 hostA 43.7     1006.9   36.1 BLD13
2019-08-23T12:18:04.253985024+09:00 hostA 44.1     1006.9   35.5 BLD13

WHERE 句には、 UTC で指定する必要があるようです。