如何使用制表符分隔的UTF-16 le文件作为Microsoft Azure数据工厂数据流中的源

thigvfpy  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(108)

我正在为一位医疗行业的客户工作(所以请原谅截图中的许多删节)。我是新来的,所以请原谅我可能犯的任何错误。
我们试图用来自2个不同来源(CSV文件)的数据填充SQL数据库表。两者都在BLOB存储上交付,我们可以在其中进行读取访问。
我使用Azure数据工厂构建的第一个流可以完美地工作,所以我只是想克隆该流并将其指向第二个源。然而,来自第二个源的CSV文件是TAB分隔和UTF-16 le编码的。幸运的是,您可以在创建数据集时设置这些参数:Dataset Settings当我使用“Preview Data”选项验证数据集时,我看到一个很好的列表,其中包含来自CSV文件的数据:Output from preview data所以它似乎工作得很好!
现在我创建一个新的数据流,并在源中使用新创建的数据源。所有设置都是默认的。data flow settings
现在,当我打开DataPreview并单击refresh时,我得到的是垃圾和NULL输出,而不是我在测试数据源时收到的好数据。output from source block in dataflow在我创建的第一个数据流中,这确实从csv文件中产生了预期的数据,但不知何故,数据现在被打乱了?
有人能帮助我在这里错过了什么或做错了什么吗?

yr9zkbsy

yr9zkbsy1#

已尝试复制,在此您可以查看是否具有数据集设置,
编码为UTF-8而不是UTF-16,那么您将无法预览数据。

数据流中的数据预览:

如果我甚至尝试启用UTF-16LE来进行编码,就会出现这样的问题:

因此,现在您可以更改Encoding并使用管道。

8yoxcaq7

8yoxcaq72#

什么都不起作用的原因是当你选择UTF-16 LE时,Dataflow(愚蠢地)仍然将行结尾\r\n读取为单个字节。这使得未使用的00高字节被认为是下一行的开始,从而使所有LE和BE无序。一个关键的迹象是,头通常会正确读取,但文件的其余部分将乱码,甚至包括在中国范围内的unicode解释。
有些人建议使用Azure函数,但我正在研究的一种方法似乎也有效,但仍然存在于数据流中,即故意读取文件,就好像它由UTF-8的整行列组成,具有行结束符但没有分隔符。
这种方法创建了一个呈现为UTF 8的UTF 16字节流,可以通过派生列和过滤器的组合来清除该流。其中最强大的组件是函数decode([text input],'UTF 16'),它可以在单个调用中剥离所有高端字节。

1.初始读取生成4行

FF FE 'H' 00 'E' 00 'L' 00 'L' 00 'O' \r
?\n
'W' 00 'O' 00 'R' 00 'L' 00 'D'?\r
?\n〈?〉

2.应用decode([row],'UTF 16')

你好\r
?\n
世界?\r
?\n

3.应用过滤长度([行])!=1

你好\r
世界?\r

4.使用iif()查找并销毁除第一行外的每一行的最后一个char

你好\r
WORLD \r

5.庆祝和保存?

给Microsoft的脚注消息-在处理16位文件格式时,将行结束标记读取为8位是错误的,应予以纠正。当选择16位时,应立即将\r\n的预期解释从OD OA更改为0 D 00 0A 00。

相关问题