试图找出值中的值对。
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.
所以它看起来像一个哈希,但是不是吗?关于如何使用数据结构的任何提示?
答案 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来查看允许对该对象进行哪些操作以访问其数据。