DynamoDb SDK неполное сканирование - PullRequest
1 голос
/ 29 апреля 2020

Я использую веб-сервер, который использует 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
  • Я запрашиваю ту же таблицу в том же пространстве имен
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...