ヘッダー
Visual Basic サンプル集
VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

テーブルAPI でエンティティを削除する

2021/6/6

→ C# のサンプルに切り替える

この記事は Azure Cosmos DB テーブル API を対象にしています。

Azure Cosmos DB Table API の概要 | Microsoft Docs

 

 

エンティティを1つ削除する

前提

  • Azure Cosmos DB のアカウントがあり、テーブルAPIのデータベース上に TestTable というテーブルが存在する。
  • NuGet で Microsoft.Azure.Cosmos.Table パッケージをインストールしている。 → NuGetの使用方法
  • Imports Microsoft.Azure.Cosmos.Table がソースコードの冒頭付近に記載されている。

メモ:接続文字列の確認方法

VB2015対応 VB2017対応 VB2019対応

'▼Cosmos DBに接続
'接続文字列は環境に応じて指定してください。
Dim connectionString As String = "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;TableEndpoint=https://xxxxxx.table.cosmos.azure.com:443/;"
Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse(connectionString)

'▼テーブルへの参照を取得
Dim tableClient As CloudTableClient = storageAccount.CreateCloudTableClient()
Dim table As CloudTable = tableClient.GetTableReference("TestTable")

'▼削除するエンティティを生成
'PartitionKey=徳川、RowKey=綱吉のエンティティを削除対象とします。
Dim entity As New DynamicTableEntity()
entity.PartitionKey = "徳川"
entity.RowKey = "綱吉"
entity.ETag = "*" '更新状況によらない無条件での削除を設定します。

'▼削除操作を実行
Dim deleteOperation As TableOperation = TableOperation.Delete(entity)
Dim result As TableResult = table.Execute(deleteOperation)
'非同期版もあります。
'Dim result As TableResult = Await table.ExecuteAsync(deleteOperation)

'▼結果
'この操作で消費された要求ユニット(RU)の使用量を出力します。
If result.RequestCharge.HasValue Then
    Debug.WriteLine("要求ユニット使用量: " & result.RequestCharge) ' 8.57
End If

Debug.WriteLineが表示される場所

メモ:DynamicTableEntityの代わりに、TableEntityを継承した独自のクラスを使用することもできます。

メモ:取得したエンティティを削除する場合、取得後にエンティティが変更されていても削除するのであれば ETag を "*" に設定してから削除を実行します。

 

 

複数のエンティティを一度に削除する

例外が発生した場合、すべての削除が失敗します。

前提

  • Azure Cosmos DB のアカウントがあり、テーブルAPIのデータベース上に TestTable というテーブルが存在する。
  • NuGet で Microsoft.Azure.Cosmos.Table パッケージをインストールしている。 → NuGetの使用方法
  • Imports Microsoft.Azure.Cosmos.Table がソースコードの冒頭付近に記載されている。

メモ:接続文字列の確認方法

VB2015対応 VB2017対応 VB2019対応

'▼Cosmos DBに接続
'接続文字列は環境に応じて指定してください。
Dim connectionString As String = "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;TableEndpoint=https://xxxxxx.table.cosmos.azure.com:443/;"
Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse(connectionString)

'▼テーブルへの参照を取得
Dim tableClient As CloudTableClient = storageAccount.CreateCloudTableClient()
Dim table As CloudTable = tableClient.GetTableReference("TestTable")

'▼削除操作を実行
'ETag に * 以外の値を設定すると ETag が一致した場合のみ削除を実行します。無条件で削除する場合は * を指定します。
Dim batch As New TableBatchOperation()
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家康", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "秀忠", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家光", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家綱", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "綱吉", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家宣", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家継", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "吉宗", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家重", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家治", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家斉", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家慶", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家定", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "家茂", .ETag = "*"}))
batch.Add(TableOperation.Delete(New DynamicTableEntity With {.PartitionKey = "徳川", .RowKey = "慶喜", .ETag = "*"}))

Dim result As TableBatchResult = table.ExecuteBatch(batch)
'非同期版もあります。
'Dim result As TableBatchResult = Await table.ExecuteBatchAsync(batch)

'▼結果
'この操作で消費された要求ユニット(RU)の使用量を出力します。
If result.RequestCharge.HasValue Then
    Debug.WriteLine("要求ユニット使用量: " & result.RequestCharge) ' 125.15
End If

Debug.WriteLineが表示される場所

メモ:DynamicTableEntityの代わりに、TableEntityを継承した独自のクラスを使用することもできます。

メモ:最大で100個のエンティティを一度に削除できます。通信量(ペイロード)は4MiBに制限されます。

 

 

テーブル内のすべてのエンティティを削除する

前提

  • Azure Cosmos DB のアカウントがあり、テーブルAPIのデータベース上に TestTable というテーブルが存在する。
  • NuGet で Microsoft.Azure.Cosmos.Table パッケージをインストールしている。 → NuGetの使用方法
  • Imports Microsoft.Azure.Cosmos.Table がソースコードの冒頭付近に記載されている。

メモ:接続文字列の確認方法

VB2015対応 VB2017対応 VB2019対応

'▼Cosmos DBに接続
'接続文字列は環境に応じて指定してください。
Dim connectionString As String = "DefaultEndpointsProtocol=https;AccountName=xxxxxx;AccountKey=U2V0IHlvdXIgYWNjb3VudCBrZXkgZnJvbSBhenVyZSBwb3J0YWw=;TableEndpoint=https://xxxxxx.table.cosmos.azure.com:443/;"
Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse(connectionString)

'▼テーブルへの参照を取得
Dim tableClient As CloudTableClient = storageAccount.CreateCloudTableClient()
Dim table As CloudTable = tableClient.GetTableReference("TestTable")

'▼全削除実行
Dim query As New TableQuery()

For Each entity In table.ExecuteQuery(query)
    table.Execute(TableOperation.Delete(entity))
Next

メモ:すべてのエンティティを削除する場合は、テーブルをまるごと削除した方が効率的かもしれません。

メモ:このサンプルは、テーブルから全件取得して1件ずつ削除していくものです。取得後に変更・追加されたエンティティは削除されません。

 

 

参考

.NET Standard SDK を使用した Azure Cosmos DB Table API | Microsoft Docs

クイック スタート:.NET での Table API の使用 - Azure Cosmos DB | Microsoft Docs

 


VB6対応 VB6では XMLHttpRequestの機能でREST APIを呼び出すことで、同じことを実現できるかもしれません。