2017-03-22 33 views
0

我一直在試圖抓取我的GSI之一上的所有記錄,並且看到只有在執行掃描時,纔有迴應在響應中使用LastEvaluatedKey的選項。我沒有找到更好的方式使用pagination使用boto3中的查詢。是否可以使用查詢進行分頁。在10Gb大小的桌子上Boto3 dynamodb查詢

從boto3.dynamodb.conditions進口boto3 導入密鑰,的Attr

dynamodb = boto3.resource('dynamodb') 
res = table.query(
    TableName='myTable', 
    IndexName='my-index', 
    KeyConditionExpression=Key('myVal').eq(1) 
) 
while 'LastEvaluatedKey' in res: 

    for item in res['Items']: 
     print item #returns only a subset of them 
+0

請提供您想要實現的更多細節。 – mootmoot

+0

我想查詢一個索引來獲取dynamodb表中的所有記錄。上面的代碼片段只返回了幾百條記錄,而有數百萬條記錄。無法使用查詢功能進行分頁。我能夠使用掃描進行分頁。 – ZZzzZZzz

回答

1

該文件提到boto3.dynamodb.table.query()的限制:1MB數據。

您只能使用Paginator.Query返回迭代器(這是有道理的)。

看來你可以用Paginator.Query替換你的table.query。試試看。

備註: boto3.resource()並不是所有的資源服務都實現了。所以對於dynamodb分頁生成器,這是其中的一種情況。

import boto3 
dyno_client = boto3.client('dynamodb') 
paginator = dyno_client.get_paginator('query') 
response_iterator = paginator.paginate(.....) 
+0

編輯上面的代碼。現在有這個錯誤跟蹤。 AttributeError:'dynamodb.ServiceResource'對象沒有屬性'get_paginator' – ZZzzZZzz

+0

@Zzz:當資源。()沒有構建時,責備boto3 ;-)。實際上,您只能使用客戶端,即'paginator = client.get_paginator('query')' – mootmoot

+0

沒有運氣。我也厭倦了。 – ZZzzZZzz