>source

python3을 사용하여 InfluxDBv2 (2.0.2)에서 데이터를 쿼리하려고합니다. 쿼리는 유동적이며 InfluxDB 내에서 잘 작동합니다 (데이터를 잘 표시합니다). 동일한 VM (Ubuntu 18.04) 및 호스트 머신 (Windows10 Jupyter python-kernel = python3) 내에서 실행하려고했습니다.

!pip install influxdb-client
!pip install pandas
import pandas as pd
from influxdb_client import InfluxDBClient
client = InfluxDBClient(url="http://192.168.1.55:9999", token="RQrupr_Za863NcxjbWDWpVWgdgsgshwawkfYuPrc02tTvwCxwYOHywb_huoK4EttYY4pPOPr3Vcfv-7xo8cBlldw==", org="bim")
query_api=client.query_api()
data_frame = query_api.query_data_frame('from(bucket:"manager") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "mqtt_consumer") |> filter(fn: (r) => r["_field"] == "timestamp") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: "mean")')
data_frame.head()
[email protected]:~$ python qr.py
Traceback (most recent call last):
  File "qr.py", line 8, in <module>
    data_frame = query_api.query_data_frame('from(bucket:"manager") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "mqtt_consumer") |> filter(fn: (r) => r["_field"] == "timestamp") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: "mean")')
  File "/home//.local/lib/python3.6/site-packages/influxdb_client/client/query_api.py", line 116, in query_data_frame
    _generator = self.query_data_frame_stream(query, org=org, data_frame_index=data_frame_index)
  File "/home/.local/lib/python3.6/site-packages/influxdb_client/client/query_api.py", line 141, in query_data_frame_stream
    async_req=False, _preload_content=False, _return_http_data_only=False)
  File "/home/.local/lib/python3.6/site-packages/influxdb_client/service/query_service.py", line 260, in post_query
    (data) = self.post_query_with_http_info(**kwargs)  # noqa: E501
  File "/home/.local/lib/python3.6/site-packages/influxdb_client/service/query_service.py", line 355, in post_query_with_http_info
    urlopen_kw=urlopen_kw)
  File "/home/.local/lib/python3.6/site-packages/influxdb_client/api_client.py", line 345, in call_api
    _preload_content, _request_timeout, urlopen_kw)
  File "/home/.local/lib/python3.6/site-packages/influxdb_client/api_client.py", line 174, in __call_api
    _request_timeout=_request_timeout, **urlopen_kw)
  File "/home/.local/lib/python3.6/site-packages/influxdb_client/api_client.py", line 392, in request
    **urlopen_kw)
  File "/home/.local/lib/python3.6/site-packages/influxdb_client/rest.py", line 309, in POST
    **urlopen_kw)
  File "/home/.local/lib/python3.6/site-packages/influxdb_client/rest.py", line 252, in request
    raise ApiException(http_resp=r)
influxdb_client.rest.ApiException: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json; charset=utf-8', 'Vary': 'Accept-Encoding', 'X-Platform-Error-Code': 'invalid', 'Date': 'Fri, 18 Dec 2020 08:06:28 GMT', 'Transfer-Encoding': 'chunked'})
HTTP response body: b'{"code":"invalid","message":"error @1:219-1:220: undefined identifier v"}'

내가 뭔가를 놓치고 있습니까? 이 공식 사이트의 예를 따랐습니다 https://github.com/influxdata/influxdb-client-python#pandas-dataframe

  • 답변 # 1

    오류를 읽었습니까?

    {"code":"invalid","message":"error @1:219-1:220: undefined identifier v"}
    
    

    귀하의 쿼리는

    from(bucket:"manager") |> 
    range(start: v.timeRangeStart, stop: v.timeRangeStop) |> 
    filter(fn: (r) => r["_measurement"] == "mqtt_consumer") |> 
    filter(fn: (r) => r["_field"] == "timestamp") |> 
    aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> 
    yield(name: "mean")
    
    

    아직 당신은 정의하지 않습니다 v 에 사용되는 변수 rangeaggregateWindow 어떤 식 으로든 조항.

    UI가이를 정의하고 InfluxDB 서버로 전달하기 전에 쿼리로 대체하기 때문에 다른 InfluxDB 클라이언트에서 작동 할 수 있습니다.

관련 자료

  • 이전 이미지를 게시물로 게시하는 방법, Kotlin + FireStore
  • 다음 for loop - 계수 및 변수의 R 데이터 프레임에서 공식 생성