python - 如何将文件从本地文件服务器 (SFTP) 直接移动到 Snowflake?
问题描述
我希望使用 Python Snowflake 连接器直接将文件从几个文件服务器(通过 SFTP 访问)移动到 Snowflake。
我曾考虑使用数据工厂 (ADF) 将文件拉入 blob 存储,然后创建一个 Azure 阶段以将数据移动到雪花中。但是,我很想知道是否有一种方法可以在不将数据存储在 blob 存储中的情况下做到这一点?换句话说,我可以将文件直接移动到雪花中而不先将它们存储在其他地方吗?如果不存储在 Blob 存储中,我看不到在 ADF 中执行此操作的方法,并且 Snowflake 文档表明可以通过 Azure/AWS 或从本地文件系统创建阶段,但是对于需要访问的文件服务器可以这样做通过 SFTP?我一直在使用 Python 连接器来解决这个问题,但似乎数据必须先存储在其他地方(本地硬盘驱动器或 blob 存储),然后才能将其暂存到 Snowflake 中。
解决方案
假设您想使用 Snowflake 的批量加载机制(所以是COPY
整个文件,而不是INSERT
单行),文件总是需要在某个时刻最终出现在 blob 存储中。
- 您可以自己将文件从 SFTP 移动到 blob 存储,然后
COPY
在 Snowflake 中使用 - 您可以将文件下载到本地文件系统,然后使用雪花的
PUT
命令将文件复制到暂存位置,然后COPY
再次使用
无法创建指向 SFTP 的阶段。
更多信息在这里。
注意:理论上,您可以从 SFTP 中获取数据,例如在 Python 中,然后用于INSERT
通过 SQL 插入行。然后你不使用舞台,但它更复杂,当然不值得努力。
推荐阅读
- node.js - npm install 在 EC2 实例上中止 - 无法在 GC 中获取堆栈跟踪
- python - 在 Django 中验证模型字段时访问其他模型字段
- django - Django 3.1:使用 CreateView 预填充外键字段
- python - 在 Python 中实现 MATLAB 'fitdist'
- java - Java:如果块内的增量操作不起作用
- angular - chrome加载旧的html文件
- flutter - 防止创建套接字侦听类的多个实例
- javascript - 同一页面上的多个倒计时
- elasticsearch - 为什么当我尝试“elasticsearch-service.bat start”时出现错误“启动 'elasticsearch-service-x64' 服务失败”?
- shopify - Liquid 错误:数组“collection.products”不可分页