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

Azure Data Factory从Oracle同步到Parquet时decimal精度丢失问题

解决方案

问题根因

该问题是Azure Data Factory 复制活动Oracle连接器的已知默认行为:Oracle源的decimal类型默认会被硬编码转换为decimal(38,18),复制活动的映射配置中的精度、标度参数对Oracle源不生效,而MSSQL连接器实现了源元数据精度传递逻辑,因此相同配置在MSSQL场景下可正常生效。

可行解决方法

  • 方案1:改用数据流(Data Flow)替代复制活动
    在数据流中完成数据同步流程:

    1. 添加Oracle源,完成基础连接配置
    2. 新增派生列转换,对需要保留精度的decimal字段使用toDecimal(<字段名>, <目标精度>, <目标标度>)函数显式指定类型,示例:toDecimal(COLUMN, 4, 1)
    3. 在Parquet接收器的配置中开启保留小数精度选项,即可生成符合预期精度的Parquet文件
  • 方案2:保留复制活动,在Oracle查询侧做显式类型转换
    不使用直接选择表的源配置,改用自定义查询语句,将decimal字段显式转换为目标精度:

    SELECT CAST(COLUMN AS NUMBER(4,1)) AS COLUMN FROM 你的表名
    

    同时保留你当前配置的映射规则,两者配合即可实现精度保留。

  • 方案3:调整Parquet数据集配置
    检查ADLS Parquet数据集的格式设置:

    1. 开启使用原生Parquet小数类型选项,避免ADF默认将decimal转换为二进制类型
    2. 在数据集的结构定义中,手动为每个decimal字段指定precision和scale属性,不要使用自动推断配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:36:03