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」をご覧ください。
複数のデータ行の同時削除
ビジネス要件に基づいて適切なメソッドを選択し、削除するデータのプライマリキー情報をクエリします。
プライマリキー値が特定の範囲内にあるデータを削除するには、GetRange 操作を呼び出してデータをクエリし、データのプライマリキー情報を取得します。詳細については、「プライマリキー値が特定の範囲内にあるデータの読み取り」をご参照ください。
検索インデックスが作成されたデータテーブルから、特定の条件を満たすデータを削除するには、検索インデックスを使用してデータをクエリし、データのプライマリキー情報を取得します。詳細については、「基本的なクエリ」をご参照ください。
データテーブルからすべてのデータを削除するには、データテーブルを削除し、同じ構成を持つデータテーブルを作成することをお勧めします。
また、GetRange 操作を呼び出し、開始プライマリキーを INF_MIN に、終了プライマリキーを INF_MAX に設定して、テーブル内のすべてのデータをスキャンすることもできます。この方法では、テーブル内のすべてのデータのプライマリキー情報を取得できます。ただし、これには大量の計算リソースが消費されます。ご注意ください。
行のプライマリキー情報に基づいて、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」をご参照ください。