如何从 InfluxDB 的 HTTP API 获取 CSV 而不是 JSON?

How can you get CSV instead of JSON from the HTTP API of InfluxDB?

我想在商业智能的上下文中使用 influxdb: ETL,连接来自其他数据库的数据,创建实时仪表板。 现在,我们正在使用标准的 BI 工具,例如 QLIK 或 Microsoft PowerBI。

根据文档,应该使用 HTTP API 进行查询 (https://docs.influxdata.com/influxdb/v1.2/guides/querying_data/) 我的问题是 API 的输出似乎只有 JSON。这意味着每个分析师首先必须弄清楚如何将 JSON 转换为 table 格式,然后再加入其他数据等

是否可以告诉 API 生成类似 csv 的 table 输出? 您对使用哪些工具来制作好的仪表板有什么建议吗?我尝试了 grafana,但在加入其他数据时似乎达不到要求。

您可以在 curl 中使用 -H "Accept: application/csv" 来获得 CSV 格式的回复。例如:

$ curl -G 'http://localhost:8086/query' --data-urlencode "db=my_db" --data-urlencode "q=SELECT * FROM \"cpu\"" -H "Accept: application/csv"
name,tags,time,host,region,value
cpu,,1493031640435991638,serverA,us_west,0.64

您可以使用 jq 将 JSON 输出转换为 CSV,如下所示,这还允许您获取 RFC3339 格式的时间戳:

jq -r "(.results[0].series[0].columns), (.results[0].series[0].values[]) | @csv"

给出输出

"time","ppm","T"
"2019-01-17T19:45:00Z",864.5,18.54
"2019-01-17T19:50:00Z",861.4,18.545
"2019-01-17T19:55:00Z",866.2,18.5
"2019-01-17T20:00:00Z",863.9,18.47

并且有效,因为:

  • (.results[0].series[0].columns) 获取列名作为数组
  • , 连接输出
  • (.results[0].series[0].values[]) 获取数据值作为数组
  • | @csv 使用 jq csv 格式化程序
  • -r 用于获取原始输出

更多资源: