开发者社区 > 云存储 > 正文

表格存储时序模型 SQL 如何查询多条时间线,案例中查询的是一条时间线?

表格存储时序模型 SQL 如何查询多条时间线,案例中查询的是一条时间线?
查询 _m_name : "basic_metric",_tags:{"host": "host001","region":"hangzhou"}
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou"
LIMIT 10;
现在我想执行批量查询如
_m_name : "basic_metric1",_tags:{"host": "host001","region":"hangzhou1"}
_m_name : "basic_metric2",_tags:{"host": "host002","region":"hangzhou2"}
_m_name : "basic_metric3",_tags:{"host": "host003","region":"hangzhou3"}

展开
收起
青城山下庄文杰 2023-10-26 18:21:50 388 4
4 条回答
写回答
取消 提交回答
  • 要查询多条时间线,您可以使用UNION ALL语句将多个查询的结果合并在一起。以下是一个示例:

    -- 查询基本指标1
    SELECT * FROM timeseries_table WHERE _m_name = "basic_metric1" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou1";
    
    -- 查询基本指标2
    SELECT * FROM timeseries_table WHERE _m_name = "basic_metric2" AND tag_value_at(_tags, "host") = "host002" AND tag_value_at(_tags, "region") = "hangzhou2";
    
    -- 查询基本指标3
    SELECT * FROM timeseries_table WHERE _m_name = "basic_metric3" AND tag_value_at(_tags, "host") = "host003" AND tag_value_at(_tags, "region") = "hangzhou3";
    
    -- 将三个查询的结果合并在一起
    SELECT * FROM (
        SELECT * FROM timeseries_table WHERE _m_name = "basic_metric1" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou1";
        SELECT * FROM timeseries_table WHERE _m_name = "basic_metric2" AND tag_value_at(_tags, "host") = "host002" AND tag_value_at(_tags, "region") = "hangzhou2";
        SELECT * FROM timeseries_table WHERE _m_name = "basic_metric3" AND tag_value_at(_tags, "host") = "host003" AND tag_value_at(_tags, "region") = "hangzhou3"
    ) AS results LIMIT 10;
    

    这个查询将会返回包含所有三个查询结果的一个列表,其中每个结果都是一个包含多个数据点的时间序列。注意,由于使用了UNION ALL语句,因此最终的结果可能会包含重复的记录。

    2023-10-27 10:32:06
    赞同 7 展开评论 打赏
  • 在表格存储时序模型中,你可以使用SQL的IN关键字来进行批量查询,其语法如下所示:

    SELECT * FROM timeseries_table WHERE _m_name IN ('basic_metric1', 'basic_metric2', 'basic_metric3') 
    AND tag_value_at(_tags, "host") = 'host001' AND tag_value_at(_tags, "region") = 'hangzhou';
    

    上述SQL语句将会查询名为“basic_metric1”,“basic_metric2”和“basic_metric3”的三条时间线上,标签值为"host": "host001", "region": "hangzhou"的所有数据。

    如果你想查询更多的时间线,只需要在IN关键字后的括号内添加更多的时间线名即可。注意,IN关键字后面的所有字符串必须放在引号中,以确保它们被视为字符串而不是数值或其他类型的表达式。
    注意,如果你想要查询的多个条件之间存在逻辑关系,你可以在WHERE子句中使用AND、OR、NOT等运算符进行组合。例如,如果你想查询名为“basic_metric1”和“basic_metric2”的两条时间线上,标签值为"host": "host001"或"host": "host002"的所有数据,你可以使用如下SQL语句:

    SELECT * FROM timeseries_table WHERE (_m_name IN ('basic_metric1', 'basic_metric2') 
    AND tag_value_at(_tags, "host") = 'host001' OR tag_value_at(_tags, "host") = 'host002');
    
    2023-10-27 10:32:06
    赞同 6 展开评论 打赏
  • 在阿里云的表格存储时序模型中,你可以使用BatchGetRow操作来查询多条时间线的数据。以下是一个示例:

    List<GetRowRequest> requests = new ArrayList<>();
    requests.add(new GetRowRequest("my_table", Arrays.asList("row_key1"), true));
    requests.add(new GetRowRequest("my_table", Arrays.asList("row_key2"), true));
    requests.add(new GetRowRequest("my_table", Arrays.asList("row_key3"), true));
    
    Response response = client.batchGetRow(requests);
    List<DataModel> dataModels = response.getDataModels();
    for (DataModel model : dataModels) {
        System.out.println(model);
    }
    

    在这个示例中,我们首先创建了一个包含多个请求的列表。每个请求都指定了要查询的时间线的名称和时间线的键。然后,我们将这个列表传递给batchGetRow方法,并得到一个响应对象。最后,我们可以从响应对象中获取查询结果。
    请注意,这个示例只是一个基本的示例,实际的查询可能需要考虑更多的因素,比如数据筛选、排序和分页等。

    2023-10-27 09:26:31
    赞同 7 展开评论 打赏
  • 在表格存储时序模型中,你可以使用SQL语句来查询多条时间线。例如,如果你想查询"_m_name"为"basic_metric1","_tags"为{"host": "host001","region":"hangzhou1"},"_m_name"为"basic_metric2","_tags"为{"host": "host002","region":"hangzhou2"},和"_m_name"为"basic_metric3","_tags"为{"host": "host003","region":"hangzhou3"}的三条时间线,你可以使用以下的SQL语句:

    SELECT * FROM timeseries_table WHERE (_m_name = 'basic_metric1' AND tag_value_at(_tags, 'host') = 'host001' AND tag_value_at(_tags, 'region') = 'hangzhou1') OR (_m_name = 'basic_metric2' AND tag_value_at(_tags, 'host') = 'host002' AND tag_value_at(_tags, 'region') = 'hangzhou2') OR (_m_name = 'basic_metric3' AND tag_value_at(_tags, 'host') = 'host003' AND tag_value_at(_tags, 'region') = 'hangzhou3');
    

    在这个SQL语句中,我们使用了OR条件来连接多个查询条件。这样,只要满足任何一个条件的数据都会被查询出来。

    2023-10-27 09:00:00
    赞同 5 展开评论 打赏

阿里云存储基于飞天盘古2.0分布式存储系统,产品多种多样,充分满足用户数据存储和迁移上云需求。

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载