すべてのプロダクト
Search
ドキュメントセンター

Tablestore:範囲データの読み取り

最終更新日:Mar 31, 2026

Python SDK を使用して、指定されたプライマリキー範囲内のデータを Tablestore データテーブルから読み取ります。

前提条件

Tablestore クライアントの初期化

メソッド

def get_range(self, table_name, direction,
              inclusive_start_primary_key,
              exclusive_end_primary_key,
              columns_to_get=None,
              limit=None,
              column_filter=None,
              max_version=1,
              time_range=None,
              start_column=None,
              end_column=None,
              token=None,
              transaction_id=None):

パラメーター

パラメーター

説明

table_name (必須)

str

データテーブルの名前。

inclusive_start_primary_key (必須)

List[Tuple]

範囲の開始プライマリキー。キーには、プライマリキー列の名前と値が含まれます。

  • 結果には、開始プライマリキーに対応する行が 含まれます

  • プライマリキー列の数とデータの型は、テーブルスキーマと一致する必要があります。

  • 前方読み取りの場合、開始プライマリキーは終了プライマリキーより小さい必要があります。

  • 後方読み取りの場合、開始プライマリキーは終了プライマリキーより大きい必要があります。

  • INF_MIN は負の無限大を表し、INF_MAX は正の無限大を表します。

exclusive_end_primary_key (必須)

List[Tuple]

範囲の終了プライマリキー。キーには、プライマリキー列の名前と値が含まれます。

  • 結果には、終了プライマリキーに対応する行は 含まれません

  • プライマリキー列の数とデータの型は、テーブルスキーマと一致する必要があります。

  • INF_MIN は負の無限大を表し、INF_MAX は正の無限大を表します。

direction (必須)

Direction

読み取り方向。

  • FORWARD: デフォルト値。前方読み取りを実行し、プライマリキー値の昇順でデータを読み取ります。

  • BACKWARD: 後方読み取りを実行し、プライマリキー値の降順でデータを読み取ります。

max_version (オプション)

int

各列で返す最大バージョン数。デフォルト値は 1 です。

  • max_version または time_range のいずれかを指定する必要があります。

  • 一致するデータバージョンの数が最大バージョン数を超えると、Tablestore はその制限までの最新バージョンを返します。

time_range (オプション)

Tuple

データのバージョン範囲。

  • max_version または time_range のいずれかを指定する必要があります。

  • Tablestore テーブルの各属性列は複数のバージョンを持つことができます。時間範囲を指定すると、その範囲内のデータのみが返されます。

limit (オプション)

int

単一のリクエストで返す最大行数。この値は 0 より大きい必要があります。一致する行の数がこの制限を超えると、応答には指定された行数と次のリクエストの開始プライマリキーが含まれます。

columns_to_get (オプション)

List[str]

読み取るデータ列。プライマリキー列または属性列を指定します。

  • このパラメーターを省略すると、メソッドは行全体を返します。

  • 返された行に指定されたデータ列のいずれも含まれていない場合でも、行は返されますが、その属性列のリストは空になります。

column_filter (オプション)

ColumnCondition

フィルター条件。詳細については、「フィルター」をご参照ください。

  • columns_to_getcolumn_filter の両方を指定すると、システムはまず columns_to_get で指定された列を取得し、次に結果に column_filter を適用します。

transaction_id (オプション)

str

ローカルトランザクション ID。この ID はローカルトランザクションを一意に識別します。詳細については、「ローカルトランザクション」をご参照ください。

次の例は、プライマリキー値が row1 より大きい test_table テーブルからすべての行を読み取ります。

try:
    # クエリの開始プライマリキーを設定します。
    inclusive_start_primary_key = [('id', 'row1')]
    # クエリの終了プライマリキーを設定します。終了プライマリキーは排他的です。
    exclusive_end_primary_key = [('id', INF_MAX)]

    # get_range メソッドを呼び出してデータをクエリします。
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key, exclusive_end_primary_key)

    # 結果を処理します。
    print('* Read CU Cost: %s' % consumed.read)
    print('* Write CU Cost: %s' % consumed.write)
    print('* Rows Data:')
    for row in row_list:
        print(row.primary_key, row.attribute_columns)
except Exception as e:
    print("Range get failed with error: %s" % e)

単一の範囲スキャンは、最大 5,000 行または 4 MB のデータを返すことができます。結果セットがこの制限を超えると、応答には次のバッチを取得するためのトークン (next_start_primary_key) が含まれます。このトークンを使用して、次の例に示すように結果を反復処理します。

while True:
    # get_range メソッドを呼び出してデータをクエリします。
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key,
                                                                              exclusive_end_primary_key)

    # 結果を処理します。
    print('* Read CU Cost: %s' % consumed.read)
    print('* Write CU Cost: %s' % consumed.write)
    print('* Rows Count: %s' % len(row_list))
    print('* Rows Data:')
    for row in row_list:
        print(row.primary_key, row.attribute_columns)

    # 次の読み取りの開始プライマリキーを設定します。
    if next_start_primary_key:
        inclusive_start_primary_key = next_start_primary_key
    else:
        break

次のオプションを使用してクエリをカスタマイズします。

  • バージョン範囲を設定して、その範囲内のデータのみを返します。

    # クエリのバージョン範囲を過去 24 時間に設定します。
    time_range = (int(time.time() * 1000 - 86400 * 1000), int(time.time() * 1000))
    
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key, exclusive_end_primary_key,
                                                                              time_range= time_range)
  • 読み取る属性列を指定します。

    columns_to_get = ['col1']
    
    # get_range メソッドを呼び出してデータをクエリします。
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key, exclusive_end_primary_key,
                                                                              columns_to_get)
  • 単一のリクエストで返す最大行数を設定します。

    limit = 10
    
    # get_range メソッドを呼び出してデータをクエリします。
    consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
                                                                              inclusive_start_primary_key, exclusive_end_primary_key,
                                                                              limit=limit)

参考文献

バッチデータの読み取り