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

Azure Data Factory处理PostgreSQL中-infinity时间戳的问题

处理ADF中PostgreSQL timestamp字段的"-infinity"值问题

错误原因

这个long overflow错误是因为PostgreSQL的-infinity timestamp值超出了Spark/Java的时间处理范围(Java Timestamp类型的最小值远晚于0001-01-01),直接读取会触发数值溢出。

解决方法

1. PostgreSQL数据源层面预处理(推荐)

不直接读取原表,通过自定义SQL提前转换-infinity,避免ADF读取时触发错误:

  • 转换为0001-01-01 00:00:00的SQL示例:
    SELECT 
      CASE WHEN your_timestamp_col = '-infinity'::timestamp THEN '0001-01-01 00:00:00'::timestamp ELSE your_timestamp_col END AS your_timestamp_col,
      -- 其他字段
    FROM your_table
    
  • 转换为null的SQL示例:
    SELECT 
      NULLIF(your_timestamp_col, '-infinity'::timestamp) AS your_timestamp_col,
      -- 其他字段
    FROM your_table
    

在ADF的PostgreSQL数据集中选择「查询」模式,填入上述SQL即可。

2. ADF数据流动处理

如果必须读取原表,可通过数据流动的派生列转换替换异常值:

  1. 源转换开启「允许Schema漂移」;
  2. 添加派生列转换,使用条件表达式处理目标字段:
    • 转为指定时间:
      iif(toString(your_timestamp_col) == '-infinity', toTimestamp('0001-01-01 00:00:00'), your_timestamp_col)
      
    • 转为null:
      iif(toString(your_timestamp_col) == '-infinity', null(), your_timestamp_col)
      

注意:若直接读取原表预览就报错,可先通过自定义SQL将数据写入ADF临时存储(如Blob Storage),再用数据流动处理。

3. 修改JDBC连接参数(备选)

在PostgreSQL的JDBC连接字符串中添加驱动参数,自动将-infinity转为null:

jdbc:postgresql://your-host:5432/your-db?stringtype=unspecified&treat-infinity-as-null=true

该参数需依赖较新版本的PostgreSQL JDBC驱动支持。

内容的提问来源于stack exchange,提问作者Anna Melashkina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:33:14