在Perl中循环从InfluxDB :: HTTP返回的数据结构

时间:2019-02-27 00:41:15

标签: perl influxdb

试图找出值中的值对。

my $influx = InfluxDB::HTTP->new(host => 'localhost', port => 8086);
my $query = 'SELECT mean(value) FROM db1.autogen.num1,db1.autogen.num2 WHERE time > now() - 1h GROUP BY time(1s) LIMIT 20';

my $res = $influx->query([$query], epoch => 's',);
print $res;

我得到的结果是:

Returned data: {"results":[{"statement_id":0,"series":[{"name":"num1","columns":["time","value"],"values":[[1550842812,114.098],[1550842812,114.084],[1550842812,114.07],[1550842812,114.055],[1550842812,114.041],[1550842813,114.027],[1550842813,114.012],[1550842813,113.998],[1550842813,113.984],[1550842813,113.969],[1550842814,113.955],[1550842814,113.941],[1550842814,113.926],[1550842814,113.911],[1550842814,113.897],[1550842815,113.883],[1550842815,113.868],[1550842815,113.854],[1550842815,113.84],[1550842815,113.825]]},{"name":"num2","columns":["time"│ ,"value"],"values":[[1550842812,11.358],[1550842812,11.373],[1550842812,11.388],[1550842812,11.402],[1550842812,11.416],[1550842813,11.431],[1550842813,11.445],[1550842813,11.459],[155084│ 2813,11.474],[1550842813,11.488],[1550842814,11.502],[1550842814,11.517],[1550842814,11.531],[1550842814,11.545],[1550842814,11.56],[1550842815,11.575],[1550842815,11.589],[1550842815,11.│ 604],[1550842815,11.618],[1550842815,11.632]]}]}]}

但是当我这样做时:

print $res->{results};

Object returned by call to InfluxDB::HTTP::query() at test.pl line 10 can't be used as <HASH> at test.pl line 12.

所以它看起来像一个哈希,但是不是吗?关于如何使用数据结构的任何提示?

https://metacpan.org/pod/InfluxDB::HTTP

2 个答案:

答案 0 :(得分:4)

文档中有一个标题为Return Values and Error Handling的部分,内容为:

  

Object::Result是从子例程返回数据的依据。

我想如果这是指向Object::Result文档的链接或包含使用返回的对象的更好示例的帮助,将会更有用。

但是查看源代码,我看到结果对象是这样创建的:

result {
    raw         { return $response; }
    data        { return $data; }
    results     { return $data->{results}; }
    request_id  { return $response->header('Request-Id'); }
    <STR>       { return "Returned data: $content"; }
    <BOOL>      { return 1; }
}

我想从中可以从$res->data$res->results获取所需的实际数据-两者都将返回哈希引用。或者,如果您想要原始查询响应,则可以使用$res->raw

我认为您想要的值数据是$res->results->[0]{series}[0]{values}

哦,以后,query()方法的文档说:

  

如果返回的对象评估为true,表明查询成功,则返回的对象的data属性包含InfluxDB的整个响应作为Perl哈希值。此外,属性request_id提供了InfluxDB在HTTP响应标头中设置的请求标识符。例如,这对于将请求与日志文件相关联很有用。

虽然没有提到results属性。

答案 1 :(得分:1)

Object returned by call to InfluxDB::HTTP::query() ... can't be used as <HASH>$res是对象的线索。 Consult the relevant API来查看允许对该对象进行哪些操作以访问其数据。