首页 > 解决方案 > 如何将文件从本地文件服务器 (SFTP) 直接移动到 Snowflake?

问题描述

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

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

标签: pythonazureazure-data-factorysnowflake-cloud-data-platformpysftp

解决方案


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

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

无法创建指向 SFTP 的阶段。

更多信息在这里

注意:理论上,您可以从 SFTP 中获取数据,例如在 Python 中,然后用于INSERT通过 SQL 插入行。然后你不使用舞台,但它更复杂,当然不值得努力。


推荐阅读