8

Boto Python ライブラリを使用して DynamoDB からの結果をページ分割するにはどうすればよいですか? DynamoDB API にはページネーションがサポートされていますが、Boto API のドキュメントから、ページネーションがサポートされているかどうかさえわかりません。

4

3 に答える 3

8

Boto は、「ExclusiveStartKey」と「Limit」の組み合わせを使用した「ページネーション」のような動作をサポートしています。たとえば、改ページしScanます。

以下は、テーブル全体を 10 個のチャンクで解析する例です。

esk = None

while True:
    # load this batch
    scan_generator = MyTable.scan(max_results=10, exclusive_start_key=esk)

    # do something usefull
    for item in scan_generator:
        pass  # do something usefull
    # are we done yet ?
    else:
        break;

    # Load the last keys
    esk = scan_generator.kwargs['exclusive_start_key'].values()

編集:

@garnaat が指摘したように、実際の目標を誤解している可能性があります。上記の提案により、たとえば質問に対してSOが行うように、ページネーションを提供できます。1 ページあたり 15 個以下。

特定のによって生成された結果セット全体をロードする方法が必要なだけの場合Scan、Boto は優れたライブラリであり、私の回答のように黒魔術を必要とせずに、すでにこれを抽象化しています。この場合、彼 (@garnaat) のアドバイスに従う必要があります。ところで、彼は Boto の作者であり、Boto 関連の質問に対する素晴らしいリファレンスです :)

于 2012-10-31T18:20:10.867 に答える
4

おそらく私は質問を誤解していますが、必要以上に難しくしていると思います。boto (デフォルト) で layer2 DynamoDB インターフェイスを使用している場合は、ページネーションが処理されます。

したがって、クエリ操作を実行する場合は、次のようにするだけです。

import boto

c = boto.connect_dynamodb()
t = c.get_table('mytable')
for item in t.query(hash_key='foo'):
    print item

これにより、DynamoDB からの結果のページネーションが自動的に処理されます。同じことがスキャン要求にも機能します。

于 2012-11-01T13:38:13.797 に答える
0

次のようなものが必要になる可能性が十分にあります。

qms = tms.query(hash_key=415772421368583351, max_results=2, exclusive_start_key=None)
for i in qms:
    print i
lek = qms.last_evaluated_key
qms = tms.query(hash_key=415772421368583351, max_results=2, exclusive_start_key=lek)
for i in qms:
  print i

もちろん、これはデモンストレーションのためのばかげた例です。
ここで重要なのはlast_evaluated_keyexclusive_start_key

于 2013-05-26T12:19:53.567 に答える