从S3导入大文件到DynamoDB时如何控制对象类型
DynamoDB导入CSV时TTL列类型误判的解决办法
方法1:导入时用自定义映射模板强制指定类型
在DynamoDB导入向导的「配置导入设置」环节,选择自定义映射模板,通过JSON格式明确指定各列数据类型:
{ "phone": "$.phone", "ttl": {"N": "$.ttl"} }
DynamoDB底层数据格式中,数字类型需用"N"标签包裹,这个模板会强制将ttl列解析为数字,覆盖自动推断结果。
方法2:预处理CSV修正列类型
用脚本批量转换ttl列类型后再导入,以Python pandas为例:
import pandas as pd # 读取原CSV df = pd.read_csv('your-source-file.csv') # 将ttl列转为整数类型 df['ttl'] = df['ttl'].astype(int) # 保存处理后的CSV(不含索引列) df.to_csv('fixed-file.csv', index=False)
处理后的CSV重新导入时,DynamoDB会正确识别ttl为数字类型。
方法3:导入后批量更新数据类型
如果已完成导入,可通过脚本批量修正ttl列类型,用boto3实现:
import boto3 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('your-target-table') def batch_update_ttl(): response = table.scan() items = response['Items'] with table.batch_writer() as batch: for item in items: ttl_num = int(item['ttl']) batch.put_item( Item={ 'phone': item['phone'], 'ttl': ttl_num } ) # 处理分页数据 while 'LastEvaluatedKey' in response: response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey']) items = response['Items'] with table.batch_writer() as batch: for item in items: ttl_num = int(item['ttl']) batch.put_item( Item={ 'phone': item['phone'], 'ttl': ttl_num } ) batch_update_ttl()
注意:90万行数据批量更新时,建议本地运行脚本或调整Lambda的超时时间与内存配置,避免执行中断。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

