google-cloud-platform - 如何安排将数据文件从位于计算引擎实例上的 SFTP 服务器导入 BigQuery?
问题描述
我想要达到的目标:
将每小时传入的数据文件从几个不同的源传输到位于计算引擎 VM 上的 SFTP 文件服务器上,并以经济高效的方式进行实时更新。
语境:
我尝试从中导入数据的软件是旧版软件,不支持直接导出到云。因此,从软件直接连接到云不是一种选择。
但是,它确实支持将数据导出到 SFTP 服务器。不能直接通过任何 GCP 工具获得。
因此,我
vsftpd
在具有可扩展存储的计算引擎 VM 实例上设置了手动 SFTP 服务器,然后为其提供静态 IP 并将该 IP 硬连线到我的软件中。数据现在每小时无缝地到达计算引擎实例。文件按小时生成。因此每个小时都有一个不同的文件。然而,它们可能包含一些重复。即前一小时文件的一些结束记录可能与当前小时文件的开头重叠。
文件来自不同的源提要,我在文件名中有提要名称,因此我的计算引擎 VM 实例上不断增长的数据如下所示:
feed1_210301_0500.csv feed2_210301_0500.csv feed3_210301_0500.csv feed1_210301_0600.csv feed2_210301_0600.csv feed3_210301_0600.csv feed1_210301_0700.csv feed2_210301_0700.csv feed3_210301_0700.csv ...
我试过的:
- 我在 VM 实例中设置了 Bigquery 访问和云存储权限,以将数据从 VM 实例访问到 BigQuery:
我曾尝试将数据直接导入 BigQuery 以及在谷歌云存储上从那里导入数据,但没有选项可以直接将数据从 VM 实例导入 BigQuery,我也无法以某种方式将数据从 VM 导入 GCS,然后加载到 BigQuery但是没有选择,文档也对预定转移的问题保持沉默。
有一些外部数据传输服务,例如Fivetran和HevoData,但它们相对昂贵,而且似乎有点过头了,因为我的源或目标都在 GCP 上,这与拥有第三个 VM 并安排一些导入脚本没有太大区别. (顺便说一句,我目前的解决方法是:D 即使用 python 脚本将数据流式传输到 BigQuery 中,如此处所述)
目前我正在探索DataFusion ,它每个月只有 120 小时免费,底层Dataprep管道有额外的费用,并且不确定它是否正确。此外,我目前正在探索Cloud Scheduler和Cloud Composer之类的工具,以查看是否有适合我的数据需求的工具,但到目前为止还没有找到可行的解决方案。
我很高兴学习任何新的工具和技术,任何改善这种情况的建议也值得赞赏。
解决方案
我刚刚尝试直接从 GCE 虚拟机上传,它运行完美。我在 Cloud API 访问范围中启用了 BigQuery,使用一些随机数据创建了文件 (test_data.csv),它满足我在 BigQuery 表数据集 (test_dataset) 中的表 (test_table) 的架构并运行:
bq load test_dataset.test_table test_data.csv
推荐阅读
- r - 删除 R Plotly 中未使用的子图
- javascript - 将目录反斜杠转换为正斜杠
- recursion - 表达式通过条件但忽略块内的返回语句
- pytorch - 对比损失剂量在某些时期后不会改变
- momentjs - 如何使用时刻的 isBefore 与日期作为字符串?
- r - 使用 kable 打印大型 data.frame 的有效方法
- visual-studio - Visual Studio 2015 社区版在登录时总是崩溃
- json - Ionic 4 使用搜索栏读取本地 JSON 文件
- python - 在数据框中搜索多个子值
- postgresql - PostgreSQL 使用 Linux 大页面