InfluxDB用Pythonライブラリの使い方
この記事のまとめ:
- 時系列データベースのオープンソースソフトウェアであるInfluxDBに対して、Pythonからデータベースを操作するための基本的な使い方の説明を行います。
背景
時系列データの機械学習をやってみようと思い、InfluxDBを使い始めましたので、今回はPythonを使ってInfluxDBにデータの挿入等を行ってみました。
InfluxDBのユーザー認証とアクセス制御
まずはInfluxDBに外部から接続できるようにユーザー設定をアクセス設定を行います。
ユーザー認証の設定
外部からの接続をユーザー認証によってアクセス制限します。 (※注意※初期設定ではIPアドレスとポート番号だけでアクセス可能になっていましたのですぐに変更したほうがよいです)
/etc/influxdb/influxdb.conf
をエディターで開き、下記のように変更します。
設定を変更したら、InfluxDBを再起動します。
管理者ユーザーの作成
再度、influx
コマンドでInfluxDBに接続し、admin ユーザーを作成します。
下記のコマンドでadminユーザーを作成できます。
なお、adminユーザーができていない場合、どんなコマンドを打っても下記のようなエラーが出ます。
一度InfluxDBとの接続を切り、先ほど作ったadminユーザーで接続し直します。
ちなみにadminユーザーを作った後に、何かしようとしても次のようにエラーが出るのでadminユーザーでの再接続は避けようがありません。
PythonからInfluxDBを操作する方法
InfluxDB用のPythonライブラリが提供されていますので、それを利用すれば大体のことは何でもできるはずです。
InfluxDB用のPythonライブラリに関しては、下記の公式のGithubとドキュメントにすべて記載されていますので、それらの一部を紹介していきます。
- 公式Github: https://github.com/influxdata/influxdb-python
- 公式ドキュメント: https://influxdb-python.readthedocs.io/en/latest/
InfluxDB用Pythonライブラリ
InfluxDB用Pythonライブラリのインストール、アップデート、アンインストールは下記のコマンドでできます。
サポートされているPythonバージョンは、2.7, 3.5, 3.6, PyPy and PyPy3のようです。
サンプルコード
いくつか簡単な動作を実行しながら動作を見ていきたいと思います。
ライブラリのインポート
まずはPythonを起動し、ライブラリをインポートしましょう。
クライアントインスタンスの生成
クライアントインスタンスを作ります。
初期化パラメーターとして次の引数を持つことができます。今回は最低限の引数のみでインスタンスを作りました。
host=u'localhost', port=8086, username=u'root', password=u'root', database=None, ssl=False, verify_ssl=False, timeout=None, retries=3, use_udp=False, udp_port=4444, proxies=None
また、次のようにDSN (Data Source Name)でもインスタンスを生成することもできます。
データベースの操作
作成済みのデータベースを表示してみます。次のように作成済みのデータベース名を表示できます。
使用するデータベースを選択・切替してみます。なお、データベースの選択は、クライアントインスタンス生成時にあらかじめ行っておくこともできます。
その他、次の関数を使うことでデータベースの作成や削除もできます。
create_database(dbname)
drop_database(dbname)
クエリの実行
DBの操作のためのクエリの実行は次のようにできます。
クエリの実行は、query
関数を使うほか、request
関数を使ってHTTP APIを使う方法や、send_packet
関数でUDPを使う方法などありそうです。
query(query, params=None, epoch=None, expected_response_code=200, database=None, raise_errors=True, chunked=False, chunk_size=0)
request(url, method=u'GET', params=None, data=None, expected_response_code=200, headers=None)
send_packet(packet, protocol=u'json')
pointの挿入
pointの挿入は、query
を使うこともできますが、専用の関数が用意されています。
その他、HTTP APIを使って書き込みを行う関数(?)もありそうです。
write(data, params=None, expected_response_code=204, protocol=u'json')
write_points(points, time_precision=None, database=None, retention_policy=None, tags=None, batch_size=None, protocol=u'json')
その他の操作
measurementの取得、削除
get_list_measurements()
drop_measurement(measurement)
pointの削除
delete_series(database=None, measurement=None, tags=None)
ユーザー操作
get_list_users()
create_user(username, password, admin=False)
drop_user(username)
set_user_password(username, password)
switch_user(username, password)
リテンションポリシー操作
get_list_retention_policies(database=None)
create_retention_policy(name, duration, replication, database=None, default=False)
drop_retention_policy(name, database=None)
alter_retention_policy(name, database=None, duration=None, replication=None, default=None)
権限操作
get_list_privileges(username)
grant_privilege(privilege, database, username)
revoke_privilege(privilege, database, username)
grant_admin_privileges(username)
revoke_admin_privileges(username)
切断
close()
今回は以上です。 最後まで読んでいただき、ありがとうございます。
コメント
コメントを投稿