JavaScriptを有効にしてください

時系列データベースInfluxDB入門

 ·   5 min read

はじめに

時系列データベース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と呼ぶ。

例として、以下の気象データを考える(値はダミー)。temperaturewind_speedfield_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

シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。Twitterで新着記事を配信中です