BatchGetRow
アクション:
1 つ以上のテーブルから複数のデータ行を一括して読み取ります。
BatchGetRow 操作は、複数の GetRow 操作を 1 セットとして表示できます。各操作は独立して実行され、それぞれが独自に結果を返して容量単位を使用します。
BatchGetRow 操作を使用すると、GetRow 操作を大量に実行する場合に比べて、リクエスト応答時間が効果的に減り、データ読み取り速度を向上させることができます。
リクエストの構造:
message BatchGetRowRequest {
repeated TableInBatchGetRowRequest tables = 1;
}
tables
型: repeated TableInBatchGetRowRequest
必須パラメーター: はい
読み取る行の情報を指定します。
tables
が以下のいずれかの条件を持っている場合、操作全体が失敗し、エラーを返します:- “tables” にはテーブルが存在しない。
- “tables” のいずれかのテーブルの名前がテーブルの命名規則に準拠していない。
- “tables” のいずれかの行に対してプライマリキーが指定されていない、プライマリキー名が規則に準拠していない、またはプライマリキーの型が正しくない。
- “tables” のいずれかの列に対して、columns_to_get の中に含まれる列の名前は 列の命名規則に準拠していない。
- “tables” に同じ名前のテーブルが含まれている。
- “tables” のいずれかのテーブルに同一のプライマリキーを持つ行が含まれている。
- “tables” の RowInBatchGetRowRequest の合計数が 100 を超えている。
- “tables” のどのテーブルにも RowInBatchGetRowRequest が含まれていない。
- “tables” のいずれかのテーブルの columns_to_get が 128 列を超えている。
応答メッセージの構造:
message BatchGetRowResponse {
repeated TableInBatchGetRowResponse tables = 1;
}
tables
型: repeated TableInBatchGetRowResponse
各テーブルで読み取るデータに相当します。
応答メッセージ内の TableInBatchGetRowResponse オブジェクトの順序は、BatchGetRowRequest での TableInBatchGetRowRequest オブジェクトの順序と同じです。TableInBatchGetRowResponse における各 RowInBatchGetRowResponse の順序は、TableInBatchGetRowRequest における RowInBatchGetRowRequest の順序と同じです。
行が存在しないか、行に指定した columns_to_get のデータがない場合でも、対応する RowInBatchGetRowResponse が TableInBatchGetRowResponse に表示されますが、行の primary_key_columns と attribute_columns は null になります。
行の読み取りに失敗した場合、行の RowInBatchGetRowResponse の is_ok 値は false になり、行は null になります。
注: BatchGetRow 操作は行レベルで部分的に失敗することがあります。このような場合でも、200 という HTTP ステータスコードが返されます。アプリケーションでは RowInBatchGetRowResponse のエラーをチェックして、各行の実行結果を確認してから、その結果に従って進める必要があります。
容量単位の使用:
操作全体が失敗した場合は、容量単位が使用されることはありません。
リクエストタイムアウトが発生し、結果が定義されていない場合は、容量単位が使用される場合とされない場合、どちらもありえます。
その他の状況では、書き込み容量単位がカウントされると、RowInBatchGetRowRequest 操作ごとに 1 回の GetRow 操作として表示されます。
リクエストの例:
BatchGetRowRequest {
tables {
table_name: "consume_history"
rows {
primary_key {
name: "CardID"
value {
type: STRING
v_string: "2007035023"
}
}
primary_key {
name: "SellerID"
value {
type: STRING
v_string: "00022"
}
}
primary_key {
name: "DeviceID"
value {
type: STRING
v_string: "061104"
}
}
primary_key {
name: "OrderNumber"
value {
type: INTEGER
v_int: 142857
}
}
}
rows {
primary_key {
name: "CardID"
value {
type: STRING
v_string: "2007035023"
}
}
primary_key {
name: "SellerID"
value {
type: STRING
v_string: "00026"
}
}
primary_key {
name: "DeviceID"
value {
type: STRING
v_string: "065499"
}
}
primary_key {
name: "OrderNumber"
value {
type: INTEGER
v_int: 153846
}
}
}
columns_to_get: "CardID"
columns_to_get: "SellerID"
columns_to_get: "DeviceID"
columns_to_get: "OrderNumber"
columns_to_get: "Amount"
columns_to_get: "Remarks"
}
}
応答の例:
BatchGetRowResponse {
tables {
table_name: "consume_history"
rows {
is_ok: true
consumed {
capacity_unit {
read: 1
}
}
row {
primary_key_columns {
name: "CardID"
value {
type: STRING
v_string: "2007035023"
}
}
primary_key_columns {
name: "SellerID"
value {
type: STRING
v_string: "00022"
}
}
primary_key_columns {
name: "DeviceID"
value {
type: STRING
v_string: "061104"
}
}
primary_key_columns {
name: "OrderNumber"
value {
type: INTEGER
v_int: 142857
}
}
attribute_columns {
name: "Amount"
value {
type: DOUBLE
v_double: 2.5
}
}
attribute_columns {
name: "Remarks"
value {
type: STRING
v_string: "ice cream"
}
}
}
}
rows {
is_ok: true
consumed {
capacity_unit {
read: 1
}
}
row {
primary_key_columns {
name: "CardID"
value {
type: STRING
v_string: "2007035023"
}
}
primary_key_columns {
name: "SellerID"
value {
type: STRING
v_string: "00026"
}
}
primary_key_columns {
name: "DeviceID"
value {
type: STRING
v_string: "065499"
}
}
primary_key_columns {
name: "OrderNumber"
value {
type: INTEGER
v_int: 153846
}
}
attribute_columns {
name: "Amount"
value {
type: DOUBLE
v_double: 0.5
}
}
}
}
}
}