Tablestore SDK for Java を使用して、完全なプライマリキーを指定して、Wide Column モデルのテーブルから行を読み取ります。
前提条件
Tablestore SDK for Java をインストールして、クライアントを初期化してください。
説明
getRow API を呼び出して、完全なプライマリキーを指定して行を読み取ります。返される列、データバージョン範囲、およびフィルター条件を指定できます。
public GetRowResponse getRow(GetRowRequest getRowRequest) throws TableStoreException, ClientException
maxVersions または timeRange の少なくとも一方を設定する必要があります。それ以外の場合、サーバーはパラメーターエラーを返します。
次の例では、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("Row: " + response.getRow());
パラメーター
GetRowRequest には次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
rowQueryCriteria (必須) |
|
行を読み取るための条件です。 |
|
transactionId (オプション) |
|
ローカルトランザクション ID です。ローカルトランザクション内でデータを読み取る場合にのみ、このパラメーターを設定します。 ID の取得方法と使用方法については、「ローカルトランザクションの使用」をご参照ください。 |
単一行クエリ条件
rowQueryCriteria は SingleRowQueryCriteria 型で、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
tableName (必須) |
|
テーブルの名前です。 |
|
primaryKey (必須) |
|
行のプライマリキーです。テーブルスキーマと同じ順序と型で、すべてのプライマリキー列を指定します。プライマリキー列は、 |
|
maxVersions (オプション) |
|
返されるデータバージョンの最大数です。一致するバージョンが多い場合、Tablestore は新しい順にバージョンを返します。 |
|
timeRange (オプション) |
|
データバージョンの時間範囲です。範囲内のバージョンのみが返されます。 |
|
columnsToGet (オプション) |
|
返される列です。このパラメーターを指定しない場合、行全体が返されます。指定した列がその行に1つも含まれていない場合、 |
|
filter (オプション) |
|
フィルター条件です。 フィルターの設定方法については、「フィルターの使用」をご参照ください。 |
レスポンス
GetRowResponse には、次の操作固有のフィールドが含まれます。
|
フィールド |
型 |
説明 |
|
|
|
|
例
特定の属性列の読み取り
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());