【问题标题】:Azure Data Factory DataFlow Sink to Delta fails when schema changes (column data types and similar)架构更改(列数据类型和类似)时,Azure 数据工厂 DataFlow Sink 到 Delta 失败
【发布时间】:2022-11-10 23:39:10
【问题描述】:

我们有一个 Azure 数据工厂数据流,它将沉入 Delta。我们设置了 Owerwrite、允许插入选项和真空 = 1。 当我们一遍又一遍地运行管道而表结构没有变化时,管道是成功的。 但是,当下沉的表结构发生变化时,ex 数据类型发生了变化,这样的管道失败并出现以下错误。

错误代码:DFExecutorUserError 故障类型:用户配置问题

详细信息:作业失败,原因是:在接收器“ConvertToDelta”:作业中止。

我们尝试将 Vacuum 设置为 0 并返回,Merge Schema 设置,现在,而不是 Overwrite Truncate 和来回,管道仍然失败。

【问题讨论】:

    标签: azure-data-factory delta-lake azure-data-flow


    【解决方案1】:

    您可以尝试启用 Delta Lake 的模式演变 (more information) 吗?默认情况下,Delta Lake 启用了模式强制,这意味着不允许对源表进行更改,这将导致错误。

    即使启用了覆盖,除非您指定架构演变,否则覆盖将失败,因为默认情况下无法更改架构。

    【讨论】:

    • 我可以从 Azure 数据工厂中启用 Delta Lake 架构演变吗?
    【解决方案2】:

    我创建了 ADLS Gen2 存储帐户并创建了输入和输出文件夹并将 parquet 文件上传到输入文件夹中。 我创建了管道并创建了如下数据流:

    我已将 Parquet 文件作为源。 数据流源:

    来源数据集:

    Source的数据预览:

    我创建了派生列来更改表的结构。 派生列:

    我更新了镶木地板文件的“难度”列。我使用以下代码将“难度”列的数据类型从 long 更改为 double:

    difficulty : toDouble(difficulty)
    

    图片供参考:

    我更新了镶木地板文件的“transactions_len”列。我使用以下代码将“transactions_len”列的数据类型从 Integer 更改为 float:

    transactions_len : toFloat(transactions_len)
    

    我更新了镶木地板文件的“编号”列。我使用以下代码将“数字”列的数据类型从 long 更改为 string:

    number : toString(number)
    

    图片供参考:

    Derived 列的数据预览:

    我已将 delta 作为接收器。 数据流接收器:

    水槽设置:

    Sink 数据预览:

    我运行管道它成功执行。

    图片供参考:

    它已成功存储在我的存储帐户输出文件夹中。

    图片供参考:

    该程序在我的机器上运行,请从您的端重新检查。

    【讨论】:

    • 当我将数据类型更改为不兼容时(例如从字符串到 int 或从 datetime 到 int 或类似),我们会收到一个错误。请参阅 CREATE TABLE [dbo].[TableBefore]( [name] int NOT NULL, [schema_id] int NOT NULL, [create_date] int NOT NULL, [modify_date] int NOT NULL, [new_column] varchar( 6) NOT NULL ) 创建表 [dbo].[TableAfter]( [name] nvarchar(128) NOT NULL, [create_date] datetime NOT NULL, [modify_date] datetime NOT NULL, [new_column] int NOT NULL )
    • 您能否提供有关源表和目标表是否相同的信息?
    • 表名没有改变。
    【解决方案3】:

    源(摄取)生成为具有给定文件名的 azure blob。每当我们生成源 parquet 文件而不指定特定文件名而只指定接收器工作的目录时

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 2015-12-18
      • 1970-01-01
      • 2018-11-25
      • 2019-10-24
      相关资源
      最近更新 更多