azure-data-factory - 数据流中的 CosmosDB 接收器不符合目标数据集架构
问题描述
我已经定义了 1 个具有 1 个数据流的管道。数据流执行以下操作:
- 使用 av JSON 模式从 Blob 源读取文档
- 从 CosmosDB 中查找具有相同架构的第二个源。在 1 个字段上简单查找相等性。
- 将来自数据库的数组属性与来自 blob 的数组属性合并
- 通过相应的接收器将生成的文档向上插入回同一个 CosmosDB 集合。
尽管不同源和接收器的文档架构相同,但我定义了 2 个不同的架构 - 1 个用于 blob,1 个用于 CosmosDB,源和接收器都使用。
JSON 文档模式本身并不复杂 - 根目录下的属性很少,平面文档的数组属性也很少,正在合并。其中一些属性是整数或双精度数,其余的是字符串。文档得到正确处理,数组中的内容正确合并,然后更新或插入到 CosmosDB 集合中。
然而,没有一个 int 字段是这样写的——它们都被转换为字符串。双打似乎得到了正确的处理。架构在整个数据流中都是正确的。甚至尝试添加显式转换以在接收器之前将类型设置为 int ,但结果仍然相同。
然后我稍微看了一下幕后,发现在幕后创建的脚本包含一个带有错误字段类型的接收器定义 - 而不是整数,这些字段都是字符串。然后我决定智取 ADF 并手动编辑脚本。在运行 Publish 之后,我被证明 ADF 比我更聪明。在发布分支中,脚本神奇地恢复到其原始状态 - 接收器中的字段使用字符串而不是 int。同时,Dev 分支清楚地包含正确定义的类型(尽管是手动定义的)。确实很烦人!
自 v1 以来,ADF 已经走了很长一段路,并且与 SSIS 的开发体验非常相似(甚至更好),但缺乏对字段/列的数据类型的控制,至少在源/汇点似乎有些幼稚。此外,在发布期间这种类型从 int 到字符串的神奇转换(!?!)暂时在南方向增加了 2 个点:(
如果这是一个已知问题,并且如果有已知的解决方法,我们将不胜感激!
解决方案
您可以在第 3 步之后创建一个DerivedColumn
,并使用此表达式toInteger(your column)
。
我认为这是一个类似的问题,您可以参考它。
推荐阅读
- excel - 在 Range 中查找一个单词并再次查找,直到 Range 结束
- php - 如何在 PHP 中合并表格数据
- mysql - 如何返回时间戳的日期集合
- javascript - 由于目标被视为被动,无法在被动事件侦听器中阻止默认值。Three.js 轨迹球控件
- android - 键盘打开时Android警报对话框不居中
- javascript - 当人加入昵称 IRC
- jquery - 将接收到的数据从 ajax 发送到另一个 ajax 作为文件
- reactjs - 测试使用函数构建的 React 组件
- reactjs - 组件内的 React 解析函数作为 React Element
- angular - 在所有验证通过之前如何防止表单提交[Angular 7]