首页 > 解决方案 > 数据流中的 CosmosDB 接收器不符合目标数据集架构

问题描述

我已经定义了 1 个具有 1 个数据流的管道。数据流执行以下操作:

  1. 使用 av JSON 模式从 Blob 源读取文档
  2. 从 CosmosDB 中查找具有相同架构的第二个源。在 1 个字段上简单查找相等性。
  3. 将来自数据库的数组属性与来自 blob 的数组属性合并
  4. 通过相应的接收器将生成的文档向上插入回同一个 CosmosDB 集合。

尽管不同源和接收器的文档架构相同,但我定义了 2 个不同的架构 - 1 个用于 blob,1 个用于 CosmosDB,源和接收器都使用。

JSON 文档模式本身并不复杂 - 根目录下的属性很少,平面文档的数组属性也很少,正在合并。其中一些属性是整数或双精度数,其余的是字符串。文档得到正确处理,数组中的内容正确合并,然后更新或插入到 CosmosDB 集合中。

然而,没有一个 int 字段是这样写的——它们都被转换为字符串。双打似乎得到了正确的处理。架构在整个数据流中都是正确的。甚至尝试添加显式转换以在接收器之前将类型设置为 int ,但结果仍然相同。

然后我稍微看了一下幕后,发现在幕后创建的脚本包含一个带有错误字段类型的接收器定义 - 而不是整数,这些字段都是字符串。然后我决定智取 ADF 并手动编辑脚本。在运行 Publish 之后,我被证明 ADF 比我更聪明。在发布分支中,脚本神奇地恢复到其原始状态 - 接收器中的字段使用字符串而不是 int。同时,Dev 分支清楚地包含正确定义的类型(尽管是手动定义的)。确实很烦人!

自 v1 以来,ADF 已经走了很长一段路,并且与 SSIS 的开发体验非常相似(甚至更好),但缺乏对字段/列的数据类型的控制,至少在源/汇点似乎有些幼稚。此外,在发布期间这种类型从 int 到字符串的神奇转换(!?!)暂时在南方向增加了 2 个点:(

如果这是一个已知问题,并且如果有已知的解决方法,我们将不胜感激!

标签: azure-data-factory

解决方案


您可以在第 3 步之后创建一个DerivedColumn,并使用此表达式toInteger(your column)

我认为这是一个类似的问题,您可以参考它。


推荐阅读