Skip to content

스크립트 개발 / 커넥터 객체 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)