go - DynamoDb SDK 不完整扫描
问题描述
我正在运行一个使用aws go sdk的网络服务器
在我的go.mod
:
github.com/aws/aws-sdk-go v1.30.16
我正在尝试使用此库对表运行dynamodb 扫描:
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-west-2"),
})
if err != nil {
return nil, err
}
// Create DynamoDB client
svc := dynamodb.New(sess)
// snip
predatesExpirationHorizon := expression.Name(RequestSchema.TimeStamp).BeginsWith("2020-04-27T09")
projectionExpr := expression.NamesList(
expression.Name(RequestSchema.PrimaryKey),
expression.Name(RequestSchema.SortKey),
expression.Name(RequestSchema.TimeStamp),
expression.Name(RequestSchema.State),
)
expr, err := expression.NewBuilder().
WithFilter(predatesExpirationHorizon).
WithProjection(projectionExpr).Build()
// snip
params := &dynamodb.ScanInput{
ExpressionAttributeNames: expr.Names(),
ExpressionAttributeValues: expr.Values(),
FilterExpression: expr.Filter(),
ProjectionExpression: expr.Projection(),
TableName: aws.String(RequestSchema.TableName),
}
res, err := svc.Scan(params)
fmt.Printf("results %v out of %v", *res.Count, *res.ScannedCount)
这从 8010 的计数中返回了我表中的 2 个项目,并且LastEvaluatedKey
是空的
但是,当我尝试从 cli 复制它时,我从 8276 中得到了 3 个项目(其中 2 个是相同的)
aws --region us-west-2 dynamodb scan \
--table-name MyTable \
--projection-expression '#1, #2, #0, #3' \
--filter-expression 'begins_with (#0, :0)' \
--expression-attribute-values '{":0":{"S":"2020-04-27T09"}}' \
--expression-attribute-names '{"#0":"createdAt","#1":"PK","#2":"SK","#3":"state"}'
我用调试器挖掘了这个库,我可以看到它正在运行一个带有以下帖子正文的 http 请求:
{"ExpressionAttributeNames":{"#0":"createdAt","#1":"PK","#2":"SK","#3":"state"},
"ExpressionAttributeValues":{":0":{"S":"2020-04-27T09"}},
"FilterExpression":"begins_with (#0, :0)",
"ProjectionExpression":"#1, #2, #0, #3",
"TableName":"MyTable"}
这感觉极不可能,所以我假设我做错了什么。
当我使用 AWS 控制台时,很明显有 3 个匹配项。
我看过的一些东西:
- 我已经仔细检查了我的区域是否正确并且我使用的是相同的凭据
- 我知道扫描最终是一致的,但这些行已经好几天没有被写入了
- 我试过其他版本的 aws go sdk
- 我在同一个命名空间中查询同一个表
解决方案
推荐阅读
- javascript - 在 xrange 图表的 Highstocks 版本中不支持 x 轴上的最小值/最大值
- mocha.js - sinon fake server.requests 返回一个空数组
- c - 编译时错误为“需要左值”,但不确定原因
- python - 将蓝牙名称更改为 Pi Zero 上的当前 IP 地址
- python-3.x - 如何在 Python 中创建宏?
- sql - 如何通过语句在分区上向行号添加条件
- php - 如何更改 Laravel Passport 中 OAuthServerException 上无效凭据的默认消息?
- java - PreparedStatement 与调用 execute() 的记录不匹配
- nix - 如何将表达式实例化为 json 字符串并在此字符串中构建/实现它的所有依赖项/包
- c - 无法通过系统()从程序中设置带有“回声”的文件