【问题标题】:Azure Data Factory copy activity JSON data type conversion issueAzure 数据工厂复制活动 JSON 数据类型转换问题
【发布时间】:2020-11-08 00:18:10
【问题描述】:

我有一个 azure 数据工厂管道,用于从第三方 API 获取数据并将数据以 .json 格式存储到数据湖。当我单击导入架构时,它显示正确的数据类型格式。

当我将上述数据湖设置为数据流活动源时,Int64 数据类型转换为布尔值。我检查了 Microsoft 文档并知道该值是 0 还是 1,它会自动转换为布尔值。如何避免这种数据类型转换?

【问题讨论】:

    标签: json azure azure-data-factory azure-data-lake azure-data-factory-2


    【解决方案1】:

    首先,验证您是否已在 Source Settings 下将“推断漂移的列类型”选中为 true。

    如果源列中的值仅为 1 或 0,则数据工厂将数据类型检测为布尔值。这可能是一个潜在的错误。

    一种解决方法是,由于您使用的是数据流,因此使用 Case 语句为列添加派生,并根据布尔值在输出中派生 1 和 0。

    【讨论】:

    • 您好,GRT,感谢您的快速回复。你是对的,我们可以在数据流中使用派生列。但问题是,如果有任何值而不是 0 或 1,则派生列表达式可能会出错,对吧?
    【解决方案2】:

    最简单的方法就是将所有的schema重置为String,即不转换Source dataset中的数据类型。

    例如,这是我的源数据集架构和数据,setNum 中的所有值都是 1 或 0:

    数据流源投影,setNum的数据类型首先考虑为布尔值。

    重置架构:所有数据类型都是字符串。

    然后数据工厂将在 Sink 级别转换数据类型。类似于从 csv 文件中复制数据。

    更新:

    您可以先将架构重置为字符串。

    然后使用Derived Column 根据需要更改/转换数据类型。

    使用下面的表达式:

    toShort()
    toString()
    toShort()
    

    这样就可以解决问题了。

    【讨论】:

    • 嗨@Leon,感谢您的回复。在这种情况下,所有字段都将被视为字符串。我不想更改数据类型。
    • @SyamKumar,实际上,这不会改变数据类型。众所周知,平面文件中的所有数据类型都是字符串。如果不重置架构,数据预览也会出现数据流错误。数据工厂将数据转换为合适的数据类型并映射到后端的 Sink。
    • 数据预览没有错误。如果我重置架构,输出将类似于 replies_count : "0" rank : "1235" 如果数据类型是整数,它应该显示为 rank : 1234
    • @SyamKumar 首先将架构重置为字符串,然后使用派生列重置数据类型。我更新了我的答案,希望你能清楚地理解它。通常,这对我们来说是最好的方式。
    • 这行得通。但我正在使用复杂的数组,在数组内部,有很多对象和子数组。所有领域都需要改变,这对我来说会很痛苦。另外,如果在数组中添加了任何新字段,我应该更新派生列,对吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2020-08-18
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2019-08-20
    相关资源
    最近更新 更多