日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

預降采樣

預降采樣可以在數據寫入時就按指定時間粒度對數據進行預計算并單獨存儲,降采樣查詢時可以自動查詢匹配到的預降采樣數據,以降低訪問延遲。本文介紹預降采樣的概念,創建和管理預降采樣規則的方法,查詢預降采樣數據的方法,以及預降采樣的最佳實踐。

前提條件

時序引擎版本為3.4.19以上。

說明

如何查看或升級時序引擎版本,請參見時序引擎版本說明升級小版本。

功能介紹

預降采樣

預降采樣是一種預計算的方法。在數據寫入時根據配置的預降采樣規則將數據降低精度后單獨存儲,查詢時按查詢條件中指定的降采樣精度自動查詢最接近預降采樣精度的數據,然后交由執行引擎進行后續處理,以減少實時查詢需要計算的數據量,降低訪問延遲。

與連續查詢相比,預降采樣主要有以下優勢:

  • 寫入即可見,無需連續查詢的執行等待時間。

  • 性能高,對于寫入性能無影響,寫入時實時轉存數據。

  • 預降采樣數據和原始數據存儲在同一張表中,預降采樣查詢時自動匹配最佳規則的數據,規則不匹配時,自動切換到原始數據查詢。

預降采樣規則

預降采樣規則定義了預降采樣的時間粒度和數據的聚合方式。例如,假設1分鐘產生一條原始數據,預降采樣規則可以定義按1小時數據的平均值進行預降采樣。預降采樣規則分為數據庫級別的預降采樣規則和表級別預降采樣規則,它們都可以實現預降采樣,但有部分區別,具體請參見下圖。

image

創建預降采樣規則

重要

預降采樣規則對于之前已經寫入的數據不生效。

創建表級別的預降采樣規則(SQL方式)

示例

  • 設置預降采樣精度為1小時,并對預降采樣周期執行sum和max預計算。

    CREATE PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `max`) ON sensor;
  • 設置預降采樣的數據有效期(TTL)為90天。

    CREATE PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `max`) TTL `90d` ON sensor;

語法參考

CREATE PREDOWNSAMPLE

創建數據庫級別的預降采樣規則(API方式)

請求路徑和方法

請求路徑

請求方法

描述

/api/database

  • POST

  • PUT

為指定數據庫創建預降采樣規則。

如果數據庫已經存在(例如默認數據庫default),請使用PUT方法來更新預降采樣規則。

如果想在創建數據庫時,同時創建預降采樣規則,請使用POST方法。

請求參數

名稱

是否必需

描述

name

數據庫名稱。 例如:default。

downsampleRules

預降采樣規則列表,格式為JSON。每次更新規則時為全量更新。

預降采樣規則參數

名稱

是否必需

描述

舉例

aggregator

聚合函數。

取值:sum、count、max、min、first、last、median。

關于聚合函數的詳情,請參見CREATE PREDOWNSAMPLE

重要
  • 不支持直接使用avg。如需計算平均值,請使用count和sum,時序引擎會自動匹配count和sum的值進行計算。

  • 由于實現原理的限制,在覆蓋寫的場景下,sum/count算子可能會出現數據重復累加導致結果不精確,在無覆蓋寫的場景下可以放心使用。

"aggregator": "sum"

intervals

預降采樣的時間粒度列表,聚合時間窗口列表。支持的單位:s代表秒,m代表分鐘,h代表小時,d代表天。

"intervals": [ "10m","1h" ],表示按10分鐘和1小時分別進行預降采樣。

請求示例

PUT /api/database

{
    "name": "default",
    "downsampleRules": {
        "rules": [
            {
                "aggregator": "sum",
                "intervals": [
                    "1m",
                    "1h"
                ]
            },
            {
                "aggregator": "max",
                "intervals": [
                    "1m",
                    "1h"
                ]
            }
        ]
    }
}

響應說明

響應狀態碼為200。

查詢預降采樣規則

數據庫級別的預降采樣規則和表級別的預降采樣規則的查詢方法不同。數據庫級別的預降采樣規則需要通過API查詢,表級別的預降采樣規則需要通過SQL查詢。

查詢表級別的預降采樣規則(SQL方式)

示例

  • 查詢數據庫所有的預降采樣規則。

    SHOW PREDOWNSAMPLES;
  • 查詢指定數據表sensor的預降采樣規則。

    SHOW PREDOWNSAMPLES ON sensor;

語法參考

SHOW PREDOWNSAMPLES

查詢數據庫級別的預降采樣規則(API方式)

請求路徑和方法

請求路徑

請求方法

描述

/api/database

GET

查詢已經創建的預降采樣規則。

返回示例

[{
    "name": "default",
    "downsampleRules": {
        "rules": [
            {
                "aggregator": "sum",
                "intervals": [
                    "1m",
                    "1h"
                ]
            },
            {
                "aggregator": "max",
                "intervals": [
                    "1m",
                    "1h"
                ]
            }
        ]
    }
}]

響應說明

響應狀態碼為204。

刪除預降采樣規則

數據庫級別的預降采樣規則和表級別的預降采樣規則的刪除方法不同。數據庫級別的預降采樣規則需要通過API刪除,表級別的預降采樣規則需要通過SQL刪除。

重要

刪除預降采樣規則后,已經生效的預降采樣數據不會立即被刪除,但在查詢時不會命中已經刪除的預降采樣數據。預降采樣的數據會在數據過期后(即超過TTL后)自動刪除。

刪除表級別的預降采樣規則(SQL方式)

示例

DROP PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `max`) ON sensor;

語法參考

DROP PREDOWNSAMPLE

刪除數據庫級別的預降采樣規則(API方式)

刪除數據庫級別的預降采樣規則,請求路徑、請求方法、請求參數和響應說明,與創建數據庫級別的預降采樣規則相同,區別為需要將downsampleRules的值置為空。請求路徑等詳細信息,請參見創建數據庫級別的預降采樣規則(API方式)。

請求示例

PUT /api/database

{
    "name": "default",
    "downsampleRules": {
    }
}

查詢預降采樣數據

預降采樣數據查詢的匹配原則

  • 當同時存在數據庫級別規則和表級別規則時,預降采樣查詢數據時優先匹配表級別規則。

  • 當查詢請求指定的降采樣粒度與預降采樣數據的時間粒度不能精確匹配時,時序引擎會自動查詢最優的預降采樣粒度。推薦設置預降采樣時間粒度為1m、10m、1h、1d,可以滿足絕大多數的降采樣查詢場景。

    說明

    最優的預降采樣粒度是指能夠整除查詢請求的降采樣粒度的最大值。例如,預降采樣數據的時間粒度有1m、5m、8m和15m,查詢請求的降采樣粒度為10m,則最優預降采樣粒度為5m。

  • 當沒有滿足條件的預降采樣時間粒度時,從原始數據中進行降采樣查詢。

查詢方法

通過SQL或者兼容時間序列數據庫TSDB的接口都可以查詢預降采樣數據。推薦使用SQL查詢。如果是已有的openTSDB應用或時間序列數據庫TSDB應用,可以選擇TSDB兼容查詢。

SQL查詢預降采樣數據

默認情況下,降采樣查詢數據是從原始數據中進行查詢。如果要從預降采樣數據中查詢數據需要在查詢語句中使用Hint(/*+ PREDOWNSAMPLE */)。

SELECT /*+ PREDOWNSAMPLE */ sum(temperature) from sensor
WHERE time >= 1619074800000 AND time <= 1619085600000
SAMPLE BY 1h;

TSDB兼容查詢預降采樣數據

兼容時間序列數據庫TSDB的接口支持通過API多值查詢、API單值查詢、SDK查詢三種方式查詢預降采樣數據。

SDK多值查詢預降采樣數據

查詢降采樣數據時,需要在MultiFieldSubQuery Builder設定downsampleDataSource參數。

示例

long startTime = 1619074800000L;
long endTime = 1619085600000L;
final String metric = "wind";
final String field = "speed";
MultiFieldSubQueryDetails fieldSubQueryDetails = MultiFieldSubQueryDetails
        .field(field)
        .aggregator(Aggregator.SUM)
        .downsample("1h-sum")
        .build();
MultiFieldSubQuery subQuery = MultiFieldSubQuery
        .metric(metric)
        .fieldsInfo(fieldSubQueryDetails)
        // 從預降采樣查詢
        .downsampleDataSource(DownsampleDataSource.DOWNSAMPLE)
        .build();
MultiFieldQuery query = MultiFieldQuery.
        start(startTime).
        end(endTime).
        sub(subQuery).
        build();
List<MultiFieldQueryResult> result = tsdb.multiFieldQuery(query); 

參數說明

DownsampleDataSource 參數的取值說明:

  • DOWNSAMPLE:預降采樣數據查詢。

  • RAW:原始數據查詢。如果參數沒有被指定,默認為RAW。

SDK多值的更多內容,請參見SDK多值讀取。

API多值查詢預降采樣數據

使用API進行多值查詢時,添加downsampleSource參數并定義參數為downsample,即可查詢預降采樣數據。具體操作,請參見多值數據查詢。

請求路徑和方法

請求路徑

請求方法

描述

/api/mquery

GET

查詢預降采樣數據。

請求參數

名稱

是否必須

描述

示例

downsampleSource

指定查詢數據源。取值:

  • downsample:預降采樣數據。

  • raw:原始數據。默認值。

downsample

請求示例

POST /api/mquery

{
  "start": 1346846400000, 
  "end": 1346846402000,
    "queries": [
        {
            "downsampleDataSource" : "downsample",
            "metric": "wind",
            "fields" : [
                {
                    "field" : "speed",
                    "aggregator" : "none",
                    "downsample" : "1h-sum"
                }
            ],
                      "tags":{
                    "sensor":"IOTE_8859_0002"
                  }
        }
    ]
}

預降采樣的最佳配置

秒級采樣頻率場景

對于秒級采樣頻率的場景,推薦配置1m、1h、1d粒度的預降采樣規則來滿足任意分鐘、任意小時、任意天級別的降采樣查詢需求。

預降采樣規則的示例

配置sum、count、min、max4種常用聚合函數在1m、1h、1d粒度的預降采樣規則。

CREATE PREDOWNSAMPLE `1m` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;
CREATE PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;
CREATE PREDOWNSAMPLE `1d` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;

預降采樣查詢的示例

  • 基于分鐘粒度的預降采樣規則,滿足任意分鐘級別的降采樣查詢。

    SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor
    WHERE time >= 1619074800000 AND time <= 1619085600000
    SAMPLE BY <N>m;
  • 基于小時粒度的預降采樣規則,滿足任意小時級別的降采樣查詢。

    SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor
    WHERE time >= 1619074800000 AND time <= 1619085600000
    SAMPLE BY <N>h;
  • 基于天粒度的預降采樣規則,滿足任意天級別的降采樣查詢。

    SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor
    WHERE time >= 1619074800000 AND time <= 1619600400000
    SAMPLE BY <N>d;

分鐘級采樣頻率場景

對于分鐘級采樣頻率的場景,推薦配置1h、1d粒度的預降采樣規則來滿足任意小時、任意天級別的降采樣查詢需求。

預降采樣規則的示例

配置sum、count、min、max4種常用聚合函數在1h、1d粒度的預降采樣規則。

CREATE PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;
CREATE PREDOWNSAMPLE `1d` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;

預降采樣查詢的示例

  • 基于小時粒度的預降采樣規則,滿足任意小時級別的降采樣查詢。

    SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor
    WHERE time >= 1619074800000 AND time <= 1619085600000
    SAMPLE BY <N>h;
  • 基于天粒度的預降采樣規則,滿足任意天級別的降采樣查詢。

    SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor
    WHERE time >= 1619074800000 AND time <= 1619600400000
    SAMPLE BY <N>d;