我正在尝试在ADF中进行一些优化。安装程序是一种第三方工具,每个对象将一个JSON文件复制到BLOB存储容器中。这些输入到映射数据流。第三方工具编写的单个文件效果很好。如果我使用Azure复制数据活动将这些文件复制到另一个BLOB文件夹,则MDF将无法再解析文件并给出错误:“ JSON解析错误,不支持的编码或多行。”我从合并文件开始,但是无论选择哪种复制行为,结果都是相同的。
第二编辑:经过一天的工作,我发现从JSON复制活动合并文件到JSON肯定会在将每个JSON对象导入到合并文件时为其添加EOL字符。我还发现,合并文件中的那些EOL字符肯定会使MDF失败。如果我从合并文件中删除所有EOL字符,则相同的MDF将起作用。对我来说,这是一个错误。复制活动正在添加一个破坏MDF的字符。我的某些数据似乎有第二个问题,它不是作为一个单独的文件不会失败,但是在连接时会出现问题,当我尝试将所有文件拉在一起时会破坏MDF,但是我已经测试了1-5000的基本行为文件,并能够重复失败/成功测试。
我拿了原始文件和复制的文件,并通过各种测试对它们进行了测试,最终我将其转储到Notepad ++中时发现了这些内容: 复制的文件:
{"CustomerMasterData":{"Customer":[{"ID":"123456","name":"Customer Name",}]}}\r\n
原始文件:
{"CustomerMasterData":{"Customer":[{"ID":"123456","name":"Customer Name",}]}}\n
如果我将复制的文件从\ r \ n结尾更改为\ n,则MDF可以再次读取该文件。这里发生了什么?以及如何更改文件写入行为或MDF设置,以便可以在没有CRLF的情况下连接或复制文件?
编辑:新信息-似乎在进一步审查中,也许缩小/空格删除是罪魁祸首。如果我下载了由ADF副本创建的文件,并使用JSON格式化程序对其进行了格式化,那么它将起作用。也许CRLF-> LF掩盖了其他内容。我目前不确定该怎么办,但实在令人沮丧。 其他可能相关的信息:
根据注释进行了编辑,以使内容更加清晰: 对于文件中的单个JSON元素,我可以使其正常工作-数据预览在运行时返回与管道相同的成功或失败
如果ADF合并了多个文档,则改为显示以下内容。似乎在进一步审查中,也许缩小/空格删除是罪魁祸首。如果我下载了由ADF副本创建的文件,并使用JSON格式化程序对其进行了格式化,那么它将起作用。也许CRLF-> LF掩盖了其他内容。我不确定此时该怎么办,但是它非常令人沮丧。
Repro:将任何有效的JSON创建为单个文件,将其放在blob存储中,用作映射数据流中的源,以执行任何接收器操作。创建具有相同架构的第二个文件,使用通配符路径使它们都以相同的流程运行。使用带有合并文件的复制活动作为接收器复制活动,并使用对象数组作为文件模式。尝试使您的MDF使用此新文件。如果失败,请下载ADF创建的文件,通过格式化程序运行它(我已经使用了VS Code->来自标准VS Code JSON扩展名的“格式化文档”和VS 2019“ Unminify”命令)并重新上传...应该现在可以工作。
答案 0 :(得分:1)
不知道您是否已经解决了问题:我 3 天前遇到了完全相同的问题,经过多次尝试后我找到了解决方案:
答案 1 :(得分:0)
根据我的测试:
1.copy数据活动无法将unix(LF)更改为windows(CRLF)。
2.MDF还可以解析unix(LF)文件和Windows(CRLF)文件。
也许还有其他问题。
顺便说一句,我看到原始文件中"name":"Customer Name"
后面有一个逗号,我在测试前将其删除。