从S3导入CSV到DynamoDB,如何指定键类型以创建GSI?
DynamoDB导入数据类型与GSI创建问题解决方案
一、强制CSV导入指定数据类型:先建表再导入
完全可以通过先创建表再导入数据的方式,指定updatedAt的数值类型,步骤如下:
- 提前在DynamoDB控制台或通过CLI创建表,明确将
updatedAt字段的类型设置为N(数值型),同时配置好表的主键结构。 - 启动S3导入流程时,选择**"导入到现有表"**选项,而非"创建新表"。导入过程会严格匹配你预先定义的字段类型,CSV中的Unix时间戳会被自动解析为数值存入
updatedAt,不会再变成字符串。 - 注意:CSV文件中
updatedAt列的内容必须是纯数字格式,不能包含引号、逗号或其他非数字字符,否则会触发类型不匹配的导入错误。
二、JSON导入报错的排查方向
CloudWatch的"Unexpected token"错误通常是JSON格式不符合DynamoDB导入要求导致的,可从以下点排查:
- 确保JSON文件采用每行一个独立JSON对象的格式,不能用数组包裹所有条目(例如正确格式:
{"id": "123", "updatedAt": 1620000000},错误格式:[{"id": "123"}, {"id": "456"}])。 - 检查文件中是否存在未转义的特殊字符,比如未闭合的引号、非法换行符,这些都会破坏JSON语法结构。
- 可使用本地工具
jq批量校验JSON文件的合规性,命令示例:jq '.' your-file.json,若格式错误会直接提示问题位置。
三、GSI创建与查询逻辑实现
当updatedAt字段为数值型后,直接在DynamoDB表的配置界面创建GSI:
- 将
updatedAt设置为GSI的分区键或排序键,根据你的查询需求选择。 - 配置好GSI的读写容量模式(按需或预置),即可基于该GSI编写数值范围查询等逻辑。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

