【问题标题】:Parquet troubles with decimal in Azure Data Factory V2Azure 数据工厂 V2 中的 Parquet 小数问题
【发布时间】:2019-03-21 16:27:10
【问题描述】:

自从 3 或 4 天以来,我在使用 Azure 数据工厂 V2 以 parquet 文件格式写入十进制值时遇到了麻烦。

复制步骤非常简单,从包含数值的 SQL 源,我使用复制活动将其映射到 parquet 文件。

在运行时抛出以下异常:

{
    "errorCode": "2200",
    "message": "Failure happened on 'Source' side. ErrorCode=UserErrorParquetTypeNotSupported,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Decimal Precision or Scale information is not found in schema for column: ADDRESSLONGITUDE,Source=Microsoft.DataTransfer.Richfile.ParquetTransferPlugin,''Type=System.InvalidCastException,Message=Object cannot be cast from DBNull to other types.,Source=mscorlib,'",
    "failureType": "UserError",
    "target": "Copy Data"
}

在源中,抱怨列被定义为 numeric(32,6) 类型。

我认为问题仅限于 parquet sink,因为将目标格式更改为 csv 会导致管道成功。

有什么建议吗?

根据 Jay 的回答,这是整个数据集:

SELECT 
    [ADDRESSLATITUDE]
FROM 
    [dbo].[MyTable]

【问题讨论】:

    标签: azure-data-factory-2


    【解决方案1】:

    基于数据工厂复制活动中的SQL Types to Parquet Logical TypesData type mapping for Parquet files,支持Decimal数据类型。将十进制数据转换为二进制数据类型。

    回到你的错误信息:

    “源”端发生故障。 ErrorCode=UserErrorParquetTypeNotSupported, '类型=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, 消息=在架构中找不到小数精度或比例信息 对于列: ADDRESSLONGITUDE,Source=Microsoft.DataTransfer.Richfile.ParquetTransferPlugin,'' Type=System.InvalidCastException,Message=Object 不能从 DBNull 转为其他类型。,Source=mscorlib,'

    如果你的数值数据有null值,它将被转换为Int数据类型,没有任何 十进制精度或比例信息。

    Csv 格式没有这种转换过程,因此您可以为数字数据设置默认值。

    【讨论】:

    • 感谢您的回答杰。这是否意味着不支持可为空的小数?不……不敢相信!!
    • @FabriceMichellonet 你能提取几个样本数据来做同样的测试吗?
    • 此外,在我的示例中没有空值。 SELECT [ADDRESSLATITUDE] FROM [dbo].[MyTable] 返回 3 个非空行,精确值为 0.000000。
    • @FabriceMichellonet 尝试重现您的问题,任何进展都会在我的回答中更新。谢谢。
    猜你喜欢
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多