Using --project-expression:
aws dynamodb scan --table-name users --projection-expression "user_id,game_id"
{ "Items": [ { "user_id": { "S": "ersaessew" }, "game_id": { "N": "123" } }, { "user_id": { "S": "fgxfbgf" }, "game_id": { "N": "234" } } ], "Count": 2, "ScannedCount": 2, "ConsumedCapacity": null }
Using --filter-expression:
aws dynamodb scan --table-name users --filter-expression "user_id= :u" --expression-attribute-values '{ ":u": {"S": "ersaessew"}}'
result:
{ "Items": [ { "user_id": { "S": "ersaessew" }, "game_id": { "N": "123" }, "game_ts": { "S": "2021-05-31T11:34:19.266Z" } } ], "Count": 1, "ScannedCount": 2, "ConsumedCapacity": null }
Using --page-size:
total we have 2 items, set page size = 1, it performance 2 api calls.
aws dynamodb scan --table-name users --page-size 1
Result:
{ "Items": [ { "user_id": { "S": "ersaessew" }, "game_id": { "N": "123" }, "game_ts": { "S": "2021-05-31T11:34:19.266Z" } }, { "user_id": { "S": "fgxfbgf" }, "game_id": { "N": "234" }, "game_ts": { "S": "2021-05-30T11:34:19.266Z" } } ], "Count": 2, "ScannedCount": 2, "ConsumedCapacity": null }
If we want to limit api calls when using page size, we can use: --max-items:
aws dynamodb scan --table-name users --page-size 1 --max-items 1
{ "Items": [ { "user_id": { "S": "ersaessew" }, "game_id": { "N": "123" }, "game_ts": { "S": "2021-05-31T11:34:19.266Z" } } ], "Count": 1, "ScannedCount": 1, "ConsumedCapacity": null, "NextToken": "eyJFeGNsdXNpdmVTdGFydEtleSI6IHsidXNlcl9pZCI6IHsiUyI6ICJlcnNhZXNzZXcifSwgImdhbWVfdHMiOiB7IlMiOiAiMjAyMS0wNS0zMVQxMTozNDoxOS4yNjZaIn19fQ==" }
"NextToekn" is what you should use to get next batch of items.
aws dynamodb scan --table-name users --page-size 1 --max-items 1 --starting-token eyJFeGNsdXNpdmVTdGFydEtleSI6IHsidXNlcl9pZCI6IHsiUyI6ICJlcnNhZXNzZXcifSwgImdhbWVfdHMiOiB7IlMiOiAiMjAyMS0wNS0zMVQxMTozNDoxOS4yNjZaIn19fQ==
{ "Items": [ { "user_id": { "S": "fgxfbgf" }, "game_id": { "N": "234" }, "game_ts": { "S": "2021-05-30T11:34:19.266Z" } } ], "Count": 0, "ScannedCount": 0, "ConsumedCapacity": null, "NextToken": "eyJFeGNsdXNpdmVTdGFydEtleSI6IHsidXNlcl9pZCI6IHsiUyI6ICJmZ3hmYmdmIn0sICJnYW1lX3RzIjogeyJTIjogIjIwMjEtMDUtMzBUMTE6MzQ6MTkuMjY2WiJ9fX0=" }
If there is no items anymore:
{ "Items": [], "Count": 0, "ScannedCount": 0, "ConsumedCapacity": null }