从Influxdb中检索一个(最后一个)值

时间:2018-01-17 04:23:22

标签: json bash jq influxdb

我试图检索插入到Influxdb中的表中的最后一个值。我需要做的是然后通过HTTP将它发布到另一个系统。

我想在bash脚本中完成所有这些操作,但我也对Python开放。

 $ curl -sG 'https://influx.server:8086/query' --data-urlencode "db=iotaWatt" --data-urlencode "q=SELECT LAST(\"value\") FROM \"grid\" ORDER BY time DESC" | jq -r

{
  "results": [
    {
      "statement_id": 0,
      "series": [
        {
          "name": "grid",
          "columns": [
            "time",
            "last"
          ],
          "values": [
            [
              "2018-01-17T04:15:30Z",
              690.1
            ]
          ]
        }
      ]
    }
  ]
}

我所挣扎的是将这个值变成我可以使用的干净格式。我真的不想使用sed,我已经尝试了jq但它抱怨数据是字符串而不是索引:

jq: error (at <stdin>:1): Cannot index array with string "series"

有人有个好主意吗?

2 个答案:

答案 0 :(得分:1)

给出显示的JSON,jq查询:

.results[].series[].values[]

产生

[
  "2018-01-17T04:15:30Z",
  690.1
]

这似乎是您想要的输出,但从不熟悉Influxdb的人的角度来看,这些要求似乎非常不透明,因此您可能需要考虑一个变体,例如:

.results[-1].series[-1].values[-1]

在这种情况下会产生相同的结果。

如果您只想要原子值,只需将[]附加到上述任一查询中即可。

答案 1 :(得分:1)

卷曲到下方jq的管道

$ your_curl_stuff_here | jq '.results[].series[]|.name,.values[0][]'
"grid"
"2018-01-17T04:15:30Z"
690.1

结果可以存储到bash数组中并在以后使用。

$ results=( $(your_curl_stuff_here | jq '.results[].series[]|.name,.values[0][]') )
$ echo "${results[@]}"
"grid" "2018-01-17T04:15:30Z" 690.1
# Individual values could be accessed using "${results[0]}" and so, mind quotes

所有好: - )