我有 1000 个 CSV 文件。每个 CSV 文件大小在 1 到 500 MB 之间,格式相同(即相同的列顺序)。我有一个列标题的头文件,它与我的 DynamoDB 表的列名匹配。我需要将这些文件导入到 DynamoDB 表中。这样做的最佳方式/工具是什么?
我可以将这些 CSV 文件连接成一个巨大的文件(我宁愿避免这样做),或者在需要时将它们转换为 JSON。我知道BatchWriteItem的存在,所以我想一个好的解决方案将涉及批量写入。
例子:
- DynamoDB 表有两列:first_name、last_name
- 头文件只包含:
first_name,last_name
- 一个 CSV 文件看起来像
:
John,Doe
Bob,Smith
Alice,Lee
Foo,Bar
最后,我编写了一个 Python 函数
import_csv_to_dynamodb(table_name, csv_file_name, colunm_names, column_types)
,将 CSV 导入到 DynamoDB 表中。必须指定列名和列。它使用boto ,并从这个要点中获得了很多灵感。下面是函数以及使用的演示 (main()
) 和 CSV 文件。在 Windows 7 x64 上使用 Python 2.7.5 进行了测试,但它应该适用于任何具有 boto 和 Python 的操作系统。test.csv
的内容(必须与 Python 脚本位于同一文件夹中):稍微更改了先前的答案以使用 CSV 模块,因此您的 CSV 文件可以支持带引号的字符串。
此 NPM 包将任意 json 转换为 DynamoDB 的 PUT 请求。 https://www.npmjs.com/package/json-dynamo-putrequest
绝对值得一试。
我建议您使用 AWS Database Migration Service (DMS)。
如本文所述: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/您可以使用 S3 作为源,使用 DynamoDB 作为目标来导入包含大量元组的 csv 文件。
我已经成功地实现了从 S3 到 DynamoDB 的完整导入过程,并且是最简单、最快的方法。
本质上,您必须:
将 DynamoDB 表吞吐量修改为 25 个读取容量单位和 150 个写入容量单位,包括准备任务在内,我已经能够在不到 7 分钟的时间内插入超过 124k 的元组。
AWS 对此任务的主要建议是使用数据管道服务,但我使用过它并且它更昂贵,并且底层 EMR 集群初始化是一个非常缓慢的过程,所以如果您不想重复此导入任务,请经常使用 DMS反而。