Tablestore は、単一のデータ行を削除できる DeleteRow 操作と、複数のデータ行を同時に削除できる BatchWriteRow 操作を提供します。
使用上の注意
削除したデータは復元できません。注意して操作してください。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化 を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。
単一のデータ行の削除
DeleteRow 操作を呼び出すことで、単一のデータ行を削除できます。削除しようとする行が存在しない場合、テーブルは変更されません。
API 操作
// テーブルからデータの行を削除します。
// @param DeleteRowRequest DeleteRow 操作の呼び出しに必要なパラメーターをカプセル化します。
// @return DeleteRowResponse DeleteRow 操作への応答の内容。
DeleteRow(request *DeleteRowRequest) (*DeleteRowResponse, error)
パラメーター
パラメーター | 必須 | 説明 |
TableName | はい | データテーブルの名前。 |
PrimaryKey | はい | 行のプライマリキー情報。プライマリキー情報には、プライマリキー列の名前、タイプ、値が含まれます。 重要 指定するプライマリキー列の数とタイプは、テーブル内の実際のプライマリキー列の数とタイプと同じである必要があります。 |
Condition | はい | DeleteRow 操作を実行するために構成する条件。行存在条件または列値に基づく条件を構成できます。詳細については、条件付き更新 を参照してください。 |
例
次のサンプルコードは、行が存在し、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 にアクセスしてください。
複数のデータ行を同時に削除する
ビジネス要件に基づいて適切なメソッドを選択し、削除するデータのプライマリキー情報をクエリします。
プライマリキー値が指定された範囲内にあるデータを削除するには、GetRange 操作を呼び出してデータをクエリし、データのプライマリキー情報を取得します。詳細については、プライマリキー値が特定の範囲内にあるデータの読み取り を参照してください。
指定された条件を満たすデータを削除するには、検索インデックスを使用してデータをクエリします。次に、データのプライマリキー情報を取得します。詳細については、検索インデックスの作成 および Tablestore SDK を使用した検索インデックスの使用 を参照してください。
行のプライマリキー情報に基づいて、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 を参照してください。