※記事内に商品プロモーションを含むことがあります。
はじめに
時系列データベースInfluxDBのインストール方法と、コマンドを用いた基本的な使い方について解説する。
本記事で検証した環境は以下の通り。
- Linux Mint 19.3 (Cinnamon)
- InfluxDB 1.8.0
InfluxDBはLinuxだけでなくwindowsやMac OS Xでも利用可能である。
InfuxDBの基本
InfluxDBは時系列データの扱いに特化したデータベースである。InfluxDBでは、時系列データの移動平均をとるなどの処理をクエリ文で指定することができる。一方、MongoDBなどのドキュメント指向型データベースと比較すると、非構造化データを扱うことは困難である。
また、InfluxDBはGrafanaというダッシュボード(ブラウザ上などでデータを可視化するツール)とも連携が可能である。
さらに、InfluxDBにはPythonのライブラリも用意されており、PandasのDataFrame形式でInfluxDBとデータを容易にやり取りできる。
InfuxDBのインストール方法
記事執筆時点(2020年4月18日)で、InfluxDBの最新の安定バージョンは1.8.0, 最新のベータ版は2.0である。本記事では1.8.0をインストールする。Debian系のOS (Linux Mint, Ubuntuなど)では、以下のコマンドでインストールする。
wget https://dl.influxdata.com/influxdb/releases/influxdb_1.8.0_amd64.deb
sudo dpkg -i influxdb_1.8.0_amd64.deb
その他のOSのインストール方法は以下のページを参照。
https://portal.influxdata.com/downloads/
InfluxDBのデータ構造
InfluxDBのデータ構造について述べる。InfluxDBでは、基本的に時系列データのみを扱い、全てのデータは時刻の情報(タイムスタンプ)を持つ。
データ構造の最上位にはdatabase
がある。その下にmeasurement
があり、一番下には1つの時系列データを表すfield
がある。field
のキー(ラベル)をfield_key
と呼ぶ。
例として、以下の気象データを考える(値はダミー)。temperature
とwind_speed
がfield_key
に相当し、表の名前がmeasurement
に相当する。このような表をいくつも束ねたものがdatabase
になる。database
自体も複数定義することが可能である。
時刻 | temperature | wind_speed |
---|---|---|
2020-04-25 00:00:00 | 10.2 | 3.2 |
2020-04-25 01:00:00 | 9.8 | 4.5 |
2020-04-25 02:00:00 | 9.0 | 2.7 |
なお、measurement
の下には、field_key
の他にデータのメタ情報を表すtag_key
もあるが、本記事では扱わない。
CLIからInfluxDBを使う
InfluxDBの起動
InfluxDBを起動するには、influx
コマンドを実行する。起動すると、プロンプトが>
に変わる。
$ influx
Connected to http://localhost:8086 version 1.8.0
InfluxDB shell version: 1.8.0
>
influxDBを終了するには、exit
コマンドを実行する。
データベースの作成・アクセス
データベースを作成するには、CREATE DATABASE <データベース名>
とする。
例:db1という名前のデータベースを作る。
> CREATE DATABASE db1
なお、本記事ではInfuxDBの公式リファレンスに準じて、InfluxDBのコマンドを大文字で表記するが、基本的に小文字でも動作する(create database db1
)。
現在作成されているデータベース一覧を確認するには、SHOW DATABASE
とする。
> SHOW DATABASE
name: databases
name
----
_internal
db1
データベースにアクセスするには、USE <データベース名>
とする。
> USE db1
Using database db1
時系列データの書き込み
データベースにCLIからデータを追加するには、line protocol
を使って1行ずつ書き込むことができる。line protocol
のフォーマットは以下のようになる。
INSERT <measurement> <field_key>=<field_values> [<timestamp>]
timestamp
は任意であり、UNIX時刻(ナノ秒単位の整数)で指定する。timestamp
を指定しない場合は、データを書き込んだ時刻が自動的に付与される。
例:先程の気象データをweather
というmeasurement
に書き込む。
> INSERT weather temperature=10.2 1587772800000000000
> INSERT weather wind_speed=3.2 1587772800000000000
> INSERT weather temperature=9.8 1587776400000000000
> INSERT weather wind_speed=4.5 1587776400000000000
時系列データの取得
database
内のmeasurement
一覧を取得するには、以下のコマンドを実行する。
> SHOW measurements
name: measurements
name
----
weather
書き込んだデータを取得するには、クエリ文を用いる。最も簡単なクエリ文のフォーマットは次のようになる。
SELECT <field_key> FROM <measurement>
例:
> SELECT temperature FROM weather
name: weather
time temperature
---- -----------
1587772800000000000 10.2
1587776400000000000 9.8
また、<field_key>
にワイルドカード*
を指定することで、全てのfieldを取得できる。
> SELECT * FROM weather
name: weather
time temperature wind_speed
---- ----------- ----------
1587772800000000000 10.2 3.2
1587776400000000000 9.8 4.5
さらに、クエリ文に条件を付加することによって、指定した期間のデータのみ抽出したり、移動平均などの集約処理を掛けることも可能である。これらは別の記事で説明予定。
データの削除
あるfield_key
に含まれるデータを全て削除するには、以下のコマンドを実行する。
DROP <field_key> FROM <measurement名>
measurement
を削除するには、以下のコマンドを実行する。
DROP MEASUREMENT <measurement名>
database
を削除するには、以下のコマンドを実行する。
DROP DATABASE <データベース名>
参考
InfluxDBの公式リファレンス
InfluxDB OSS 1.8 Documentation