You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CLI中--starting-token参数的默认初始值及循环扫描问题

解决DynamoDB扫描命令中--starting-token的初始值问题

嘿,我来帮你搞定这个小困扰!其实你一开始就走进了一个小误区——第一次执行DynamoDB的scan命令时,完全不需要指定--starting-token参数!

为什么你之前的尝试都报错?

你看到的错误提示Invalid type for parameter ExclusiveStartKey, value: 0, type: <type 'unicode'>, valid types: <type 'dict'>已经说得很清楚了:--starting-token对应的是API里的ExclusiveStartKey参数,它要求是一个字典类型,用来标记上一次扫描结束的位置。而你试的0、空字符串、null都不符合这个类型要求,自然会报错。

这个参数本质上是用来做分页查询的:只有当第一次扫描返回了NextToken字段(说明还有未返回的数据),后续请求才需要把这个NextToken的值传给--starting-token,才能获取下一页的结果。

正确的执行步骤

  1. 第一次扫描(无分页标记)
    直接执行不带--starting-token的命令即可:

    aws dynamodb scan --table-name MyTable --index-name nyIndex --max-items 5
    

    执行后如果结果里有NextToken字段,就意味着还有更多数据可以获取。

  2. 后续分页扫描(带NextToken)
    把第一次返回的NextToken值作为--starting-token的参数传入,比如假设NextToken的值是"eyJFeGN...":

    aws dynamodb scan --table-name MyTable --index-name nyIndex --max-items 5 --starting-token "eyJFeGN..."
    

写循环的正确姿势

如果要自动完成分页扫描,你可以用bash循环结合jq(用来解析JSON结果)来实现,逻辑是:先执行无标记的扫描,然后循环检查是否有NextToken,有就继续用该标记请求,直到没有更多数据为止:

token=""
while true; do
  # 根据token是否为空,决定是否带starting-token参数
  if [ -z "$token" ]; then
    result=$(aws dynamodb scan --table-name MyTable --index-name nyIndex --max-items 5)
  else
    result=$(aws dynamodb scan --table-name MyTable --index-name nyIndex --max-items 5 --starting-token "$token")
  fi

  # 这里可以添加你对扫描结果的处理逻辑,比如保存到文件、打印等
  echo "$result"

  # 提取NextToken,如果没有则返回空字符串
  token=$(echo "$result" | jq -r '.NextToken // empty')

  # 没有NextToken就退出循环
  if [ -z "$token" ]; then
    break
  fi
done

总结一下:第一次扫描不用加--starting-token,后续请求只用传DynamoDB返回的NextToken就行,别自己瞎填数值或空值啦!

内容的提问来源于stack exchange,提问作者Jinggang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:29:14