ПОЧЕМУ DynamoDB отличается данными результата с QuerySpec, DynamoDBQueryExpression, CLI? - PullRequest
0 голосов
/ 27 сентября 2018

я тестировал на 3 типах интерфейса.Но данные результата имеют различие.

вначале cli

aws dynamodb query --table-name 'table' --index-name 'GSIName'  \
--key-condition-expression 'createdTime = :a' \
--filter-expression '(contains(tags,:val0) or contains(tags,:val1))' \
--expression-attribute-values '{":a":{"N":"1538023462"},":val0":{"S":"test"},":val1":{"S":"test2"}}' \
--no-scan-index-forward \
--no-consistent-read \
--page-size 50

cli удалось получить чистые данные, которые я надеюсь получить. Но ПРОБЛЕМА находится на DynamoDBQueryExpression и QuerySpec.данные такого результата были получены с ограничением, а другой не возвращал данные ... я имею в виду, что AccumulatedItemCount был 0, а данные итератора были пустыми.

особенно QuerySpec был пуст ..

    Table table = dynamoDB.getTable("table");
    Index index = table.getIndex("GSIName");
    QuerySpec spec = new QuerySpec()
        .withKeyConditionExpression("createdTime = :a")
        .withFilterExpression(queryString) //queryString : (contains(tags,:val0) or contains(tags,:val1))
        .withValueMap(query2) // query2 values : :a=1538023462, :val0=test, :val1=test2
        .withConsistentRead(false)
        .withScanIndexForward(false)
        .withMaxPageSize(50);

    ItemCollection<QueryOutcome> items = index.query(spec);


    String queryString= "(contains(tags,:val0) or contains(tags,:val1))";
    HashMap<String, AttributeValue> query = new HashMap<>();
    query.put(":val0", new AttributeValue("test"));
    query.put(":val1", new AttributeValue("test2"));
    DynamoDBQueryExpression<RecommendationUserInfoTable> expression = new DynamoDBQueryExpression<RecommendationUserInfoTable>()
            .withIndexName('GSIName')
            .withHashKeyValues(key)
            .withFilterExpression(queryString)
            .withExpressionAttributeValues(query)
            .withConsistentRead(false)
            .withScanIndexForward(false)
            .withLimit(50);

Dynamodb Таблица расчетных данныхТипы
tags : SS createdTime : N : I(RANGEKEY),GSI(HASHKEY) user : S : I(HASHKEY) order2 : S : GSI(RANGEKEY)

...