Tablestore SDK for Java は、プライマリキーを使用してデータテーブルから 1 行を読み取ります。リクエストオプションを使用して、返される列を制限したり、バージョン範囲を制限したり、列の値に基づいてフィルターを適用したりできます。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
メソッド定義
public GetRowResponse getRow(GetRowRequest getRowRequest) throws TableStoreException, ClientException主キーを使用してデータテーブルから単一の行を読み取ります。SingleRowQueryCriteria でクエリ条件を指定し、response.getRow() で結果を取得します。
maxVersions または timeRange のうち、少なくとも 1 つを設定してください。設定しない場合、サーバーはパラメーターエラーを返します。
次の例では、get_row_demo テーブルからプライマリキーが row1 の行を読み取り、各列の最新バージョンのみを返します。
String tableName = "get_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(tableName, primaryKey);
criteria.setMaxVersions(1);
GetRowResponse response = client.getRow(new GetRowRequest(criteria));
System.out.println("RequestId: " + response.getRequestId());
System.out.println("Read CU: " + response.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
System.out.println("Row: " + response.getRow());パラメーター
SingleRowQueryCriteria で、以下のパラメーターを設定します:
名前 | タイプ | 説明 |
tableName (必須) | String | 読み取り元のデータテーブル名。 |
primaryKey (必須) | PrimaryKey | プライマリキー列とその値。
|
maxVersions (2 つのうち 1 つ) | OptionalValue<Integer> | 返されるバージョンの最大数。 新しい順に、指定した数までバージョンを返します。 |
timeRange (2 つのうち 1 つ) | OptionalValue<TimeRange> | 返されるバージョンの範囲です。 各属性列は複数のバージョンを持つことができます。バージョン範囲を設定すると、その範囲内のバージョンのみを返します。 |
columnsToGet (オプション) | Set<String> | 読み取る列。リストには、プライマリキー列と属性列の両方を含めることができます。
|
filter (オプション) | OptionalValue<Filter> | フィルター条件。 詳細については、「Use filters」をご参照ください。
|
例
特定の属性列の読み取り
addColumnsToGet を使用して、読み取る属性列名を指定します。指定した列のみが返されます。
String tableName = "get_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(tableName, primaryKey);
criteria.setMaxVersions(1);
// col1 と col2 のみを読み取り
criteria.addColumnsToGet("col1");
criteria.addColumnsToGet("col2");
GetRowResponse response = client.getRow(new GetRowRequest(criteria));
System.out.println("Row (selected columns): " + response.getRow());バージョン範囲による読み取り
setTimeRange を使用してバージョン時間範囲を指定します。その範囲内のバージョンのみが返されます。
String tableName = "get_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(tableName, primaryKey);
// 過去 1 日分のすべてのバージョンを読み取り
long now = System.currentTimeMillis();
criteria.setTimeRange(new TimeRange(now - 86400 * 1000L, now));
criteria.setMaxVersions(Integer.MAX_VALUE);
GetRowResponse response = client.getRow(new GetRowRequest(criteria));
System.out.println("Row (time range): " + response.getRow());フィルターを使用した読み取り
setFilter を使用して列値フィルターを設定します。Tablestore は、フィルター条件に一致する場合にのみ行を返します。
String tableName = "get_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(tableName, primaryKey);
criteria.setMaxVersions(1);
// col1 が "val1" と等しい場合にのみ行を返す
SingleColumnValueFilter filter = new SingleColumnValueFilter(
"col1",
SingleColumnValueFilter.CompareOperator.EQUAL,
ColumnValue.fromString("val1"));
// 列が存在しない場合は行をスキップ
filter.setPassIfMissing(false);
criteria.setFilter(filter);
GetRowResponse response = client.getRow(new GetRowRequest(criteria));
System.out.println("Row (filtered): " + response.getRow());