我有一个Data Factory v2作业,可将文件从SFTP服务器复制到Azure Data Lake Gen2。
.csv文件和.zip文件混合在一起(每个文件仅包含一个csv文件)。
我有一个数据集用于复制csv文件,另一个数据集用于复制zip文件(Compressoin类型设置为ZipDeflate)。问题是ZipDeflate创建了一个包含csv文件的新文件夹,我需要它尊重文件夹层次结构而不创建任何文件夹。
在Azure数据工厂中有可能吗?
答案 0 :(得分:0)
很好的问题,我遇到了类似的麻烦*,而且似乎没有充分的记录。
如果我没记错的话,Data Factory假定ZipDeflate可能包含多个文件,并且无论如何似乎都会创建一个文件夹。
如果您的Gzip文件只有一个文件,那么它将仅创建一个文件。
您可能已经知道这一点,但是将其摆在最前沿可以帮助我意识到明智的默认数据工厂具有的功能:
我的理解是,Zip标准是一种 archive 格式,正巧使用Deflate算法。作为存档格式,它自然可以包含多个文件。
例如,gzip只是一种压缩算法,它不支持多个文件(除非tar首先存档),因此它将解压缩为仅一个没有文件夹的文件。
您可能还需要执行其他数据工厂步骤以获取层次结构并将其复制到平面文件夹,但这会导致随机文件名(您可能会满意,也可能会不满意)。对我们来说,它是行不通的,因为下一步我们需要可预测的文件名。
n.b。数据工厂不会移动文件,而是会复制文件,因此,如果文件很大,可能会很麻烦。但是,您可以通过数据湖存储API或Powershell等触发元数据移动操作。
*我的情况有点疯狂,因为我从源系统接收到名为.gz的文件,但实际上是变相的zip文件!最后,最好的选择是让我们的源系统更改为真正的gzip文件。