Azure data factory 从映射数据流读取时,JSON中的十进制数被截断

Azure data factory 从映射数据流读取时,JSON中的十进制数被截断,azure-data-factory,Azure Data Factory,当使用映射数据流从JSON数据文件中读取十进制数时,十进制数字将被截断 [Source data] { "value": 1123456789.12345678912345678912 } [Output] 1123456789.12345670000000000000 在数据工厂中,源数据集未配置任何架构。映射数据流投影定义了具有足够精度和比例的十进制数据类型 [Mapping Data Flow script] source(output(

当使用映射数据流从JSON数据文件中读取十进制数时,十进制数字将被截断

[Source data]

{
    "value": 1123456789.12345678912345678912
}
[Output]

1123456789.12345670000000000000
在数据工厂中,源数据集未配置任何架构。映射数据流投影定义了具有足够精度和比例的十进制数据类型

[Mapping Data Flow script]

source(output(
        value as decimal(35,20)
    ),
...
但是,在“数据预览”窗口中查看值或查看管道输出时,该值会被截断

[Source data]

{
    "value": 1123456789.12345678912345678912
}
[Output]

1123456789.12345670000000000000
其他文件格式(如分隔文本)不会出现此问题

预览源数据集中的数据时,十进制数字将以相同的方式截断。无论是否设置架构,都会发生这种情况。如果设置了模式,则数据类型是
number
而不是decimal,因为它是JSON。调用浏览器支持的不同数量的十进制数字,因此我想知道这是否取决于所使用的JSON解析器


这是预期的行为吗?在使用JSON时,Data Factory是否可以配置为支持小数点后的整数?不幸的是,这让人怀疑在Data Factory中执行聚合计算是否可行。

我创建了一个与您相同的测试,得到了如下相同的结果:

更改源数据后,我在值上加了双引号:

然后我使用
toDecimal(Value,35,20)
将字符串类型转换为十进制类型:

看起来效果不错。因此我们可以得出结论:

  • 不要让ADF进行默认数据类型转换,它将截断值的长度
  • 其他文件格式(如分隔文本)不会出现此问题。因为默认值是字符串类型

@joseph xu感谢您确认我遇到的问题。对源系统施加格式约束是一种选择,尽管在本例中存在问题。文档表明,如果没有定义架构,数据应该以字符串的形式到达-“所有新检测到的列(称为漂移列)都以字符串数据类型到达”。@Tom Yes,这是正确的。默认情况下,它将作为字符串数据类型到达,但ADF已执行强制类型转换,导致精度损失。因此,我们需要防止这种默认行为。@Tom如果我的答案对您有帮助,您可以将其作为答案接受(单击答案旁边的复选标记,将其从灰色切换为填充)。这可能对其他社区成员有益。非常感谢。