[英]How to fetch all items from dynamo db without scan in lambda function
[英]Return fixed number of items from dynamo db query with filter expression
我正在嘗試從 dynamo db 表中檢索固定數量的項目(讓我們暫時將其視為 5)。
這是我正在使用的代碼。
response = table.query(
KeyConditionExpression=Key('pk').eq('goo'),
Limit=5,
FilterExpression=Attr('goo').eq('bar'))
我只從中得到 4 件物品。 但是,如果我刪除 FilterExpression,項目計數將為 5。那么即使我使用 FilterExpression,是否還有其他方法可以獲取固定數量的項目?
從表中讀取項目后應用過濾器表達式,以減少通過線路發送的記錄數。 限制在查詢操作期間應用,即在過濾器表達式之前。
如果Query
讀取了 5 個項目,而其中只有 4 個與FilterExpression
匹配,那么您只會返回 4 個項目。
務實的做法是從Query
中刪除限制並在客戶端應用限制。 缺點是您可能需要支付更多讀取容量單位的費用。
如果你想避免這種情況,你可能不得不重新考慮你的數據模型——這里很難有通用的解決方案。
在您的特定情況下,您可以使用分區鍵pk
和排序鍵goo
創建一個全局二級索引(對於 GSI 而言,它不必是唯一的)。 然后,您可以使用 Limit 5 對 GSI 發出查詢,它會給您想要的。 但是:您為 GSI 存儲 + 吞吐量付費。
這是我找到的答案。
paginator = dynamo_db_client.get_paginator('query')
response_iterator = paginator.paginate(
TableName='table_name',
KeyConditionExpression='#P=:p',
FilterExpression='#T=:t',
ExpressionAttributeNames={'#P':'pk','#T':'goo'},
ExpressionAttributeValues={
':p': {'S':'goo'},
':t': {'S':'bar'}
},
PaginationConfig={
'MaxItems':5
}
)
for page in response_iterator:
print(len(page['Items']))
分頁器文檔鏈接: DynamoDB.Paginator.Query
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.