ヘッダー
C# サンプル集
 

テーブルAPI で検索結果を少しずつ取得する

2021/6/20

→ Visual Basic のサンプルに切り替える

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

Azure Cosmos DB Table API の概要 | Microsoft Docs

 

 

まず20件取得して、その後続きの20件を取得して、その後もう20件取得する。

前提

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

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

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

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

//▼検索の設定
TableQuery query = new TableQuery(); //検索条件なし。つまり全件を対象とします。
var ro = new TableRequestOptions() { TableQueryMaxItemCount = 20 }; // 最大取得件数 20件。

int index = 0;

//▼最初の20件を取得
System.Diagnostics.Debug.WriteLine($"▼最初の{ro.TableQueryMaxItemCount} 件を取得します。");
var results = table.ExecuteQuerySegmented(query, null, ro);

//結果出力
results.ToList().ForEach(entity => System.Diagnostics.Debug.WriteLine($"{++index} {entity.PartitionKey} {entity.RowKey}"));

//▼次の20件を取得
if (results.ContinuationToken != null)
{
    System.Diagnostics.Debug.WriteLine($"▼次の{ro.TableQueryMaxItemCount} 件を取得します。");
    results = table.ExecuteQuerySegmented(query, results.ContinuationToken, ro);

    //結果出力
    results.ToList().ForEach(entity => System.Diagnostics.Debug.WriteLine($"{++index} {entity.PartitionKey} {entity.RowKey}"));
}

//▼その次の20件を取得
if (results.ContinuationToken != null)
{
    System.Diagnostics.Debug.WriteLine($"▼その次の{ro.TableQueryMaxItemCount} 件を取得します。");
    results = table.ExecuteQuerySegmented(query, results.ContinuationToken, ro);

    //結果出力
    results.ToList().ForEach(entity => System.Diagnostics.Debug.WriteLine($"{++index} {entity.PartitionKey} {entity.RowKey}"));
}

Debug.WriteLineが表示される場所

 

 

15件ずつ最後まで取得する

前提

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

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

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

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

//▼検索の設定
TableQuery query = new TableQuery(); //検索条件なし。つまり全件を対象とします。
var ro = new TableRequestOptions() { TableQueryMaxItemCount = 15 }; // 最大取得件数 15件。

//▼15件ずつ取得
int index = 0;
TableContinuationToken token = null;

do
{
    System.Diagnostics.Debug.WriteLine($"▼{ro.TableQueryMaxItemCount} 件を取得します。");
    var results = table.ExecuteQuerySegmented(query, token, ro);

    //結果出力
    results.ToList().ForEach(entity => System.Diagnostics.Debug.WriteLine($"{++index} {entity.PartitionKey} {entity.RowKey}"));

    token = results.ContinuationToken;
} while (token != null);

Debug.WriteLineが表示される場所

 

 

参考

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

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