用于以毫秒分辨率查询TSDB的Java API和代码

时间:2015-11-09 13:23:35

标签: opentsdb

我必须以毫秒精度查询TSDB。默认情况下,使用TDSBQuery(通过TSDB.newQuery()获得)时,此要求未得到满足。我试过TSQuery,但它没有用。返回的结果远远超过HTTP查询API返回的结果(带来了我需要的正确数据): http://localhost:9999/api/query?start=1197849600.001&end=1197849882.000&msResolution=true&m=sum:CP101_X&ms。 您能否帮助您了解如何使用Java API实现毫秒精度查询?

谢谢,   问候,  林

我使用了以下Java代码:

TSQuery q = getMetricForValidate();
 q.validateAndSetQuery();
Query[] queries = q.buildQueries(tsdb);
         for (int i = 0; i < queries.length; i++)
            {
                DataPoints[] dps = queries[i].run();
                if (dps.length > 0)
                {
                    for (DataPoint dp : dps[0])
                    {
                        System.out.println(dp.timestamp());
                    }
                }

            }


 private static TSQuery getMetricForValidate()
    {
        final TSQuery query = new TSQuery();
        query.setStart("119784960.0001");
        query.setEnd("1197849882.000");
        query.setMsResolution(true);

        final ArrayList<TSSubQuery> subs = new ArrayList<TSSubQuery>(1);
        subs.add(getSubMetricForValidate());
        query.setQueries(subs);

        return query;
    }

    public static TSSubQuery getSubMetricForValidate()
    {
        final TSSubQuery sub = new TSSubQuery();
        sub.setAggregator("sum");
        sub.setMetric("01CP101_X");
        sub.setRate(false);
        return sub;
    }

1 个答案:

答案 0 :(得分:0)

在调试TSDMain类时,我发现毫秒级的过滤不是在数据库级别执行,而是在HTTPJsonSerializer的客户端代码中执行。我相信这是目前支持的实施。是否还有其他解决方案? 问候,  林