Я использую веб-сервер, который использует 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)
Это возвращает мне 2 элемента в моей таблице из числа 8010, и LastEvaluatedKey
пусто
Однако, когда я пытаюсь воспроизвести это из клипа, я получаю обратно 3 элемента (2 из которых идентичны) из 8276
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
- Я запрашиваю ту же таблицу в том же пространстве имен