Azure 数据工厂将源数据类型转换为不同的格式

Posted

技术标签:

【中文标题】Azure 数据工厂将源数据类型转换为不同的格式【英文标题】:Azure Data Factory Converting Source Data Type to a Different Format 【发布时间】:2022-01-14 21:50:09 【问题描述】:

我正在使用 Azure 数据工厂将数据从 Oracle 数据库复制到 ADLS Gen 2 容器

在 COPY 活动中,我将 Source 添加为 Oracle DB,将 Sink 添加为 ADLS

我想在 Sink 中创建 Parquet 文件

当我点击 Mapping 时,我可以看到 Source 中的 NUMBER 数据类型在 ADF 中被转换为 Double

此外,源中的日期类型在 ADF 中转换为日期时间

因此我无法加载正确的数据

我什至尝试在 Source Query 中进行类型转换以将其转换为与源相同的格式,但 ADF 仍在将其转换为 Double

请参考以下截图:

这里的 ID 列是 Oracle DB 中的 NUMBER,但 ADF 将其视为 Double 并将 .0 添加到我不需要的数据中

即使在将其类型转换为 Number 后,它也没有显示正确的类型

此问题的可能根本原因是什么以及源数据类型未以正确格式显示的原因

因此,我创建的 Parquet 文件不正确,我的 Synapse 表(最终目标)无法添加数据,因为 Synapse 我将 ID 列保留为 Int

理想情况下,ADF 应显示与 Source 中相同的数据类型

如果您有任何解决方案或建议让我尝试,请告诉我

谢谢!

【问题讨论】:

【参考方案1】:

我不是 Oracle 用户,但据我了解,NUMBER 数据类型是通用的,可以基于整数或小数。 Parquet没有这个概念,所以在转换的时候基本都得是十进制类型(比如Double),防止数据丢失。如果您真的希望数据是整数,那么您需要使用数据流(而不是 COPY)将传入的值转换为整数列。

【讨论】:

以上是关于Azure 数据工厂将源数据类型转换为不同的格式的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Azure Synapse 和 Azure 数据工厂将 CSV 转换为 XML?

工厂方法-实现数据格式转换器

将具有不同架构(列)的多个文件 (.csv) 合并/合并为单个文件 .csv - Azure 数据工厂

Azure 数据工厂 - Azure SQL 托管服务不正确的输出列类型

在 Azure 数据工厂映射数据流中截断(非舍入)十进制数

Azure 数据工厂数据流不存在 JSON 格式的空值