コンテンツにスキップ

スクリプト開発 / コネクターオブジェクト DFF.CONN / InfluxDB

InfluxDB コネクターの操作オブジェクトは、Python のサードパーティ製パッケージ influxdb(バージョン 5.3.1)のラッパーであり、主に InfluxDB へのクエリと書き込みのメソッドを提供します。 本コネクターは以下のデータベースと互換性があります。

  • Alibaba Cloud 時系列データベース InfluxDB 版

本コネクターは HTTP プロトコルで接続します

DFF.CONN(...) のパラメータは次のとおりです。

パラメータ 必須 / デフォルト値 説明
connector_id str 必須 コネクター ID
database str None データベースを指定

.query(...)

InfluxQL ステートメントを実行します。パラメータは次のとおりです。

パラメータ 必須 / デフォルト値 説明
sql str 必須 InfluxQL ステートメント。バインドパラメータのプレースホルダを含めることができ、形式は $var_name
bind_params dict None バインドパラメータ
database str None 今回のクエリで指定するデータベース
dict_output bool False 各行のデータを {列名: 値} 形式に変換するかどうか
1
2
3
sql = 'SELECT * FROM demo WHERE city = $city LIMIT 5'
bind_params = {'city': 'hangzhou'}
result = db.query(sql, bind_params=bind_params, database='demo')
出力例
1
{'series': [{'columns': ['time', 'city', 'hostname', 'status', 'value'], 'name': 'demo', 'values': [['2018-12-31T16:00:10Z', 'hangzhou', 'webserver', 'UNKNOWN', 90], ['2018-12-31T16:00:20Z', 'hangzhou', 'jira', 'running', 40], ['2018-12-31T16:00:50Z', 'hangzhou', 'database', 'running', 50], ['2018-12-31T16:01:00Z', 'hangzhou', 'jira', 'stopped', 40], ['2018-12-31T16:02:00Z', 'hangzhou', 'rancher', 'UNKNOWN', 90]]}]}
例 2(戻り値を辞書形式に指定)
1
2
3
sql = 'SELECT * FROM demo WHERE city = $city LIMIT 5'
bind_params = {'city': 'hangzhou'}
result = db.query(sql, bind_params=bind_params, database='demo', dict_output=True)
出力例
1
{'series': [[{'city': 'hangzhou', 'hostname': 'webserver', 'status': 'UNKNOWN', 'time': '2018-12-31T16:00:10Z', 'value': 90}, {'city': 'hangzhou', 'hostname': 'jira', 'status': 'running', 'time': '2018-12-31T16:00:20Z', 'value': 40}, {'city': 'hangzhou', 'hostname': 'database', 'status': 'running', 'time': '2018-12-31T16:00:50Z', 'value': 50}, {'city': 'hangzhou', 'hostname': 'jira', 'status': 'stopped', 'time': '2018-12-31T16:01:00Z', 'value': 40}, {'city': 'hangzhou', 'hostname': 'rancher', 'status': 'UNKNOWN', 'time': '2018-12-31T16:02:00Z', 'value': 90}]]}

単一のクエリは dict を返します。ドライバが複数のステートメントに対して複数の結果セットを返す場合、このメソッドは list[dict] を返します。

.query2(...)

query2(...) メソッドも InfluxQL ステートメントの実行に使用されますが、パラメータプレースホルダが異なり、疑問符 ? をパラメータプレースホルダとして使用します。パラメータは次のとおりです。

パラメータ 必須 / デフォルト値 説明
sql str 必須 InfluxQL ステートメント。パラメータプレースホルダを含めることができます。
? はエスケープが必要なパラメータを示します。
?? はエスケープが不要なパラメータを示します
sql_params list None InfluxQL パラメータ
database str None 今回のクエリで指定するデータベース
dict_output bool False 各行のデータを {"列名": "値"} 形式に変換するかどうか
1
2
3
sql = 'SELECT * FROM ?? WHERE city = ? LIMIT 5'
sql_params = ['demo', 'hangzhou']
result = db.query2(sql, sql_params=sql_params, dict_output=True)

動的 SQL ステートメント

query2(...) は内部で DFF.SQL(...) を使用して SQL ステートメントを構築し、複雑な動的 SQL ステートメントの構築をサポートします。

例えば、WHERE IN (...) の値の数が不定の場合や、INSERT INTO ... VALUES ... によるデータの一括書き込みなどです。

詳細は スクリプト開発 / SQL 構築 DFF.SQL を参照してください。

.switch_database(...)

現在の操作オブジェクトが後続のリクエストで使用するデフォルトのデータベースを切り替えます。

パラメータ 必須 / デフォルト値 説明
database str 必須 データベース名
1
2
db.switch_database('archive')
result = db.query('SELECT * FROM demo LIMIT 5')

単一のクエリまたは書き込みにのみデータベースを指定する場合は、対応するメソッドの database パラメータを優先的に使用してください。

.write_point(...)

バージョン 1.1.13 で追加されました。

単一のデータポイントを書き込みます。パラメータは次のとおりです。

パラメータ 必須 / デフォルト値 説明
measurement str 必須 計測
fields dict{str: str/int/float/bool} 必須 フィールド
キー名は str である必要があります
キー値は str/int/float/bool にできます
tags dict{str: str} None タグ
キー名、キー値はどちらも str である必要があります
timestamp str/int None タイムスタンプ
ISO 形式、例:2020-01-01T01:02:03Z
UNIX タイムスタンプ、例:1577840523
database str None 今回の書き込みで指定するデータベース
1
2
3
fields = { 'cpu': 100, 'mem': 0.5 }
tags   = { 'host': 'web001' }
result = db.write_point(measurement='host_monitor', fields=fields, tags=tags)

.write_points(...)

バージョン 1.1.13 で追加されました。

データポイントを一括書き込みします。パラメータは次のとおりです。

パラメータ 必須 / デフォルト値 説明
points list 必須 データポイントの配列
points[#]['measurement'] str 必須 計測
points[#]['fields'] dict{str: str/int/float/bool} 必須 フィールド
キー名は str である必要があります
キー値は str/int/float/bool にできます
points[#]['tags'] dict{str: str} None タグ
キー名、キー値はどちらも str である必要があります
points[#]['time'] str/int None タイムスタンプ
ISO 形式、例:2020-01-01T01:02:03Z
UNIX タイムスタンプ、例:1577840523
database str None 今回の書き込みで指定するデータベース
1
2
3
4
5
6
7
8
points = [
    {
        'measurement': 'host_monitor',
        'fields'     : { 'cpu': 100, 'mem': 0.5 },
        'tags'       : { 'host': 'web001' },
    }
]
result = db.write_points(points)