全部產品
Search
文件中心

Tablestore:刪除資料

更新時間:Jun 30, 2024

Table Store提供了DeleteRow介面用於刪除單行資料以及BatchWriteRow介面用於大量刪除資料。

說明

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

注意事項

  • 刪除資料時,設定的主鍵個數和類型必須與資料表的主鍵個數和類型一致。

  • 刪除表資料,將導致資料不可恢複,請謹慎操作。

刪除單行資料

調用DeleteRow介面刪除一行資料。如果刪除的行不存在,則不會發生任何變化。

刪除單行資料時,您可以使用條件更新功能限制在滿足指定條件時刪除資料。更多資訊,請參見條件更新

大量刪除資料

擷取到要刪除資料的主鍵資訊後,調用BatchWriteRow介面根據主鍵資訊大量刪除資料。

說明

如果要刪除指定時間之前的資料,您可以使用資料生命週期功能進行資料刪除。更多資訊,請參見資料生命週期(TTL)

大量刪除資料時,您可以進行如下配置。

  • 一次請求中支援刪除多張表中的資料。

  • 使用條件更新功能限制在滿足指定條件時才能刪除資料。更多資訊,請參見條件更新

使用方式

使用控制台

您可以使用控制台刪除單行資料或者大量刪除資料。

  1. 登入Table Store控制台

  2. 概覽頁面,單擊執行個體操作列的執行個體管理

  3. 執行個體詳情頁簽的資料表列表地區,單擊資料表名稱。

  4. 資料管理頁簽,選擇單行或者多行要刪除的資料後,單擊頁面下方的大量刪除

  5. 大量刪除對話方塊,單擊確定

使用命令列工具CLI

您可以使用命令列工具執行delete命令刪除一行資料。

以下樣本用於刪除第一主鍵列值為"86",第二主鍵列值為6771的行資料。

delete --pk '["86", 6771]'

使用SDK

您可以使用Java SDKGo SDKPython SDKNode.js SDK.NET SDKPHP SDK刪除資料。此處以Java SDK為例介紹刪除資料的使用。

刪除單行資料

  • 刪除一行資料

    以下樣本用於刪除資料表中的指定行資料。

    private static void deleteRow(SyncClient client, String pkValue) {
        //構造主鍵。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //設定資料表名稱。
        RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", primaryKey);
    
        client.deleteRow(new DeleteRowRequest(rowDeleteChange));
    }                    
  • 刪除資料時使用條件

    以下樣本用於當原行存在且Col0列的值大於100時刪除資料表中的指定行。

    private static void deleteRow(SyncClient client, String pkValue) {
        //構造主鍵。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        //設定資料表名稱。
        RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", primaryKey);
    
        //設定條件更新,期望原行存在且Col0列的值大於100時刪除該行。
        Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
        condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
        rowDeleteChange.setCondition(condition);
    
        client.deleteRow(new DeleteRowRequest(rowDeleteChange));
    }                   

大量刪除資料

  1. 刪除資料前,您需要根據實際選擇合適的方式查詢要刪除資料的主鍵資訊。

    • 如果要刪除指定主鍵範圍內的資料,請調用GetRange介面,查詢指定主鍵範圍內的資料,並擷取待刪除資料的主鍵資訊。具體操作,請參見讀取資料

    • 如果要刪除滿足指定條件的資料,請建立多元索引後,使用多元索引查詢滿足指定條件的資料,並擷取待刪除資料的主鍵資訊。具體操作,請參見建立多元索引使用SDK通過多元索引查詢資料

  2. 擷取要刪除資料的主鍵資訊後,調用BatchWriteRow介面根據主鍵資訊大量刪除資料。具體操作,請參見批量寫入資料

    以下樣本用於刪除一個資料表中主鍵列pk值為"pk"的行資料以及刪除另一個資料表中第一列主鍵pk1值為"pk1"且第二列主鍵pk2值為"pk2"的行資料。

    private static void batchWriteRow(SyncClient client) {    
        BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest();
    
        //構造rowDeleteChange1。
        PrimaryKeyBuilder pk1Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        pk1Builder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk"));
        //設定資料表名稱。
        RowDeleteChange rowDeleteChange1 = new RowDeleteChange("<TABLE_NAME1>", pk1Builder.build());
        //添加到batch操作中。
        batchWriteRowRequest.addRowChange(rowDeleteChange1);
    
        //構造rowDeleteChange2。
        PrimaryKeyBuilder pk2Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        pk2Builder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString("pk1"));
        pk2Builder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.fromString("pk2"));
        //設定資料表名稱。
        RowDeleteChange rowDeleteChange2 = new RowDeleteChange("<TABLE_NAME2>", pk2Builder.build());
        //添加到batch操作中。
        batchWriteRowRequest.addRowChange(rowDeleteChange2);
    
        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());
        }
    }

計費說明

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

說明

關於執行個體類型和CU的更多資訊,請分別參見執行個體讀寫輸送量

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

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

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

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