You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:17:38