全部產品
Search
文件中心

Tablestore:離線批量讀取資料

更新時間:Jun 30, 2024

Table Store提供了BulkExport介面用於在巨量資料情境下批量讀取資料表中的資料。資料寫入到資料表後,您可以根據指定條件進行資料讀取。

前提條件

  • 已初始化OTSClient。具體操作,請參見初始化OTSClient

  • 已建立資料表並寫入資料。

參數

參數

說明

tableName

資料表名稱。

inclusiveStartPrimaryKey

本次批量讀取的起始主鍵和結束主鍵,起始主鍵和結束主鍵需要是有效主鍵或者是由INF_MIN和INF_MAX類型組成的虛擬點,虛擬點的列數必須與主鍵相同。

其中INF_MIN表示無限小,任何類型的值都比它大;INF_MAX表示無限大,任何類型的值都比它小。

  • inclusiveStartPrimaryKey表示起始主鍵,如果該行存在,則返回結果中一定會包含此行。

  • exclusiveEndPrimaryKey表示結束主鍵,無論該行是否存在,返回結果中都不會包含此行。

資料表中的行按主鍵從小到大排序,讀取範圍是一個左閉右開的區間,正序讀取時,返回的是大於等於起始主鍵且小於結束主鍵的所有的行。

exclusiveEndPrimaryKey

columnsToGet

讀取的列集合,列名可以是主鍵列或屬性列。

  • 如果不設定返回的列名,則返回整行資料。

  • 如果設定了返回的列名,當某行中指定的列均不存在時,則不返回該行,即傳回值為null;當某行中存在部分指定的列時,則返回該行且只返回存在的列。

說明
  • 查詢一行資料時,預設返回此行所有列的資料。如果需要只返回特定列,可以通過設定columnsToGet參數限制。如果將col0和col1加入到columnsToGet中,則只返回col0和col1列的值。

  • 如果某行資料的主鍵屬於讀取範圍,但是該行資料不包含指定返回的列,則返回結果中不包含該行資料。

  • 當columnsToGet和filter同時使用時,執行順序是先擷取columnsToGet指定的列,再在返回的列中進行條件過濾。

filter

使用過濾器,在服務端對讀取結果再進行一次過濾,只返回符合過濾器中條件的資料行。更多資訊,請參見過濾器

說明

當columnsToGet和filter同時使用時,執行順序是先擷取columnsToGet指定的列,再在返回的列中進行條件過濾。

dataBlockType

此次讀取請求的返回資料的格式類型。可選項包括PlainBuffer和SimpleRowMatrix。

樣本

以下樣本用於批量讀取指定範圍內的資料。

private static void bulkExport(SyncClient client, String start, String end){
    // 構造起始主鍵。
    PrimaryKeyBuilder startPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    startPrimaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(String.valueOf(start)));
    PrimaryKey startPrimaryKey = startPrimaryKeyBuilder.build();

    // 構造結束主鍵。
    PrimaryKeyBuilder endPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    endPrimaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(String.valueOf(end)));
    PrimaryKey endPrimaryKey = endPrimaryKeyBuilder.build();

    // 建立bulkExportRequest。
    BulkExportRequest bulkExportRequest = new BulkExportRequest();
    // 建立bulkExportQueryCriteria。
    BulkExportQueryCriteria bulkExportQueryCriteria = new BulkExportQueryCriteria("<TABLE_NAME>");

    bulkExportQueryCriteria.setInclusiveStartPrimaryKey(startPrimaryKey);
    bulkExportQueryCriteria.setExclusiveEndPrimaryKey(endPrimaryKey);
    //使用DBT_PLAIN_BUFFER編碼方式。
    bulkExportQueryCriteria.setDataBlockType(DataBlockType.DBT_PLAIN_BUFFER);
    //如果需要使用DBT_SIMPLE_ROW_MATRIX編碼方式時,請使用以下代碼配置。
    // bulkExportQueryCriteria.setDataBlockType(DataBlockType.DBT_SIMPLE_ROW_MATRIX);
    bulkExportQueryCriteria.addColumnsToGet("pk");
    bulkExportQueryCriteria.addColumnsToGet("DC1");
    bulkExportQueryCriteria.addColumnsToGet("DC2");

    bulkExportRequest.setBulkExportQueryCriteria(bulkExportQueryCriteria);
    // 擷取bulkExportResponse。
    BulkExportResponse bulkExportResponse = client.bulkExport(bulkExportRequest);
    
    // 如果設定DataBlockType為DBT_SIMPLE_ROW_MATRIX,則需要使用以下代碼進行結果列印。
    //{
    //    SimpleRowMatrixBlockParser parser = new SimpleRowMatrixBlockParser(bulkExportResponse.getRows());
    //    List<Row> rows = parser.getRows();
    //    for (int i = 0; i < rows.size(); i++){
    //        System.out.println(rows.get(i));
    //    }
    //}

    // 設定DataBlockType為DBT_PLAIN_BUFFER並列印結果。
    {
        PlainBufferBlockParser parser = new PlainBufferBlockParser(bulkExportResponse.getRows());
        List<Row> rows = parser.getRows();
        for (int i = 0; i < rows.size(); i++){
            System.out.println(rows.get(i));
        }
    }
}

相關文檔

  • 關於API的更多資訊,請參見BulkExport

  • 關於功能介面實現的更多資訊,請參見BulkExportRequest.javaBulkExportResponse.java

  • 如果要使用索引技術加速資料查詢,您可以通過二級索引或者多元索引功能實現。更多資訊,請參見二級索引或者多元索引

  • 如果要可視化展示表中資料,您可以通過對接DataV或者Grafana工具實現。更多資訊,請參見資料視覺效果

  • 如果要下載表中資料到本地,您可以通過DataX、Table Store命令列CLI工具實現。更多資訊,請參見將Table Store資料下載到本地檔案

  • 如果要計算與分析表中資料,您可以通過Table StoreSQL查詢實現。更多資訊,請參見SQL查詢

    說明

    您還可以通過MaxCompute、Spark、Hive或者HadoopMR、Function Compute、Flink等計算引擎實現表中資料的計算與分析。具體操作,請參見計算與分析