このトピックでは、.NET SDK を使用して Tablestore から範囲データを読み取る方法について説明します。
前提条件
メソッド
public GetRangeResponse GetRange(GetRangeRequest request)非同期メソッド:
public Task<GetRangeResponse> GetRangeAsync(GetRangeRequest request)コード例
次のコード例では、test_table テーブルからプライマリキー値が row1 より大きいデータを読み取る方法を示します。
try
{
// 開始プライマリキーを設定します。
PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey()
{
{ "id", new ColumnValue("row1") }
};
// 終了プライマリキーを設定します。結果セットには終了プライマリキーは含まれません。
PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey()
{
{ "id", ColumnValue.INF_MAX }
};
// GetRange メソッドを呼び出して行を読み取ります。
GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
GetRangeResponse getRangeResponse = client.GetRange(getRangeRequest);
// 応答を処理します。
Console.WriteLine($"RequestId: {getRangeResponse.RequestID}");
Console.WriteLine($"Read CU Cost: {getRangeResponse.ConsumedCapacityUnit.Read}");
Console.WriteLine($"Write CU Cost: {getRangeResponse.ConsumedCapacityUnit.Write}");
Console.WriteLine("Row Data: ");
foreach (Row row in getRangeResponse.RowDataList)
{
Console.WriteLine(row);
}
}
catch (Exception ex)
{
Console.WriteLine($"Get Range failed, exception: {ex.Message}");
}1 回の GetRange リクエストで返すことができるデータは、最大 5,000 行または 4 MB です。クエリ範囲に一致するデータがさらに存在する場合、応答には NextPrimaryKey 値が含まれます。残りのデータを取得するには、次の GetRange リクエストでこの値を inclusiveStartPrimaryKey として使用します。次のコードは、ループを使用して一致するすべての行を反復処理する方法を示しています。
while (true)
{
// GetRange メソッドを呼び出して行を読み取ります。
GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
GetRangeResponse getRangeResponse = client.GetRange(getRangeRequest);
// 応答を処理します。
Console.WriteLine($"RequestId: {getRangeResponse.RequestID}");
Console.WriteLine($"Read CU Cost: {getRangeResponse.ConsumedCapacityUnit.Read}");
Console.WriteLine($"Write CU Cost: {getRangeResponse.ConsumedCapacityUnit.Write}");
Console.WriteLine("Row Data: ");
foreach (Row row in getRangeResponse.RowDataList)
{
Console.WriteLine(row);
}
if (getRangeResponse.NextPrimaryKey != null)
{
inclusiveStartPrimaryKey = getRangeResponse.NextPrimaryKey;
}
else
{
break;
}
}次の設定を使用してクエリを構成することもできます。
データ読み取り方向の設定。
// 開始プライマリキーを設定します。バックワード読み取りの場合、開始プライマリキーは終了プライマリキーより大きい必要があります。 PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey() { { "id", ColumnValue.INF_MAX } }; // 終了プライマリキーを設定します。結果セットには終了プライマリキーは含まれません。 PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey() { { "id", new ColumnValue("row1") } }; // GetRange メソッドを呼び出してバックワード方向に行を読み取ります。 GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Backward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);読み取る属性列の指定。
HashSet<string> columnsToGet = new HashSet<string> { "col2" }; // GetRange メソッドを呼び出して行を読み取ります。 GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, columnsToGet, null);返される行の最大数の設定。
int limit = 10; // GetRange メソッドを呼び出して行を読み取ります。 GetRangeRequest getRangeRequest = new GetRangeRequest("test_table", GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey, null, limit);