すべてのプロダクト
Search
ドキュメントセンター

Tablestore:データの削除

最終更新日:Mar 06, 2025

Tablestore は、単一のデータ行を削除できる DeleteRow 操作と、複数のデータ行を同時に削除できる BatchWriteRow 操作を提供します。

使用上の注意

削除したデータは復元できません。ご注意ください。

前提条件

  • OTSClient インスタンスが初期化されていること。詳細については、「OTSClient インスタンスの初期化」をご参照ください。

  • データテーブルが作成され、データがデータテーブルに書き込まれていること。

単一のデータ行の削除

DeleteRow 操作を呼び出すことで、単一のデータ行を削除できます。削除する行が存在しない場合、テーブルは変更されません。

API 操作

// テーブルからデータ行を削除します。
// @param DeleteRowRequest           DeleteRow 操作の呼び出しに必要なパラメーターをカプセル化します。
// @return DeleteRowResponse         DeleteRow 操作への応答の内容。
DeleteRow(request *DeleteRowRequest) (*DeleteRowResponse, error)                   

パラメーター

パラメーター

必須

説明

TableName

はい

データテーブルの名前。

PrimaryKey

はい

行のプライマリキー。このパラメーターの値は、各プライマリキー列の名前、タイプ、および値で構成されます。

重要

指定するプライマリキー列の数とタイプは、テーブル内のプライマリキー列の実際の数とタイプと同じである必要があります。

Condition

はい

操作を実行するために満たす必要がある条件。行存在条件、または列値に基づく条件を構成できます。詳細については、「条件付き更新」をご参照ください。

サンプルコード

次のサンプルコードは、行が存在し、col2 列の値が 3 の場合に、データテーブルから行を削除する方法の例を示しています。

func DeleteRowWithCondition(client *tablestore.TableStoreClient, tableName string) {
    deleteRowReq := new(tablestore.DeleteRowRequest)
    deleteRowReq.DeleteRowChange = new(tablestore.DeleteRowChange)
    deleteRowReq.DeleteRowChange.TableName = tableName
    deletePk := new(tablestore.PrimaryKey)
    deletePk.AddPrimaryKeyColumn("pk1", "pk1value1")
    deletePk.AddPrimaryKeyColumn("pk2", int64(2))
    deletePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
    deleteRowReq.DeleteRowChange.PrimaryKey = deletePk
    // システムに行存在チェックを実行させたくない場合は、RowExistenceExpectation_IGNORE を指定します。
    //deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
    // 行が存在することが想定される場合は、RowExistenceExpectation_EXPECT_EXIST を指定します。
    deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
    // 列値に基づく条件を指定します。この例では、col2 列の値が 3 の場合に、列値に基づく条件が満たされるように指定します。
    clCondition1 := tablestore.NewSingleColumnCondition("col2", tablestore.CT_EQUAL, int64(3))
    deleteRowReq.DeleteRowChange.SetColumnCondition(clCondition1)
    _, err := client.DeleteRow(deleteRowReq)
    if err != nil {
        fmt.Println("delete failed with error:", err)
    } else {
        fmt.Println("delete row finished")
    } 
}   

詳細なサンプルコードについては、「DeleteRow@ GitHub」をご覧ください。

複数のデータ行の同時削除

  1. ビジネス要件に基づいて適切なメソッドを選択し、削除するデータのプライマリキー情報をクエリします。

    • プライマリキー値が特定の範囲内にあるデータを削除するには、GetRange 操作を呼び出してデータをクエリし、データのプライマリキー情報を取得します。詳細については、「プライマリキー値が特定の範囲内にあるデータの読み取り」をご参照ください。

    • 検索インデックスが作成されたデータテーブルから、特定の条件を満たすデータを削除するには、検索インデックスを使用してデータをクエリし、データのプライマリキー情報を取得します。詳細については、「基本的なクエリ」をご参照ください。

    • データテーブルからすべてのデータを削除するには、データテーブルを削除し、同じ構成を持つデータテーブルを作成することをお勧めします。

      また、GetRange 操作を呼び出し、開始プライマリキーを INF_MIN に、終了プライマリキーを INF_MAX に設定して、テーブル内のすべてのデータをスキャンすることもできます。この方法では、テーブル内のすべてのデータのプライマリキー情報を取得できます。ただし、これには大量の計算リソースが消費されます。ご注意ください。

  2. 行のプライマリキー情報に基づいて、BatchWriteRow 操作を呼び出して、複数のデータ行を同時に削除します。詳細については、「複数のデータ行の同時書き込み」をご参照ください。

    次のサンプルコードは、テーブル内の pk プライマリキー列の値が pk であるデータ行と、別のテーブル内の pk1 プライマリキー列の値が pk1 で pk2 プライマリキー列の値が pk2 であるデータ行を同時に削除する方法の例を示しています。

    func BatchWriteRowWithCondition(client *tablestore.TableStoreClient) {
        batchWriteReq := &tablestore.BatchWriteRowRequest{}
    
        deleteRowChange := new(tablestore.DeleteRowChange)
        deleteRowChange.TableName = "<TABLE_NAME1>"
        deletePk := new(tablestore.PrimaryKey)
        deletePk.AddPrimaryKeyColumn("pk", "pk")
        deleteRowChange.PrimaryKey = deletePk
        deleteRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
        batchWriteReq.AddRowChange(deleteRowChange)
    
        deleteRowChange2 := new(tablestore.DeleteRowChange)
        deleteRowChange2.TableName = "<TABLE_NAME2>"
        deletePk2 := new(tablestore.PrimaryKey)
        deletePk2.AddPrimaryKeyColumn("pk1", "pk1")
        deletePk2.AddPrimaryKeyColumn("pk1", "pk2")
        deleteRowChange2.PrimaryKey = deletePk2
        deleteRowChange2.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
        batchWriteReq.AddRowChange(deleteRowChange2)
    
        response, err := client.BatchWriteRow(batchWriteReq)
    	
        if err != nil {
            fmt.Println("batch request failed with:", response)
        } else {
            fmt.Println("batch write row finished")
        }
    }

関連情報

Time to Live(TTL)は、データの保存期間を指定します。データテーブルに TTL を構成して、期限切れのデータを自動的に削除できます。詳細については、「データバージョンと TTL」をご参照ください。