AWS Python Glue Job无法将数值列导入PostgreSQL RDS问题咨询
问题
我有一个Glue任务,通过JDBC连接从S3存储桶读取CSV文件并将数据导入PostgreSQL RDS表。目前字符串/varchar类型列可正常导入,但数值类型列无法导入。以下是PostgreSQL RDS的列类型(附截图),对应的Python Glue脚本如下:
def __step_mapping_columns(self): # Script generated for node S3 bucket dynamicFrame_dept_summary = self.glueContext.create_dynamic_frame.from_options( format_options={"quoteChar": '"', "withHeader": True, "separator": ","}, connection_type="s3", format="csv", connection_options={ "paths": [ "" ], "recurse": True, }, transformation_ctx="dynamicFrame_dept_summary", ) # Script generated for node ApplyMapping applyMapping_dept_summary = ApplyMapping.apply( frame=dynamicFrame_dept_summary, mappings=[("PROCESS_MAIN", "string", "process_main", "string"), ("PROCESS_CORE", "string", "process_core", "string"), ("DC", "string", "dc", "string"), ("BAG_SIZE", "string", "bag_size", "string"), ("EVENT_30_LOC", "string", "start_time_utc", "string"), ("VOLUME", "long", "box_volume", "long"), ("MINUTES", "long", "minutes", "long"), ("PLAN_MINUTES", "long", "plan_minutes", "long"), ("PLAN_RATE", "long", "plan_rate", "long")], transformation_ctx="applyMapping_dept_summary", ) logger.info(mappings) return applyMapping_dept_summary
请问该问题的可能原因是什么?
可能原因分析
- CSV文件数值列存在非合法数据:
VOLUME、MINUTES等数值列可能包含空值、文本标识(如"NA"、"无")、带格式符号的数值(如千分位逗号、货币符号),Glue无法将这些内容解析为long类型,导致导入失败。 - 数据类型映射不匹配:PostgreSQL目标表的数值列类型可能和Glue指定的
long不兼容,比如目标列是integer、numeric或float:- 若目标列是
integer,CSV中数值超出int范围会触发溢出错误; - 若目标列是
numeric/float,强制映射为long会丢失精度或导致类型转换失败。
- 若目标列是
- Glue自动推断类型干扰:默认情况下Glue会自动推断CSV列类型,如果推断结果为
string(比如数值列存在少量非数值数据),后续强制映射为long会引发类型转换异常。可在format_options中添加"inferSchema": False,或显式指定schema避免自动推断。 - 空值约束冲突:PostgreSQL目标数值列若设置了
NOT NULL约束,但CSV中对应列存在空值,且未配置默认值,会导致导入失败;或Glue对空值的处理逻辑与PostgreSQL不兼容。 - JDBC连接参数缺失:连接PostgreSQL的JDBC URL可能缺少关键参数(如
stringtype=unspecified),导致JDBC层面的数值类型转换错误。 - 数值精度/范围不匹配:如果CSV中的数值是小数(如
PLAN_RATE包含小数),映射为long会直接报错,此时需根据PostgreSQL目标列类型,将Glue映射类型改为double或decimal。
内容的提问来源于stack exchange,提问作者saima m
相关产品推荐
相关产品推荐

