我有一個包含數千個數據的DynamoDb表。我使用掃描功能掃描表格,並且已應用「之間」FilterExpression。 但是,查詢響應僅給出3條記錄,而它應該返回約100條記錄。DynamoDb:掃描查詢不會返回所有數據
我已經使用Node js創建了Lambda函數。
我有一個包含數千個數據的DynamoDb表。我使用掃描功能掃描表格,並且已應用「之間」FilterExpression。 但是,查詢響應僅給出3條記錄,而它應該返回約100條記錄。DynamoDb:掃描查詢不會返回所有數據
我已經使用Node js創建了Lambda函數。
另一個常見問題可能是掃描是否被執行直到LastEvaluatedKey爲空。
如果您已經在做這件事,但仍未獲取所有項目,請顯示您的代碼以詳細查看它。
如果掃描的物品的總數目超過最大數據集大小 極限的1 MB,掃描停止,結果返回給用戶,作爲 一個LastEvaluatedKey值繼續在隨後的 操作的掃描。結果還包括超出 限制的項目數量。掃描可能導致沒有符合過濾標準的表格數據。
如果LastEvaluatedKey爲空,則處理結果的「最後一頁」已經處理了 ,並且沒有更多數據需要檢索。
如果LastEvaluatedKey不爲空,則不一定意味着 結果集中有更多數據。要知道何時 已達到結果集的末尾,唯一方法是當LastEvaluatedKey爲空時爲 。
謝謝。上述解決方案工作。 – Sumera
這裏的示例代碼來獲取所有的結果:
Map<String, AttributeValue> lastKeyEvaluated = null;
do {
ScanRequest sr = new ScanRequest()
.withTableName("tableName")
.withProjectionExpression("id")
.withExclusiveStartKey(lastKeyEvaluated);
ScanResult result = client.scan(sr);
for (Map<String, AttributeValue> item : result.getItems()) {
System.out.println(item.get("id").getS());
}
lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);
請在您的回答中添加一些說明。 – not2qubit
最可能的原因是過濾器表達式過濾掉一些值。在這種情況下,DynamoDB仍然必須掃描整個表和頁面的結果。每個響應將僅包含與過濾條件匹配的項目以及您在下一個請求中必須包含的LastEvaluateKey以繼續掃描。起初這有點不直觀,但如果你多想一點,這是有道理的。 –