如何将文件从本地文件服务器 (SFTP) 直接移动到 Snowflake?

How can I move files from a local file server (SFTP) directly into Snowflake?

我希望使用 Python Snowflake 连接器将文件从几个文件服务器(通过 SFTP 访问)直接移动到 Snowflake。

我考虑过使用数据工厂 (ADF) 将文件拉入 blob 存储,然后创建一个 Azure 阶段以将数据移动到 Snowflake。但是,我很好奇是否有一种方法可以在不将数据存储在 blob 存储中的情况下执行此操作?换句话说,我可以将文件直接移动到 Snowflake 中而不先将它们存储在其他地方吗?如果不存储在 Blob 存储中,我看不到在 ADF 中执行此操作的方法,并且 Snowflake 文档表明可以通过 Azure/AWS 或从本地文件系统创建阶段,但是可以为文件服务器完成此操作吗需要通过 SFTP 访问?我一直在使用 Python 连接器处理此问题,但似乎仍然必须先将数据存储在其他地方(本地硬盘驱动器或 blob 存储),然后才能将其暂存到 Snowflake 中。

假设您想要使用 Snowflake 的批量加载机制(因此 COPY 整个文件,而不是 INSERT 单行),文件总是需要在某个时刻结束在 blob 存储中。

  • 您可以自己将文件从 SFTP 移动到 blob 存储,然后在 Snowflake
  • 中使用 COPY
  • 您可以将文件下载到本地文件系统,然后使用 Snowflake 的 PUT 命令将文件复制到暂存位置,然后再次使用 COPY

无法创建指向 SFTP 的阶段。

更多信息here

注意:理论上您可以从 SFTP 中获取数据,例如在 Python 中,然后使用 INSERT 通过 SQL 插入行。那你就不用stage了,但是比较复杂,肯定不值得。

在过去的几个月里,Azure 数据工厂现在通过 Snowflake 连接器与 Snowflake 进行了本地集成。因此,当前的答案是,您可以在 ADF 门户中使用一个连接器。

ADF 现在支持与 Snowflake 的数据集成:

使用 source/sink 矩阵 table、映射数据流和查找 activity[=24] 的副本 Activity 支持 Snowflake 连接器=]: