全部產品
Search
文件中心

Tablestore:自訂時間軸標識和作為主鍵的資料欄位

更新時間:Apr 22, 2025

時序模型的時間軸標識預設由度量名稱、資料來源和標籤組成,您可以通過自訂時間軸標識實現按照業務實際需要定義時間軸標識。時序表中通過時間軸標識和時間點來唯一確定一行時序資料,您可以通過為時間軸添加作為主鍵的資料欄位實現儲存兩行時間軸標識和時間點相同但時序資料不同的行資料。本文介紹如何自訂時間軸標識和作為主鍵的資料欄位。

注意事項

支援自訂時間軸標識和配置作為主鍵的資料欄位功能的地區包括華東1(杭州)、華東2(上海)、華北2(北京)和華北3(張家口)。如需使用該功能,請在上述地區下建立時序模型執行個體

使用情境

自訂時間軸標識

自訂時間軸標識的使用情境主要集中在需要對資料進行精確時間定位、區間查詢、趨勢分析和事件關聯的領域,以下是一些具體的使用案例:

  • 故障排查與根本原因分析。

    在 IT 營運和工業裝置監控中,自訂時間軸標識能夠協助精確標記故障發生的時間點,結合其他時序資料(如裝置狀態、日誌資訊),快速定位問題原因,進行根本原因分析。

  • 使用者行為分析。

    在互連網應用中,通過記錄使用者的登入時間、頁面瀏覽時間、操作序列等,自訂時間軸標識可以用來分析使用者活躍時段、會話時間長度、行為路徑,進而最佳化使用者體驗、個人化推薦內容。

  • 金融交易審計。

    在金融領域,每一筆交易都需要精確的時間戳記錄,自訂時間軸標識不僅用於確保交易的順序性和完整性,還用於反欺詐分析,如識別異常交易模式、追蹤資金流。

通過自訂時間軸標識,可以靈活地對時序資料進行分組、篩選和分析,滿足不同業務情境下對時序資料的精細管理與洞察需求。

時序表資料樣本

在監控工業裝置的溫度和濕度的情境下,時序表參見下表:

  • measurement、data_source、area 和 _tags 作為自訂時間軸標識的欄位,分別為度量名稱、資料來源、地區和標籤。

  • _time,為時間點。

  • temperature、humidity,為溫度和濕度。

measurement

data_source

area

_tags

_time

temperature

humidity

temperature

sensorA001

production

["sensor_type=typeA",

"sensor_version=1.0"]

1712476514000000

24.5

temperature

sensorA002

production

["sensor_type=typeA",

"sensor_version=1.0"]

1712476524000000

24.5

temperature

sensorA002

maintenance

["sensor_type=typeA",

"sensor_version=1.1"]

1712476534000000

23.0

humidity

sensorB001

production

["sensor_type=typeB",

"sensor_version=1.0"]

1712476514000000

0.55

humidity

sensorB001

maintenance

["sensor_type=typeB",

"sensor_version=1.0"]

1712476524000000

0.50

配置作為主鍵的資料欄位

當實際業務中存在時間軸標識和時間點相同但是時序資料不同的資料存放區需求時,您可以通過為時序表添加作為主鍵的資料欄位來實現。以下是一些具體的使用情境:

  • 事件關聯分析。

    在某些複雜的分析情境中,可能需要根據時間軸標識以外的資料欄位來關聯時序資料。添加作為主鍵的資料欄位可以快速定位到特定裝置在特定時間點的資料,適用於故障排查、行為分析等。

  • 多維度索引。

    在時序資料庫的進階應用程式中,如需對資料進行多維度查詢和過濾,添加作為主鍵的資料欄位可以加速查詢效率,特別是在處理海量資料時,能夠更精確地定位到感興趣的時序資料。

  • 多租戶時序資料管理。

    在為多個客戶提供時序資料存放區服務時,可能需要在時序資料表中加入租戶 ID 作為其中一個主鍵,與時間戳記一起構成複合主鍵,確保不同租戶的資料隔離和高效訪問。

時序表資料樣本

監控伺服器 CPU 的利用情況時要使用時間線標識定位每台伺服器,但是每台伺服器有多個核心,此時將核心編號 processor 添加為作為主鍵的資料欄位。時序表參見下表:

  • _m_name、_data_source 和 tags 作為自訂時間軸標識的欄位,分別為度量名稱、資料來源和標籤。

  • _time,為時間點。

  • processor,為伺服器的核心,是一個作為主鍵的資料欄位。

  • cpu_usage,為 cpu 使用率。

_m_name

_data_source

_tags

_time

processor

cpu_usage

cpu

host_1

["region=hangzhou"]

1712476524000000

0

10.0

cpu

host_1

["region=hangzhou"]

1712476524000000

1

10.0

cpu

host_1

["region=hangzhou"]

1712476524000000

2

10.0

使用方式

您可以通過Table Store控制台或者 SDK 自訂時間軸標識和作為主鍵的資料欄位。

進行自訂時間軸標識和作為主鍵的資料欄位操作前,您需要完成如下準備工作。

  • 使用阿里雲帳號或者具有Table Store操作許可權的 RAM 使用者進行操作。如果需要為 RAM 使用者授權Table Store操作許可權,請參見通過 RAM Policy 為 RAM 使用者授權進行配置。

    使用 SDK 方式進行操作時,如果當前無可用 AccessKey,您還需要為阿里雲帳號或者 RAM 使用者建立 AccessKey。具體操作,請參見建立 AccessKey

    警告

    阿里雲帳號的 AccessKey 泄露會威脅該帳號下所有資源的安全。為保證帳號安全,強烈建議您使用 RAM 使用者建立的 AccessKey,不要建立並使用阿里雲帳號的 AccessKey。

  • 已建立時序模型執行個體。具體操作,請參見建立時序模型執行個體

    重要

    如果要使用自訂時間軸標識或作為主鍵的資料欄位功能,請在華東1(杭州)、華東2(上海)、華北2(北京)或者華北3(張家口)地區下建立時序模型執行個體。

  • 使用 SDK 方式進行操作時,還需要初始化 TimeseriesClient。具體操作,請參見初始化 TimeseriesClient

自訂時間軸標識

時序模型的時間軸標識預設由度量名稱、資料來源和標籤組成,時間軸標識在時序表中對應的名稱分別為 _m_name、_data_source 和 _tags。其中標籤由多個字串類型的索引值對組成。

當時間軸標識的預設名稱不滿足您的業務使用需求時,您可以通過自訂時間軸標識使其更貼合實際應用情境,提高資料處理和分析的直觀性和效率。例如監控伺服器 CPU 的利用情況時使用時間線標識定位每一個 CPU 核心。自訂時間軸標識後,您仍然可以使用時間線標識的預設名稱進行資料操作。

要自訂時間軸標識,您需要首先在建立時序表時自訂時間軸標識,然後使用自訂時間軸標識寫入資料到時序表。具體使用流程如下:

使用控制台

  1. 在建立時序表時,自訂時間軸標識。具體操作,請參考時序表操作

  2. 使用自訂時間軸標識寫入時序資料到時序表。

    寫入資料到時序表時,用戶端中的自訂時間軸識別欄位會以標籤索引值對的形式傳遞給Table Store服務端,Table Store服務端會先從自訂時間軸識別欄位索引值對中提取出度量名稱和資料來源,剩餘索引值對作為時間軸標籤。具體操作,請參考寫入時序資料

    重要

    在建立時序表時,如果自訂的時間軸標識中未包含標籤欄位 _tags,但在寫入時序資料時,時間軸標識的索引值對中(在排除度量名稱、資料來源和自訂欄位後)仍存在其他剩餘索引值對,則該資料行將無法成功寫入。

  3. 讀取時序表中資料。

    1. 為時序表建立 SQL 映射關係。更多資訊,請參見建立多值模型映射關係

      1. 時序表管理頁面,單擊 SQL 查詢頁簽。

      2. 單擊 SQL 查詢頁簽下方左側,單擊時序模型執行個體名稱的“+”。

      3. 建立映射表的對話方塊中,按照如下說明配置映射表資訊。

        參數

        描述

        表名

        時序表名稱。

        映射表名

        映射表名稱。

        說明

        為時序表建立 SQL 映射關係時,系統會自動在映射表名前添加時序表名::的首碼。

        流量分析儲存查詢

        分析儲存功能主要用於時序資料長期儲存和分析情境。流量分析儲存(Analytical Store)功能,您可以低成本儲存時序資料以及快速查詢和分析時序資料。更多資訊,請參見 分析儲存

        系統預設關閉流量分析儲存查詢開關,請根據實際業務情境進行相應配置。

        • 如果不需要流量分析儲存來儲存與分析時序資料,流量分析儲存查詢保持預設配置即可。

        • 如果需要低成本儲存時序資料以及快速查詢和分析時序資料,請確保已建立分析儲存並開啟流量分析儲存查詢開關。

        重要
        • 支援分析儲存功能的地區包括華東1(杭州)、華東2(上海)、華北2(北京)和華北3(張家口)。如需流量分析儲存功能,請在上述地區下建立時序模型執行個體

        • 如果建立了流量分析儲存查詢的 SQL 映射表,則在刪除分析儲存時,您需要同時刪除分析儲存 SQL 映射表。否則會導致刪除分析儲存失敗。

      4. 單擊產生 SQL,系統會自動產生建立 SQL 映射關係的 SQL 陳述式。

        自訂時間軸標識後,在建立 SQL 映射關係時,需要將時間軸標識和作為主鍵的資料欄位設定為 SQL 映射表的主鍵。

      5. 單擊執行 SQL

    2. 使用 SELECT 語句查詢資料

      在 SQL 控制台輸入 SQL 陳述式,單擊執行 SQL

      以下樣本用於查詢時序表的映射表 cpu::ts1 中 cpu_usage 值超過 90.0 的時間軸資訊。

      SELECT `host`, `processor`, `_tags` , `_time` FROM `cpu::ts1` WHERE cpu_usage > 90.0;

使用 SDK

重要
  • Table StoreJava SDK從5.17.1版本開始支援自訂時間軸標識功能,Go SDK請使用最新版本,Python SDK從6.1.0版本開始支援。使用該功能時,請確保安裝了正確的SDK版本。

  • 在使用自訂時間軸標識寫入時序資料時,如果不需要添加度量名稱或資料來源,請將相應參數設定為空白。

此處以Java SDK為例介紹自訂時間軸標識的操作。

  1. 在建立時序表時,自訂時間軸標識。

    以下樣本用於建立一個不帶分析儲存的時序表,同時自訂時間軸標識。

    private static void createTimeseriesTable(TimeseriesClient client) {
        TimeseriesTableMeta timeseriesTableMeta = new TimeseriesTableMeta("<TIMESERIES_TABLE_NAME>");
        timeseriesTableMeta.setTimeseriesTableOptions(new TimeseriesTableOptions(-1));
        // 自訂時間軸表標識。度量名稱對應名稱為host,資料來源對應名稱為processor,標籤對應名稱為_tags。
        timeseriesTableMeta.addTimeseriesKey("host");
        timeseriesTableMeta.addTimeseriesKey("processor");
        timeseriesTableMeta.addTimeseriesKey("_tags");
        CreateTimeseriesTableRequest request = new CreateTimeseriesTableRequest(timeseriesTableMeta);
        request.setEnableAnalyticalStore(false);
        client.createTimeseriesTable(request);
    }
  2. 使用自訂時間軸標識寫入時序資料到時序表。

    寫入資料到時序表時,用戶端中的自訂時間軸識別欄位會以標籤索引值對的形式傳遞給Table Store服務端,Table Store服務端會先從自訂時間軸識別欄位索引值對中提取出度量名稱和資料來源,剩餘索引值對作為時間軸標籤。

    重要

    在建立時序表時,如果自訂的時間軸標識中未包含標籤欄位 _tags,但在寫入時序資料時,時間軸標識的索引值對中(在排除度量名稱、資料來源和自訂欄位後)仍存在其他剩餘索引值對,則該資料行將無法成功寫入。

    以下樣本用於使用自訂時間軸標識寫入 3 行時序資料到時序表中。

    private static void putTimeseriesData(TimeseriesClient client) {
        long timeInUs = System.currentTimeMillis() * 1000;
        List<TimeseriesRow> rows = new ArrayList<TimeseriesRow>();
        for (int i = 0; i < 3; i++) {
            Map<String, String> tags = new HashMap<>();
            // 添加自訂時間軸識別欄位
            tags.put("host", "host_" + i);
            tags.put("processor", String.valueOf(i));
            // 不屬於自訂識別欄位額的索引值對會添加到標籤中
            tags.put("region", "hangzhou");
            TimeseriesKey timeseriesKey = new TimeseriesKey("", "", tags);
            TimeseriesRow row = new TimeseriesRow(timeseriesKey, timeInUs);
            row.addField("cpu_usage", ColumnValue.fromDouble(10.0));
            row.addField("cpu_sys", ColumnValue.fromDouble(5.0));
            rows.add(row);
        }
        String tableName = "<TIMESERIES_TABLE_NAME>";
        PutTimeseriesDataRequest putTimeseriesDataRequest = new PutTimeseriesDataRequest(tableName);
        putTimeseriesDataRequest.setRows(rows);
        client.putTimeseriesData(putTimeseriesDataRequest);
    }

    資料寫入成功後,時序表中的時序資料如下:

    host

    processor

    _tags

    _time

    cpu_usage

    cpu_sys

    host_0

    0

    ["region=hangzhou"]

    1712476524000000

    10.0

    5.0

    host_1

    1

    ["region=hangzhou"]

    1712476524000000

    10.0

    5.0

    host_2

    2

    ["region=hangzhou"]

    1712476524000000

    10.0

    5.0

  3. 使用 SQL 讀取時序表中資料。

    1. 為時序表建立 SQL 映射關係。更多資訊,請參見建立多值模型映射關係

      自訂時間軸標識後,在建立 SQL 映射關係時,您需要將自訂時間軸標識和時間列設定為 SQL 映射表的主鍵。

      配置樣本如下:

      CREATE TABLE `cpu::ts1` (
          `host` VARCHAR(1024),
          `processor` VARCHAR(1024),
          `_tags` VARCHAR(1024),
          `_time` BIGINT(20),
          `cpu_usage` DOUBLE,
          `cpu_sys` DOUBLE,
          PRIMARY KEY(`host`,`processor`,`_tags`,`_time`)
      );
    2. 使用 SELECT 語句查詢資料

      以下樣本用於查詢時序表的映射表 cpu::ts1 中 cpu_usage 值超過 90.0 的時間軸資訊。

      SELECT `host`, `processor`, `_tags` , `_time` FROM `cpu::ts1` WHERE cpu_usage > 90.0;

配置作為主鍵的資料欄位

時序表中通過時間軸標識和時間點唯一確定一行時序資料,即不存在時間軸標識和時間點相同但是資料不同的時間軸。

當實際業務中存在時間軸標識和時間點相同但是時序資料不同的資料存放區需求時,您可以通過為時序表添加作為主鍵的資料欄位來實現。例如,監控伺服器 CPU 的利用情況時要使用時間線標識定位每台伺服器,但是每台伺服器有多個核心,此時即可將核心編號 processor 添加為作為主鍵的資料欄位。

要使用欄位主鍵,您需要首先在建立時序表時添加作為主鍵的資料欄位,然後寫入資料到時序表時配置作為主鍵的資料欄位的值。具體使用流程如下:

使用控制台

  1. 在建立時序表時,配置作為主鍵的資料欄位。具體操作,請參考時序表操作

  2. 寫入時序資料到時序表。

    寫入資料到時序表時,作為主鍵的資料欄位不可為空,使用作為主鍵的資料欄位能夠存入多行相同時間軸標識和時間點的時序資料。具體操作,請參考寫入時序資料

  3. 讀取時序表中資料。

    1. 為時序表建立 SQL 映射關係。更多資訊,請參見建立多值模型映射關係

      1. 時序表管理頁面,單擊 SQL 查詢頁簽。

      2. 單擊 SQL 查詢頁簽下方左側,單擊時序模型執行個體名稱的“+”。

      3. 建立映射表的對話方塊中,按照如下說明配置映射表資訊。

        參數

        描述

        表名

        時序表名稱

        映射表名

        映射表名稱

        說明

        為時序表建立 SQL 映射關係時,系統會自動在映射表名前添加時序表名::的首碼。

        流量分析儲存查詢

        分析儲存功能主要用於時序資料長期儲存和分析情境。流量分析儲存(Analytical Store)功能,您可以低成本儲存時序資料以及快速查詢和分析時序資料。更多資訊,請參見分析儲存

        系統預設關閉流量分析儲存查詢開關,請根據實際業務情境進行相應配置。

        • 如果不需要流量分析儲存來儲存與分析時序資料,流量分析儲存查詢保持預設配置即可。

        • 如果需要低成本儲存時序資料以及快速查詢和分析時序資料,請確保已建立分析儲存並開啟流量分析儲存查詢開關。

        重要
        • 支援分析儲存功能的地區包括華東1(杭州)、華東2(上海)、華北2(北京)和華北3(張家口)。如需流量分析儲存功能,請在上述地區下建立時序模型執行個體

        • 如果建立了流量分析儲存查詢的 SQL 映射表,則在刪除分析儲存時,您需要同時刪除分析儲存 SQL 映射表。否則會導致刪除分析儲存失敗。

      4. 單擊產生 SQL,系統會自動產生建立 SQL 映射關係的 SQL 陳述式。

        為時序表配置作為主鍵的資料欄位後,在建立 SQL 映射關係時,您需要將時間軸標識和作為主鍵的資料欄位設定為 SQL 映射表的主鍵。

      5. 單擊執行 SQL

    2. 使用 SELECT 語句查詢資料

      在 SQL 控制台輸入 SQL 陳述式,單擊執行 SQL

      以下樣本用於查詢時序表的映射表 cpu::ts1 中 cpu_usage 值超過 90.0 的時間軸資訊。

      SELECT `host`, `processor`, `_tags` , `_time` FROM `cpu::ts1` WHERE cpu_usage > 90.0;

使用 SDK

重要

Table StoreJava SDK從5.17.1版本開始支援配置作為主鍵的資料欄位功能,Go SDK請使用最新版本,Python SDK從6.1.0版本開始支援。使用該功能時,請確保安裝了正確的SDK版本。

此處以Java SDK為例介紹配置作為主鍵的資料欄位的操作。

  1. 在建立時序表時配置作為主鍵的資料欄位。

    以下樣本用於建立一個不帶分析儲存的時序表,同時為其配置作為主鍵的資料欄位。

    private static void createTimeseriesTable(TimeseriesClient client) {
        TimeseriesTableMeta timeseriesTableMeta = new TimeseriesTableMeta("<TIMESERIES_TABLE_NAME>");
        timeseriesTableMeta.setTimeseriesTableOptions(new TimeseriesTableOptions(-1));
        // 添加作為主鍵的資料欄位。
        timeseriesTableMeta.addFieldPrimaryKey("processor", PrimaryKeyType.INTEGER);
        CreateTimeseriesTableRequest request = new CreateTimeseriesTableRequest(timeseriesTableMeta);
        request.setEnableAnalyticalStore(false);
        client.createTimeseriesTable(request);
    }
  2. 寫入時序資料到時序表。

    寫入資料到時序表時,作為主鍵的資料欄位不可為空,使用作為主鍵的資料欄位能夠存入多行相同時間軸標識和時間點的時序資料。

    以下樣本用於向時序表中寫入 3 行相同的時間軸標識和時間點的時序資料。

    private static void putTimeseriesData(TimeseriesClient client) {
        long timeInUs = System.currentTimeMillis() * 1000;
        List<TimeseriesRow> rows = new ArrayList<TimeseriesRow>();
        for (int i = 0; i < 3; i++) {
            Map<String, String> tags = new HashMap<>();
            tags.put("region", "hangzhou");
            TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_" + i, tags);
            TimeseriesRow row = new TimeseriesRow(timeseriesKey, timeInUs);
            // 作為主鍵的資料欄位不可為空
            row.addField("processor", ColumnValue.fromLong(i));
            row.addField("cpu_usage", ColumnValue.fromDouble(10.0));
            row.addField("cpu_sys", ColumnValue.fromDouble(5.0));
            rows.add(row);
        }
        String tableName = "<TIMESERIES_TABLE_NAME>";
        PutTimeseriesDataRequest putTimeseriesDataRequest = new PutTimeseriesDataRequest(tableName);
        putTimeseriesDataRequest.setRows(rows);
        client.putTimeseriesData(putTimeseriesDataRequest);
    }

    資料寫入成功後,時序表中的時序資料如下:

    _m_name

    _data_source

    _tags

    _time

    processor

    cpu_usage

    cpu_sys

    cpu

    host_0

    ["region=hangzhou"]

    1712476524000000

    0

    10.0

    5.0

    cpu

    host_1

    ["region=hangzhou"]

    1712476524000000

    1

    10.0

    5.0

    cpu

    host_2

    ["region=hangzhou"]

    1712476524000000

    2

    10.0

    5.0

  3. 使用 SQL 讀取時序表中資料。

    1. 為時序表建立 SQL 映射關係。更多資訊,請參見建立多值模型映射關係

      為時序表配置作為主鍵的資料欄位後,在建立 SQL 映射關係時,您需要將時間軸標識和作為主鍵的資料欄位設定為 SQL 映射表的主鍵。

      配置樣本如下:

      CREATE TABLE `cpu::ts1` (
          `_m_name` VARCHAR(1024),
          `_data_source`  VARCHAR(1024),
          `_tags` VARCHAR(1024),
          `_time` BIGINT(20),
          `processor` BIGINT,
          `cpu_usage` DOUBLE,
          `cpu_sys` DOUBLE,
          PRIMARY KEY(`_m_name`,`_data_source`,`_tags`,`_time`,`processor`)
      );
    2. 使用 SELECT 語句查詢資料

      以下樣本用於查詢時序表的映射表 cpu::ts1 中 cpu_usage 值超過 90.0 的時間軸資訊。

      SELECT `_m_name`, `_data_source`, `_tags` , `_time`, `processor` FROM `cpu::ts1` WHERE cpu_usage > 90.0;