Eu tenho 1000 arquivos CSV. Cada arquivo CSV tem entre 1 e 500 MB e é formatado da mesma forma (ou seja, mesma ordem de coluna). Eu tenho um arquivo de cabeçalho para cabeçalhos de coluna, que correspondem aos nomes de coluna da minha tabela do DynamoDB. Preciso importar esses arquivos para uma tabela do DynamoDB. Qual a melhor forma/ferramenta para isso?
Posso concatenar esses arquivos CSV em um único arquivo gigante (prefiro evitar) ou convertê-los em JSON, se necessário. Estou ciente da existência de BatchWriteItem , então acho que uma boa solução envolveria a gravação em lote.
Exemplo:
- A tabela do DynamoDB tem duas colunas: first_name, last_name
- O arquivo de cabeçalho contém apenas:
first_name,last_name
- Um arquivo CSV se parece com
:
John,Doe
Bob,Smith
Alice,Lee
Foo,Bar
No final, codifiquei uma função Python
import_csv_to_dynamodb(table_name, csv_file_name, colunm_names, column_types)
que importa um CSV para uma tabela do DynamoDB. Os nomes das colunas e as colunas devem ser especificados. Ele usa boto e se inspira muito nessa essência . Abaixo está a função, bem como uma demonstração (main()
) e o arquivo CSV usado. Testado no Windows 7 x64 com Python 2.7.5, mas deve funcionar em qualquer sistema operacional que tenha boto e Python.test.csv
's content (deve estar localizado na mesma pasta que o script Python):Alterou um pouco a resposta anterior para usar o módulo CSV para que seu arquivo CSV possa suportar strings com aspas.
Este pacote NPM converte um json arbitrário em uma solicitação PUT para o DynamoDB. https://www.npmjs.com/package/json-dynamo-putrequest
Definitivamente vale a pena tentar.
Sugiro que você use o AWS Database Migration Service (DMS).
Conforme descrito neste artigo: https://aws.amazon.com/es/blogs/database/migrate-delimited-files-from-amazon-s3-to-an-amazon-dynamodb-nosql-table-using-aws- database-migration-service-and-aws-cloudformation/ você pode usar o S3 como origem e o DynamoDB como destino para importar arquivos csv com muitas tuplas.
Implementei com sucesso um processo de importação completo do S3 para o DynamoDB e é a maneira mais simples e rápida de fazer isso.
Essencialmente, você deve:
Modificando o rendimento da tabela do DynamoDB para 25 unidades de capacidade de leitura e 150 unidades de capacidade de gravação, consegui inserir mais de 124k tuplas em menos de 7 minutos, incluindo as tarefas de preparação.
A recomendação principal da AWS para esta tarefa é usar o serviço de pipeline de dados, mas eu já o usei e é mais caro e a inicialização do culster EMR subjacente é um processo muito lento, portanto, se você não quiser repetir essa tarefa de importação recorrentemente, use o DMS em vez de.