将DataFrame存入AWS DynamoDB时避免重复错误并保证字段格式正确
解决DynamoDB存入重复错误并正确保存数据的方法
问题原因
你遇到的重复错误是因为DynamoDB表仅将primary_key设为唯一分区键,而数据中存在相同primary_key但不同piece的记录,DynamoDB会判定为主键冲突。要保存这两条记录,需要将primary_key设为分区键,piece设为排序键,组成复合主键,让(primary_key, piece)的组合唯一标识每条记录。
解决方案步骤
1. 调整DynamoDB表的主键结构
确保你的表配置复合主键:
- 分区键:
primary_key(数字类型) - 排序键:
piece(数字类型)
如果表已创建且主键不符合要求,需要重新建表(DynamoDB不支持修改已有表的主键结构)。
2. 修正写入代码
你的原始数据中name字段本身就是字符串,存入时会自动以字符串类型保存,无需额外转换。如果需要强制指定字段类型,可通过dtypes参数声明:
import pandas as pd import awswrangler as wr # 构建DataFrame data = {'primary_key': [1, 1, 2, 3], 'piece': [2, 3, 4, 5], 'name': ['avion', 'train', 'voiture', 'velo'], 'year_sort_key': [2024, 2024, 2024, 2024], 'month': [2, 2, 2, 2]} df = pd.DataFrame(data) # 可选:指定字段类型,确保name为字符串 dtypes = { "primary_key": "N", "piece": "N", "name": "S", "year_sort_key": "N", "month": "N" } # 写入DynamoDB wr.dynamodb.put_df( df=df, table_name=table, dtypes=dtypes )
3. 验证结果
写入完成后,可通过DynamoDB控制台或查询代码确认:
- 四条记录全部成功保存
name字段以字符串类型存储- 相同
primary_key不同piece的记录不再触发主键冲突
内容的提问来源于stack exchange,提问作者ninja_minida
相关产品推荐
相关产品推荐

