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

寫入數據

表格存儲提供了PutRowUpdateRow接口用于寫入單行數據以及BatchWriteRow接口用于批量寫入數據。

說明

組成表的基本單位為行,行由主鍵和屬性組成。其中主鍵是必須的,且每一行的主鍵列的名稱和類型相同;屬性不是必須的,且每一行的屬性可以不同。更多信息,請參見寬表模型介紹

插入單行數據

調用PutRow接口新寫入一行數據。系統會先刪除原行數據(原行的所有列以及所有版本的數據),再寫入新行數據。適用于要寫入數據較少的場景。

插入單行數據時,您可以根據需要進行如下配置。

  • 系統默認將當前時間的毫秒單位時間戳(從1970-01-01 00:00:00 UTC計算起的毫秒數)作為數據的版本號。您可以自定義數據的版本號。更多信息,請參見數據版本和生命周期

  • 使用條件更新中的行條件或者列條件。更多信息,請參見條件更新

不同的操作返回的結果不同。

  • 如果操作成功,表格存儲會返回操作消耗的服務能力單元(CU)。

  • 如果操作發生錯誤,例如參數檢查失敗、單行數據量過多、行存在性檢查失敗等,表格存儲會返回錯誤碼。

    說明

    關于錯誤碼的更多信息,請參見錯誤碼參考

更新單行數據

調用UpdateRow接口更新一行數據,可以增加和刪除一行中的屬性列,刪除屬性列指定版本的數據,或者更新已存在的屬性列的值。如果更新的行不存在,則新增一行數據。適用于更新已寫入數據的場景,例如刪除屬性列、刪除某個數據版本、修改屬性列值等。

說明

UpdateRow請求中只包含刪除指定的列且該行不存在時,則該請求不會新增一行數據。

更新單行數據時,您可以根據需要進行如下配置。

  • 一次請求中支持增加和刪除一行中的屬性列,刪除屬性列指定版本的數據,或者更新已存在的屬性列的值。

  • 系統默認將當前時間的毫秒單位時間戳(從1970-01-01 00:00:00 UTC計算起的毫秒數)作為數據的版本號。您可以自定義數據的版本號。更多信息,請參見數據版本和生命周期

  • 使用條件更新中的行條件或者列條件。更多信息,請參見條件更新

批量寫入數據

調用BatchWriteRow接口在一次請求中進行批量寫入操作或者一次對多張表進行寫入。適用于要寫入、刪除或者更新大量數據以及要同時進行增刪改數據的場景。

BatchWriteRow操作由多個PutRow、UpdateRow、DeleteRow子操作組成,構造子操作的過程與使用PutRow接口、UpdateRow接口和DeleteRow接口時相同。

BatchWriteRow的各個子操作獨立執行,表格存儲會分別返回各個子操作的執行結果。

批量寫入數據時,您可以根據需要進行如下配置。

  • 一次請求中支持對多張表進行插入、更新或者刪除數據操作。

    • 由于批量寫入可能存在部分行失敗的情況,失敗行的Index及錯誤信息在返回的BatchWriteRowResponse中,但并不拋出異常。因此調用BatchWriteRow接口時,需要檢查返回值,可通過BatchWriteRowResponseisAllSucceed方法判斷是否全部成功;如果不檢查返回值,則可能會忽略掉部分操作的失敗。

    • 當服務端檢查到某些操作出現參數錯誤時,BatchWriteRow接口可能會拋出參數錯誤的異常,此時該請求中所有的操作都未執行。

  • 一次請求中支持分別對PutRow、UpdateRow、DeleteRow子操作設置更新條件。

  • 系統默認將當前時間的毫秒單位時間戳(從1970-01-01 00:00:00 UTC計算起的毫秒數)作為數據的版本號。您可以自定義數據的版本號。更多信息,請參見數據版本和生命周期

  • 使用條件更新中的行條件或者列條件。更多信息,請參見條件更新

使用方式

使用控制臺

您可以使用控制臺插入單行數據或者更新單行數據。

  1. 登錄表格存儲控制臺

  2. 概覽頁面,單擊實例操作列的實例管理

  3. 實例詳情頁簽的數據表列表區域,單擊數據表名稱。

  4. 數據管理頁簽,根據實際插入數據或者更新數據。

    插入單行數據

    1. 單擊插入數據

    2. 插入數據對話框,輸入主鍵值。

    3. 單擊image圖標,并配置屬性列名稱、屬性列類型、屬性值以及數據版本號。

      當要增加多個屬性列時,請多次單擊image圖標并配置相應屬性信息。

    4. 單擊確定

    更新單行數據

    1. 選中要更新的行,單擊更新數據

    2. 更新數據對話框,根據需要修改屬性列信息。

      如果要增加屬性列,請單擊image圖標,并配置屬性信息;如果要刪除屬性列,請選擇操作刪除全部;如果要刪除特定版本號的數據,請選擇操作刪除,并選擇要刪除的數據版本號;如果要更新屬性列值,請選擇操作更新,并修改屬性值。

    3. 單擊確定

使用命令行工具CLI

您可以使用命令行工具執行如下命令寫入數據。

  • 執行put命令插入單行數據。更多信息,請參見插入新數據

    以下示例用于在數據表中插入一行數據。該行的第一主鍵列值為"86",第二主鍵列值為6771,屬性列有name(string類型)和country(string類型)兩列。

    put --pk '["86", 6771]' --attr '[{"c":"name", "v":"redchen"}, {"c":"country", "v":"china"}]'
  • 執行update命令更新一行數據。更多信息,請參見更新一行數據

    以下示例用于更新第一主鍵列為"86",第二主鍵列為6771的行數據。無論此行是否存在均會插入新數據,如果之前行已存在,則寫入數據時會覆蓋原有數據。

    update --pk '["86", 6771]' --attr '[{"c":"name", "v":"redchen"}, {"c":"country", "v":"china"}]' --condition ignore

使用SDK

您可以使用Java SDKGo SDKPython SDKNode.js SDK.NET SDKPHP SDK寫入數據。此處以Java SDK為例介紹數據寫入的使用。

插入單行數據

插入數據時,您可以自定義數據版本號、使用列條件或者行條件。

  • 插入數據時由系統自動生成數據版本號

    以下示例用于寫入10列屬性列,每列寫入1個版本,由系統自動生成數據的版本號(時間戳)。

    private static void putRow(SyncClient client, String pkValue) {
        //構造主鍵。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //設置數據表名稱。
        RowPutChange rowPutChange = new RowPutChange("<TABLE_NAME>", primaryKey);
    
        //加入一些屬性列。
        for (int i = 0; i < 10; i++) {
            rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
        }
    
        client.putRow(new PutRowRequest(rowPutChange));
    }
                        
  • 插入數據時自定義數據版本號

    以下示例用于寫入10列屬性列,每列寫入3個版本,自定義數據的版本號(時間戳)。

    private static void putRow(SyncClient client, String pkValue) {
        //構造主鍵。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //設置數據表名稱。
        RowPutChange rowPutChange = new RowPutChange("<TABLE_NAME>", primaryKey);
    
        //加入一些屬性列。
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 3; j++) {
                rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
            }
        }
    
        client.putRow(new PutRowRequest(rowPutChange));
    }
                        
  • 插入數據時使用行條件

    以下示例用于當原行不存在時,寫入10列屬性列,每列寫入3個版本,自定義數據的版本號(時間戳)。

    private static void putRow(SyncClient client, String pkValue) {
        //構造主鍵。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //設置數據表名稱。
        RowPutChange rowPutChange = new RowPutChange("<TABLE_NAME>", primaryKey);
    
        //設置條件更新,行條件檢查為期望原行不存在。
        rowPutChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST));
    
        //加入一些屬性列。
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 3; j++) {
                rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
            }
        }
    
        client.putRow(new PutRowRequest(rowPutChange));
    }                   
  • 插入數據時使用列條件和行條件

    以下示例用于當原行存在且Col0列的值大于100時,寫入10列屬性列,每列寫入3個版本,自定義數據的版本號(時間戳)。

    private static void putRow(SyncClient client, String pkValue) {
        //構造主鍵。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //設置數據表名稱。
        RowPutChange rowPutChange = new RowPutChange("<TABLE_NAME>", primaryKey);
    
        //設置條件更新,期望原行存在且Col0列的值大于100時寫入數據。
        Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
        condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
        rowPutChange.setCondition(condition);
    
        //加入一些屬性列。
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 3; j++) {
                rowPutChange.addColumn(new Column("Col" + i, ColumnValue.fromLong(j), ts + j));
            }
        }
    
        client.putRow(new PutRowRequest(rowPutChange));
    }
                        

更新單行數據

更新單行數據時,您可以自定義數據版本號、使用列條件或者行條件。

  • 更新數據時不使用條件

    以下示例用于更新一些列,刪除某列的某一版本數據以及刪除某列。

    private static void updateRow(SyncClient client, String pkValue) {
        //構造主鍵。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //設置數據表名稱。
        RowUpdateChange rowUpdateChange = new RowUpdateChange("<TABLE_NAME>", primaryKey);
    
        //更新一些列。
        for (int i = 0; i < 10; i++) {
            rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
        }
    
        //刪除某列的某一版本。
        rowUpdateChange.deleteColumn("Col10", 1465373223000L);
    
        //刪除某一列。
        rowUpdateChange.deleteColumns("Col11");
    
        client.updateRow(new UpdateRowRequest(rowUpdateChange));
    }                   
  • 更新數據時使用列條件和行條件

    以下示例用于當原行存在且Col0列的值大于100時更新數據。

    private static void updateRow(SyncClient client, String pkValue) {
        //構造主鍵。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //設置數據表名稱。
        RowUpdateChange rowUpdateChange = new RowUpdateChange("<TABLE_NAME>", primaryKey);
    
        //設置條件更新,期望原行存在且Col0列的值大于100時更新數據。
        Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
        condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
        rowUpdateChange.setCondition(condition);
    
        //更新一些列。
        for (int i = 0; i < 10; i++) {
            rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
        }
    
        //刪除某列的某一版本。
        rowUpdateChange.deleteColumn("Col10", 1465373223000L);
    
        //刪除某一列。
        rowUpdateChange.deleteColumns("Col11");
    
        client.updateRow(new UpdateRowRequest(rowUpdateChange));
    }         

批量寫入數據

以下示例中一次BatchWriteRow請求包含2PutRow操作、1DeleteRow操作和1UpdateRow操作用于更新表中數據。

private static void batchWriteRow(SyncClient client) {
    BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest();

    //構造rowPutChange1。
    PrimaryKeyBuilder pk1Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    pk1Builder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk1"));
    //設置數據表名稱。
    RowPutChange rowPutChange1 = new RowPutChange("<TABLE_NAME>", pk1Builder.build());
    //添加一些列。
    for (int i = 0; i < 10; i++) {
        rowPutChange1.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
    }
    //添加到batch操作中。
    batchWriteRowRequest.addRowChange(rowPutChange1);

    //構造rowPutChange2。
    PrimaryKeyBuilder pk2Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    pk2Builder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk2"));
    //設置數據表名稱。
    RowPutChange rowPutChange2 = new RowPutChange("<TABLE_NAME>", pk2Builder.build());
    //添加一些列。
    for (int i = 0; i < 10; i++) {
        rowPutChange2.addColumn(new Column("Col" + i, ColumnValue.fromLong(i)));
    }
    //添加到batch操作中。
    batchWriteRowRequest.addRowChange(rowPutChange2);

    //構造rowUpdateChange。
    PrimaryKeyBuilder pk3Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    pk3Builder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk3"));
    //設置數據表名稱。
    RowUpdateChange rowUpdateChange = new RowUpdateChange("<TABLE_NAME>", pk3Builder.build());
    //添加一些列。
    for (int i = 0; i < 10; i++) {
        rowUpdateChange.put(new Column("Col" + i, ColumnValue.fromLong(i)));
    }
    //刪除一列。
    rowUpdateChange.deleteColumns("Col10");
    //添加到batch操作中。
    batchWriteRowRequest.addRowChange(rowUpdateChange);

    //構造rowDeleteChange。
    PrimaryKeyBuilder pk4Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    pk4Builder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk4"));
    //設置數據表名稱。
    RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", pk4Builder.build());
    //添加到batch操作中。
    batchWriteRowRequest.addRowChange(rowDeleteChange);

    BatchWriteRowResponse response = client.batchWriteRow(batchWriteRowRequest);

    System.out.println("是否全部成功:" + response.isAllSucceed());
    if (!response.isAllSucceed()) {
        for (BatchWriteRowResponse.RowResult rowResult : response.getFailedRows()) {
            System.out.println("失敗的行:" + batchWriteRowRequest.getRowChange(rowResult.getTableName(), rowResult.getIndex()).getPrimaryKey());
            System.out.println("失敗原因:" + rowResult.getError());
        }
        /**
         * 可以通過createRequestForRetry方法再構造一個請求對失敗的行進行重試。此處只給出構造重試請求的部分。
         * 推薦的重試方法是使用SDK的自定義重試策略功能,支持對batch操作的部分行錯誤進行重試。設置重試策略后,調用接口處無需增加重試代碼。
         */
        BatchWriteRowRequest retryRequest = batchWriteRowRequest.createRequestForRetry(response.getFailedRows());
    }
}            

計費說明

表格存儲包括VCU模式(原預留模式)和CU模式(原按量模式)兩種計費模式。使用不同的計費模式時,計算部分的計費方式不同。

  • VCU模式(原預留模式)

    以包年包月方式預先購買計算能力。計算能力中涵蓋數據寫的計算消耗。

  • CU模式(原按量模式)

    根據實際計算消耗折算成CU進行計費。同時,根據實例類型不同,計費時需要區分按量讀寫CU以及預留讀寫CU。

    說明

    關于實例類型和CU的更多信息,請分別參見實例讀寫吞吐量

    操作

    CU消耗說明

    PutRow操作

    • 消耗的寫CU為修改的行主鍵數據大小與屬性列數據大小之和除以4 KB向上取整。

    • 消耗的讀CU與指定的condition情況相關。通過在單行寫入請求中設置condition字段,可以指定寫入操作執行時是否對行的存在性進行檢查。

      • 如果指定條件檢查不為IGNORE,則消耗行主鍵數據大小除以4 KB向上取整的讀CU。

      • 如果操作不滿足指定的行存在性檢查條件,則操作失敗并消耗1單位寫CU1單位讀CU。

    UpdateRow操作

    • 消耗的寫CU為修改的行主鍵數據大小與屬性列數據大小之和除以4 KB向上取整。

      操作中包含的需要刪除的屬性列,只有屬性列的列名計入屬性列數據大小。

    • 消耗的讀CU與指定的condition情況相關。通過在更新單行請求中設置condition字段,可以指定更新操作執行時是否對行的存在性進行檢查。

      • 如果指定條件檢查不為IGNORE,則消耗行主鍵數據大小除以4 KB向上取整的讀CU。

      • 如果操作不滿足指定的行存在性檢查條件,則操作失敗并消耗1單位寫CU1單位讀CU。

    BatchWriteRow操作

    按照BatchWriteRow請求中包含的PutRow操作、UpdateRow操作和DeleteRow操作獨立計算讀寫CU。

    其中DeleteRow操作消耗的讀CU和寫CU說明如下:

    • 消耗的寫CU為刪除的行主鍵數據大小除以4 KB向上取整。

    • 如果指定條件檢查不為IGNORE,則消耗行主鍵數據大小除以4 KB向上取整的讀CU。

    • 如果操作不滿足指定的行存在性檢查條件,則操作失敗并消耗1單位寫CU。