Сортировка сканирования данных DynamoDB с помощью Lambda - PullRequest
0 голосов
/ 09 октября 2019

Я создал таблицу в DynamoDB, и первичный ключ - это число, хранящееся в виде строки. Когда я использую GetItem DynamoClient, порядок элементов является случайным.

My code snippet

Вот моя лямбда-функция;

'use strict';
const AWS = require('aws-sdk');

exports.handler = async (event, context) => {
    // Bring in the documentClient library
    const documentClient = new AWS.DynamoDB.DocumentClient(); 

    // instanialize 
    let responseBody = "";
    let statusCode = 0;

    // extract variables that we need to use in db
    // const { country, visits } = JSON.parse(event.body);

    const params = {
        TableName: "age_distribution"
    };

    try {
        const data = await documentClient.scan(params).promise(); 
        // add data into the db
        responseBody = JSON.stringify(data.Items); 
        // hold the response in a string type
        statusCode = 200;
    } catch (err) {
        responseBody = `Unable to get record: ${err}`;
        statusCode = 403;
    }

    const response = {
        statusCode: statusCode,
        headers: {
            "Content-Type" : " application/json",
            "access-control-allow-origin" : "*"
        },
        body: responseBody 
        //send back the responseBody
    };

    // return the response
    return response;
};

это пример ответа

[{"country":"63","visits":3},{"country":"92","visits":4},{"country":"64","visits":3},{"country":"90","visits":5},{"country":"79","visits":11},{"country":"66","visits":10},{"country":"80","visits":20},{"country":"62","visits":4},{"country":"87","visits":6},{"country":"75","visits":22},{"country":"76","visits":16},{"country":"97","visits":1},{"country":"84","visits":13},{"country":"60","visits":2},{"country":"61","visits":4},{"country":"89","visits":7},{"country":"94","visits":1},{"country":"98","visits":1},{"country":"82","visits":17},{"country":"77","visits":16},{"country":"91","visits":4},{"country":"81","visits":18},{"country":"88","visits":10},{"country":"96","visits":1},{"country":"71","visits":18},{"country":"95","visits":1},{"country":"78","visits":21},{"country":"83","visits":12},{"country":"68","visits":14},{"country":"65","visits":6},{"country":"70","visits":12},{"country":"85","visits":9},{"country":"69","visits":13},{"country":"74","visits":12},{"country":"93","visits":3},{"country":"86","visits":10},{"country":"67","visits":6},{"country":"72","visits":11},{"country":"73","visits":26}]

Я хочу отсортировать предметы, начиная с 60 и заканчивая 98

1 Ответ

0 голосов
/ 09 октября 2019

Сортировка в DynamoDb выполняется по значению ключа сортировки индекса

Из документов :

Результаты запроса всегда сортируются по ключу сортировкистоимость. Если тип данных ключа сортировки - Число, результаты возвращаются в числовом порядке;в противном случае результаты возвращаются в порядке байтов UTF-8. По умолчанию порядок сортировки возрастает. Чтобы изменить порядок, установите для параметра ScanIndexForward значение false

Итак, вы можете создать GSI (глобальный вторичный индекс) с ключом сортировки (диапазоном), который имеет смысл для вас. Я частоиспользуйте временную метку, как в этом определении индекса:

    GlobalSecondaryIndexes:
        - IndexName: productKey-timestamp-index
        KeySchema:
          - AttributeName: productKey
            KeyType: HASH
          - AttributeName: timestamp
            KeyType: RANGE

Затем, когда я запрашиваю этот индекс, я получаю возрастающий ряд данных по временной метке.

Если я хочу, чтобы это происходило по убыванию, тогда я используюследующий запрос:

 let params = {
        TableName: ORDERS_TABLE,
        Limit: 10,
        IndexName: 'productKey-timestamp-index',
        Key: {
            "productKey": productKey
        },
        KeyConditionExpression: 'productKey= :productKey',
        ExpressionAttributeValues: {
            ':productKey': productKey
        },
        ScanIndexForward: false
    };

    db.query(params).then(console.log)

Примечание: установка ScanIndexForward: false меняет порядок с помощью ключа сортировки, т.е. timestamp в данном случае

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...