Azure 数据工厂在不创建文件夹的情况下缩小

问题描述 投票:0回答:2

我有一个数据工厂 v2 作业,它将文件从 SFTP 服务器复制到 Azure Data Lake Gen2。

混合有 .csv 文件和 .zip 文件(每个文件仅包含一个 csv 文件)。

我有一个用于复制 csv 文件的数据集,另一个用于复制 zip 文件(将 Compressoin 类型设置为 ZipDeflate)。问题是 ZipDeflate 创建了一个包含 csv 文件的新文件夹,我需要它来尊重文件夹层次结构而不创建任何文件夹。

这在 Azure 数据工厂中可能吗?

azure zip azure-data-factory
2个回答
0
投票

好问题,我遇到了类似的麻烦*,而且似乎没有很好的记录。

如果我没记错的话,数据工厂假设 ZipDeflate 可以包含多个文件,并且无论如何都会创建一个文件夹。

如果您的 Gzip 文件只有一个文件,那么它只会创建该文件。

您可能已经知道这一点,但将其放在您的脑海中有助于我意识到合理的默认数据工厂具有:

我的理解是,Zip 标准是一种 archive 格式,它恰好使用 Deflate 算法。作为一种存档格式,它自然可以包含多个文件。

而 gzip(例如)只是压缩算法,它不支持多个文件(除非先 tar 存档),因此它将解压缩为没有文件夹的文件。


您可以有一个额外的数据工厂步骤来获取层次结构并将其复制到一个平面文件夹中,但这会导致随机文件名(您可能会或可能不会满意)。对于我们来说,它不起作用,因为我们管道中的下一步需要可预测的文件名。

n.b.数据工厂不会移动文件,而是复制它们,因此如果它们非常大,这可能会很痛苦。不过,您可以通过数据湖存储 API 或 Powershell 等触发元数据移动操作。

*我的情况有点疯狂,因为我从源系统接收名为 .gz 的文件,但实际上是伪装的 zip 文件!最后最好的选择是要求我们的源系统更改为真正的 gzip 文件。


0
投票

您所需要做的就是取消选中该选项(将 zip 文件名保留为文件夹) )在复制活动中如下。Screenshot

© www.soinside.com 2019 - 2024. All rights reserved.