InfluxDB 2.0 を使う(1)　値の登録・取得を試す

# はじめに

[InfluxDB 2.0](https://www.influxdata.com/products/influxdb-overview/influxdb-2-0/)は、InfluxData社の時系列データベースInfluxDBの次期版です。本記事執筆時点ではアルファ版がリリースされています。基本的な使い方を見ていきます。

# 環境

* OS: Debian 9.11
* InfluxDB: v2.0.0-alpha.20

# ダウンロードと起動

[ダウンロードページ](https://portal.influxdata.com/downloads/) からv2.0.0-alphaをダウンロード・解凍します。
現れたファイルのうち、`influxd`がサーバ用実行ファイル、`influx`がコマンドラインインターフェースです。

`influxd`を起動します。一通りログが出力され待ち受け状態になります。

```
$ ./influxd
2019-11-22T07:48:02.547633Z	info	Welcome to InfluxDB	{"log_id": "xxxxxxxxxx", "version": "2.0.0-alpha.20", "commit": "xxxxxxxx", "build_date": "2019-11-21T00:44:08Z"}
2019-11-22T07:48:02.549365Z	info	Resources opened	{"log_id": "xxxxxxxxxx", "service": "bolt", "path": "/home/debian/.influxdbv2/influxd.bolt"}
...
```

# 初期設定

サーバへの操作は`influx`で行います。以下、サーバと同一ホスト上で実行します。最初に`influx setup`で初期設定を行います。ユーザとorganization、bucketの3点を作成します。organizationはユーザのグループ、bucketはinfluxdb v1でいうdatabaseに近い概念でしょうか。各用語については [Glossary](https://v2.docs.influxdata.com/v2.0/reference/glossary/) を合わせて参照して下さい。

```
$ ./influx setup
Welcome to InfluxDB 2.0!
Please type your primary username: your_name

Please type your password: 

Please type your password again: 

Passwords do not match!
Please type your password: 

Please type your password again: 

Please type your primary organization name: my_organization

Please type your primary bucket name: my_bucket

Please type your retention period in hours.
Or press ENTER for infinite.: 


You have entered:
  Username:          your_name
  Organization:      my_organization
  Bucket:            my_bucket
  Retention Period:  infinite
Confirm? (y/n): y

Your token has been stored in /home/debian/.influxdbv2/credentials.
User		Organization	Bucket
your_name	my_organization	my_bucket
```

# 値の登録

値の登録は`influx write`を用います。引数に与える文字列の形式はv1のラインプロトコルと同じであるようです。最小限の入力として、measurement名とフィールド名、値の組が必要です。例えば以下のコマンドです。タイムスタンプの指定を省略しています。この場合、リクエスト時のサーバ時刻がタイムスタンプとして用いられます。

```
$ ./influx write 'my_measurement temperature=12.3'
```

以下は2019-11-22 00:00:00付でデータを登録する例です。時刻精度を合わせて指定しています。

```
$ ./influx write -p s 'my_measurement temperature=12.2 1574348400'
```

# 値の取得

値の取得は`influx query`を用います。InfluxDB v2では、クエリをFluxという独自言語で記述します。適当なファイルを作成し、以下を記述します。リクエスト時刻の24時間前より以降のデータを取得するというクエリです。

```query.flux
from(bucket: "my_bucket")
  |> range(start:-24h)
```

以下のコマンドでクエリを実行します。

```
$ ./influx query @query.flux --org my_organization
```

実行結果は以下のようになります。登録した値が得られています。

```
Result: _result
Table: keys: [_start, _stop, _field, _measurement]
                   _start:time                      _stop:time           _field:string     _measurement:string                      _time:time                  _value:float  
------------------------------  ------------------------------  ----------------------  ----------------------  ------------------------------  ----------------------------  
2019-11-21T08:53:07.601788990Z  2019-11-22T08:53:07.601788990Z             temperature          my_measurement  2019-11-21T15:00:00.000000000Z                          12.2  
2019-11-21T08:53:07.601788990Z  2019-11-22T08:53:07.601788990Z             temperature          my_measurement  2019-11-22T08:22:23.218928987Z                          12.3  
```

\_start:timeと\_stop:timeがクエリされた時間範囲、\_time:timeがデータのタイムスタンプに相当するようです。

# おわりに

InfluxDB 2.0のセットアップと基本的な値の登録・取得の手順を見ました。

# 参考

* [Get started with InfluxDB](https://v2.docs.influxdata.com/v2.0/get-started/)