首页 > 解决方案 > 数据工厂数据流(REST 到 Flatten 到 Delta) - 动态 Flatten

问题描述

我有一个非常简单的数据工厂映射数据流:

{
        "@odata.context": "https://link/api/v1/$metadata#Endpoint1",
        "value": [
            {
                "Id": 0,
                "Name": "Email"
            },
            {
                "Id": 1,
                "Name": "SMS"
            },
            {
                "Id": 2,
                "Name": "Carrier Pigeon"
            }
        ]
}

问题是来自初始数据流开发的元数据(列名和数据类型)——我在其中使用了一个 API 端点作为 Projection 模式——在其他端点执行中被保留和传播。

当它工作时,我意识到端点已加载,但是来自“模型”端点的所有列在当前端点中不存在的列上具有“无”值。这是一个示例,其中 CreationDate 是一个公共字段, Disabled 仅存在于当前端点中,其余的都来自“模型”端点: 水槽中的柱子

另一个示例,当加载另一个具有不同数据类型的 Id 列的端点时,我遇到了数据类型冲突错误:

作业因原因失败:在接收器“sink1”:org.apache.spark.sql.AnalysisException:无法合并字段“Id”和“Id”。无法合并不兼容的数据类型 StringType 和 ShortType;","Details":"org.apache.spark.sql.AnalysisException: 无法合并字段 'Id' 和 'Id'。无法合并不兼容的数据类型 StringType 和 ShortType

我尝试从头开始创建数据流,而不在源投影中导入架构,但 Flatten 转换返回错误 - 我在 Flatten 中使用“body.value”作为表达式 - 我没有“基于规则的映射中的层次结构级别”:

对目标数据流 1 的操作失败:{“StatusCode”:“DFExecutorUserError”,“消息”:“作业失败,原因:在 FoldDown 'Flatten1'(第 14 行/第 8 行):unrollby 应引用数组或映射列”, “细节”:””}

Flatten 中的“body.value”表达式: 展平手动展开

如果有人以这种动态方式成功使用了 Flatten,请告诉我你是怎么做的——我试图理解我做错了什么。

标签: azure-data-factory-2azure-data-factory-pipelineazure-data-flow

解决方案


推荐阅读