首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据工厂数据流(REST到Flatten到Delta) -动态平坦

数据工厂数据流(REST到Flatten到Delta) -动态平坦
EN

Stack Overflow用户
提问于 2021-09-18 19:40:42
回答 1查看 432关注 0票数 0

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

  • my是一个REST,但是对于所有的目的和目的,您可以想象是一个JSON文件源
  • 源JSON有一个类似于

的OData结构

{ "@odata.context":"https://link/api/v1/$metadata#Endpoint1"“,”https://link/api/v1/$metadata#Endpoint1"“:{ "Id":0,"Name":"Email”},{ "Id":1,"Name":"SMS“},{ "Id":2,“名称”:“载体鸽”}

  • 扁平化层次结构应按"body.value“动态展开,并以新列的形式检索所有底层节点--在上面的示例中,发送到接收器的列应该是Id,将平面命名为:

  • Sink是ADLSgen2中的Delta表,启用了合并模式:

  • 上面的数据流将API端点作为参数,并在Foreach活动中为端点列表执行:

  • Foreach配置:

问题是,初始数据流开发中的元数据(列、名称和数据类型)--我使用API端点作为投影模式--是在其他端点执行中保存和传播的。

当它正常工作时,我意识到已经加载了端点,但所有来自“模型”端点的列都在当前端点中不存在的列上带有“无”值。这是一个示例,其中CreationDate是一个公共字段,仅在当前端点中禁用,其余的都来自“模型”端点:

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

作业由于原因而失败:在Sink‘Sink 1’:org.apache.spark.sql.AnalysisException:未能合并字段'Id‘和'Id’。未能合并不兼容的数据类型StringType和ShortType;“,StringType未能合并字段'Id‘和'Id’。未能合并不兼容的数据类型StringType和ShortType

我尝试从头创建数据流,而没有在Source投影中导入模式,但是平面转换返回了一个错误--我在平面中使用了"body.value“作为表达式--而且在基于规则的映射中没有”层次级别“的选项:

对目标数据的操作失败:{"StatusCode":"DFExecutorUserError",“Message”:“由于原因而导致作业失败: at FoldDown‘Flatten1’(第14/Col 8行):unrollby应该引用数组或地图列”,“Details”:“}

"body.value“用扁平表示:

如果有人以这种动态的方式成功地使用扁平化,请告诉我你做得如何--我正在努力理解我做错了什么。

EN

回答 1

Stack Overflow用户

发布于 2022-04-11 15:26:10

我也有过类似的问题。我的解决办法是:

  • I在扁平之前添加了新列tempArray的派生列,值为array("1")。在平面中的
  • ,然后按tempArray展开,在层次结构级别使用array("1")

就像一种魅力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69237904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档