ADF管道无法从Parquet文件读取DECIMAL(36,0)值



我们正在使用复制活动将parquet文件数据复制到我们的托管实例SQL服务器中。

源程序使用SQL Serverless查询来读取parquet文件。有一个新列会带来大值并导致失败,例如28557632721941551956925858310928928

使用SQL Serverless直接从Azure Data Studio查询是没有任何问题的。

错误信息如下:

{"errorCode"2200";消息": "故障发生在'源'端。ErrorCode = UserErrorInvalidDataValue '类型= Microsoft.DataTransfer.Common.Shared。HybridDeliveryException,Message=从source., source = microsoft . datattransfer . clientlibrary, " Type=System. "OverflowException、消息=转换溢出源= System.Data,","failureType"UserError"target";Stage Parquet File Data"details" []}

我还尝试使用parquet文件数据集作为我的源。这是我收到的失败:

{"errorCode"2200";"message"ErrorCode = ParquetBridgeInvalidData = Microsoft.DataTransfer.Common.Shared类型。HybridDeliveryException,Message=原始类型FixedLenByteArray的列gwcbi___seval,原始类型Decimal包含给定原始类型的无效值,Source= microsoft . datattransfer . richfile . parquettransferplugin,'"failureType"UserError"target";Stage Parquet File Data"details" []}

这看起来像是Synapse/ADF管道的一个严重限制。什么好主意吗?

谢谢,杰森

转换溢出意味着值对于它试图存储的数据类型来说太大了。在ADF复制活动中不支持精度大于28的小数(BigDecimals),这就是上述问题的原因。

作为一种解决方法,您可以尝试将数据类型强制转换为其他类型(例如String/varchar)

但是如果您有关于改进ADF产品的反馈,请随时在ADF IDEAS论坛中登录- https://feedback.azure.com/d365community/forum/1219ec2d-6c26-ec11-b6e6-000d3a4f032c

最新更新