使用DynamoDB CLI导入CSV到DynamoDB表遇问题求助
解决CSV导入DynamoDB的几种实用方法
aws dynamodb batch-write-item本身不支持直接读取CSV文件,需要先将CSV转换为它能识别的批量请求格式,或者通过其他工具/脚本完成导入,以下是几种常用方案:
方案1:Shell脚本逐行导入(适合小数据量)
如果你的CSV数据量不大,可以用Shell脚本循环调用put-item命令逐行导入:
- 准备CSV文件(示例
users.csv):
fname,lname Jon,Doe Jane,Smith Bob,Johnson
- 编写Shell脚本
import_csv.sh:
#!/bin/bash INPUT_CSV="users.csv" TABLE_NAME="TABLE-NAME" # 跳过CSV表头行,逐行处理数据 tail -n +2 "$INPUT_CSV" | while IFS=, read -r fname lname; do aws dynamodb put-item \ --table-name "$TABLE_NAME" \ --item '{ "fname": {"S": "'"$fname"'"}, "lname": {"S": "'"$lname"'"} }' done
- 赋予脚本执行权限并运行:
chmod +x import_csv.sh ./import_csv.sh
方案2:Python脚本转换为批量JSON(适合大数据量)
大数据量下批量写入效率更高,用Python将CSV转换为batch-write-item要求的JSON格式,再执行导入:
- 编写转换脚本
csv_to_dynamo_batch.py:
import csv import json # 配置参数 csv_file_path = "users.csv" target_table = "TABLE-NAME" output_json_path = "dynamo_batch.json" batch_requests = [] # 读取CSV并转换为DynamoDB批量请求格式 with open(csv_file_path, mode='r', encoding='utf-8') as csv_file: csv_reader = csv.DictReader(csv_file) for row in csv_reader: dynamo_item = {} # 默认按字符串类型处理,如需数字/布尔类型可自行判断转换 for column, value in row.items(): dynamo_item[column] = {"S": value} batch_requests.append({"PutRequest": {"Item": dynamo_item}}) # 生成最终JSON文件 final_batch = {target_table: batch_requests} with open(output_json_path, mode='w', encoding='utf-8') as json_file: json.dump(final_batch, json_file, indent=2)
- 运行脚本生成批量JSON:
python csv_to_dynamo_batch.py
- 执行批量导入命令:
aws dynamodb batch-write-item --request-items file://dynamo_batch.json
注意:如果CSV条目超过25条(DynamoDB批量请求的单批次上限),需要修改脚本拆分多批次执行,或者用
boto3库直接调用批量写入API自动处理分批。
方案3:AWS Data Pipeline可视化导入(适合非开发人员)
如果不想写代码,可以用AWS Data Pipeline完成可视化导入:
- 登录AWS控制台,进入Data Pipeline服务,新建管道
- 选择「Import DynamoDB table from S3」模板
- 配置S3上的CSV文件路径、目标DynamoDB表名
- 定义列映射关系(指定CSV列对应DynamoDB的属性名和数据类型)
- 启动管道,等待导入完成
内容的提问来源于stack exchange,提问作者Tim-Timer
相关产品推荐
相关产品推荐

