Экспорт данных из динамо-базы данных в CSV-файл - PullRequest
1 голос
/ 30 января 2020

Мы хотим экспортировать данные из динамо-базы данных в файл. У нас есть около 150 000 записей, каждая запись имеет 430 байтов. Это будет периодическая c деятельность один раз в неделю. Можем ли мы сделать это с лямбда? Возможно ли, поскольку максимальное время выполнения лямбды составляет 15 минут?

Если есть лучший вариант с использованием python или через пользовательский интерфейс, поскольку я не могу экспортировать более 100 записей из пользовательского интерфейса?

Ответы [ 4 ]

1 голос
/ 30 января 2020

Вы можете экспортировать данные из Dynamodb несколькими способами.

Самый простой способ - это полное сканирование таблицы:

dynamodb = boto3.client('dynamodb')

response = dynamodb.scan(
    TableName=your_table,
    Select='ALL_ATTRIBUTES')

data = response['Items']

while 'LastEvaluatedKey' in response:
    response = dynamodb.scan(
        TableName=your_table,
        Select='ALL_ATTRIBUTES',
        ExclusiveStartKey=response['LastEvaluatedKey'])

    data.extend(response['Items'])

# save your data as csv here

Но если вы хотите делать это каждые x дни, что я бы порекомендовал вам:

Создайте свой первый дамп из таблицы с кодом выше.

Затем вы можете создать триггер DynamodB для лямбда-функции, которая будет получать все ваша таблица изменится (вставьте, обновите, удалите), а затем вы можете добавить данные в ваш CSV-файл. Код будет выглядеть примерно так:

def lambda_handler(event, context):
    for record in event['Records']:
        # get the changes here and save it

Поскольку вы будете получать только обновления таблицы, вам не нужно беспокоиться о 15-минутном выполнении из лямбды.

Вы можете прочитать больше о потоках DynamoDB и лямбде здесь: DynamoDB Streams и AWS Lambda Triggers

И если вы хотите работать с вашими данными, вы всегда можете создать aws клей или EMR кластер .

0 голосов
/ 04 февраля 2020

Ребята, мы решили это с помощью AWS лямбда, 150 000 записей (каждая запись имеет 430 байт) обрабатываются в CSV-файл за 2,2 минуты, используя максимально доступную память (3008 МБ). Создано правило события для запуска на периодической основе c. Время и размер написаны так, что каждый может рассчитать, сколько он может сделать с лямбда

0 голосов
/ 02 февраля 2020

Вы можете обратиться к существующему вопросу в stackoverflow. Этот вопрос касается экспорта таблицы Dynamo DB в виде CSV.

0 голосов
/ 02 февраля 2020

Один действительно простой вариант - использовать инструменты интерфейса командной строки

aws dynamodb scan --table-name YOURTABLE --output text > outputfile.txt

Это даст вам вывод с разделителями табуляции. Вы можете запустить его как cronjob для обычного вывода.

Сканирование не займет ничего, как 15 минут (вероятно, всего несколько секунд). Так что вам не нужно беспокоиться о том, что ваш Lambda истечет, если вы сделали это таким образом.

...