Условие ключа запроса не поддерживается - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь пропустить все строки после определенной отметки времени.

Я также пытался использовать "GE", "LE", "GT" в условии, но я получаю синтаксическую ошибку.

Я получаю следующую ошибку DynamoDB:

Internal Server Error [ValidationException: Query key condition not supported
    status code: 400,

У меня есть следующая таблица

Table name  GroupsLambda3
Primary partition key   id (String)
Primary sort key    -
Point-in-time recovery  DISABLEDEnable
Encryption Type DEFAULTManage Encryption
KMS Master Key ARN  Not Applicable
Time to live attribute  DISABLEDManage TTL

Тогда я создал вторичный индекс для

Name: unix_time-index
Status: Active
Type: GSI
Partition Key: unix_time (Number)
Sort Key: unix_time-index

Наконец мой код Голанга:

    var cond string
    cond = "unix_time <= :v_unix_time"
    var projection string
    projection = "id, num_users, salesforce_campaign, unix_time"
    input := &dynamodb.QueryInput{
        TableName:              aws.String(table),
        IndexName:              aws.String("unix_time-index"),
        KeyConditionExpression: &cond,
        ProjectionExpression:   &projection,
        ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{
            ":v_unix_time": {
                N: aws.String("1558130473454419"),
            },
        },

Код работает, когда я cond = "unix_time = :v_unix_time", равно только.

Я ожидаю, что все строки с меньшей unix_timestamp.

1 Ответ

0 голосов
/ 21 мая 2019

Вы должны использовать выражение Builder:

// todo: please check if value should be converted to another type in your case
keyCond := expression.Key("unix_time").LessThenEqual(expression.Value("1558130473454419"))
proj := expression.NamesList(expression.Name("id"), expression.Name("num_users"), expression.Name("salesforce_campaign"), expression.Name("unix_time"))

expr, err := expression.NewBuilder().
    WithKeyCondition(keyCond).
    WithProjection(proj).
    Build()
if err != nil {
    fmt.Println(err)
}

input := &dynamodb.QueryInput{
    ExpressionAttributeValues: expr.Values(),
    KeyConditionExpression:    expr.KeyCondition(),
    ProjectionExpression:      expr.Projection(),
    TableName:                 aws.String(table),
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...