Lewati ke isi

Pengembangan Skrip / Objek Konektor DFF.CONN / InfluxDB

Objek operasi Konektor InfluxDB adalah pembungkus dari paket pihak ketiga Python influxdb (versi 5.3.1), yang terutama menyediakan metode untuk kueri dan penulisan InfluxDB. Konektor ini kompatibel dengan database berikut:

  • Alibaba Cloud Time Series Database edisi InfluxDB

Konektor ini terhubung melalui protokol HTTP

Parameter DFF.CONN(...) adalah sebagai berikut:

Parameter Tipe Wajib / Nilai Default Deskripsi
connector_id str Wajib ID Konektor
database str None Menentukan database

.query(...)

Menjalankan pernyataan InfluxQL, parameter sebagai berikut:

Parameter Tipe Wajib / Nilai Default Deskripsi
sql str Wajib Pernyataan InfluxQL, dapat berisi placeholder parameter terikat, dalam bentuk $var_name
bind_params dict None Parameter terikat
database str None Menentukan database untuk kueri ini
dict_output bool False Apakah akan mengonversi setiap baris data menjadi bentuk {nama_kolom: nilai}
Contoh
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')
Contoh Output
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]]}]}
Contoh 2 (menentukan hasil yang dikembalikan dalam format dict)
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)
Contoh Output
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}]]}

Satu kueri mengembalikan dict; ketika driver mengembalikan beberapa kumpulan hasil untuk beberapa pernyataan, metode ini mengembalikan list[dict].

.query2(...)

Metode query2(...) juga digunakan untuk menjalankan pernyataan InfluxQL, tetapi placeholder parameternya berbeda, menggunakan tanda tanya ? sebagai placeholder parameter. Parameternya adalah sebagai berikut:

Parameter Tipe Wajib / Nilai Default Deskripsi
sql str Wajib Pernyataan InfluxQL, dapat berisi placeholder parameter.
? menunjukkan parameter yang perlu di-escape;
?? menunjukkan parameter yang tidak perlu di-escape
sql_params list None Parameter InfluxQL
database str None Menentukan database untuk kueri ini
dict_output bool False Apakah akan mengonversi setiap baris data menjadi bentuk {"nama_kolom": "nilai"}
Contoh
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)

Pernyataan SQL Dinamis

query2(...) secara internal menggunakan DFF.SQL(...) untuk menyusun pernyataan SQL dan mendukung penyusunan pernyataan SQL yang kompleks dan dinamis.

Seperti nilai yang jumlahnya tidak pasti pada WHERE IN (...), atau INSERT INTO ... VALUES ... untuk menulis data secara batch, dan sebagainya.

Untuk detail, silakan lihat Pengembangan Skrip / Konstruksi SQL DFF.SQL

.switch_database(...)

Mengalihkan database default yang digunakan oleh permintaan berikutnya pada objek operasi saat ini.

Parameter Tipe Wajib / Nilai Default Deskripsi
database str Wajib Nama database
Contoh
1
2
db.switch_database('archive')
result = db.query('SELECT * FROM demo LIMIT 5')

Jika hanya perlu menentukan database untuk satu kueri atau penulisan, utamakan penggunaan parameter database pada metode yang bersangkutan.

.write_point(...)

Ditambahkan pada versi 1.1.13

Menulis satu titik data. Parameternya adalah sebagai berikut:

Parameter Tipe Wajib / Nilai Default Deskripsi
measurement str Wajib Kumpulan metrik
fields dict{str: str/int/float/bool} Wajib Field
Nama kunci harus berupa str
Nilai kunci dapat berupa str/int/float/bool
tags dict{str: str} None Tag
Nama kunci dan nilai kunci harus berupa str
timestamp str/int None Waktu
Format ISO, misalnya:2020-01-01T01:02:03Z
Stempel waktu UNIX misalnya:1577840523
database str None Menentukan database untuk penulisan ini
Contoh
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(...)

Ditambahkan pada versi 1.1.13

Menulis titik data secara batch. Parameternya adalah sebagai berikut:

Parameter Tipe Wajib / Nilai Default Deskripsi
points list Wajib Array titik data
points[#]['measurement'] str Wajib Kumpulan metrik
points[#]['fields'] dict{str: str/int/float/bool} Wajib Field
Nama kunci harus berupa str
Nilai kunci dapat berupa str/int/float/bool
points[#]['tags'] dict{str: str} None Tag
Nama kunci dan nilai kunci harus berupa str
points[#]['time'] str/int None Waktu
Format ISO, misalnya:2020-01-01T01:02:03Z
Stempel waktu UNIX misalnya:1577840523
database str None Menentukan database untuk penulisan ini
Contoh
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)