我定义了一个具有1个数据流的管道。数据流执行以下操作:
- 使用av JSON模式从Blob源读取文档
- 从具有相同架构的CosmosDB中查找第二个源。在1字段上查找相等项的简单操作
- 将来自数据库的数组属性与来自blob的数组属性合并
- 通过相应的接收器将生成的文档重新插入到同一个CosmosDB集合中
尽管不同的源和接收器的文档模式是相同的,但我定义了两个不同的模式——一个用于blob,一个用于CosmosDB,由源和接收器使用。
JSON文档模式本身并不复杂——根下只有几个属性,而平面文档的数组属性只有几个属性。其中一些属性是int或double,其余的是字符串。文档得到了正确的处理,数组中的内容被正确地合并,然后被udected或插入到CosmosDB集合中。
然而,没有一个int字段是这样写的——它们都被转换为字符串。双打似乎处理得当。架构在整个数据流中都是正确的。甚至尝试添加显式转换,以便在接收之前将类型设置为int,但结果仍然相同。
然后我仔细查看了一下,发现幕后创建的脚本包含一个具有错误字段类型的接收器定义——字段都是字符串,而不是int。然后我决定智胜ADF,并手动编辑脚本。在运行Publish之后,我被证明ADF比我更聪明。在发布分支中,脚本神奇地恢复到了原始状态-接收器中字段的字符串而不是int。同时,Dev分支清楚地包含了正确定义的类型(尽管是手动的(。确实很烦人!
自v1以来,ADF已经走了很长的路,与SSIS的开发经验非常相似(甚至更好(,但对字段/列的数据类型缺乏控制,至少在源/汇点似乎有些幼稚。此外,在发布期间(!?!(,类型从int到字符串的这种神奇转换暂时在向南的方向上又增加了2个点:(
如果这是一个已知的问题,而且如果有已知的解决方法,我们将不胜感激!
您可以在步骤3之后创建一个DerivedColumn
,并使用此表达式toInteger(your column)
。
我认为这是一个类似的问题,你可以参考一下