首页 > 解决方案 > 如何安排将数据文件从位于计算引擎实例上的 SFTP 服务器导入 BigQuery?

问题描述

我想要达到的目标:

将每小时传入的数据文件从几个不同的源传输到位于计算引擎 VM 上的 SFTP 文件服务器上,并以经济高效的方式进行实时更新。

语境:

  1. 我尝试从中导入数据的软件是旧版软件,不支持直接导出到云。因此,从软件直接连接到云不是一种选择。

  2. 但是,它确实支持将数据导出到 SFTP 服务器。不能直接通过任何 GCP 工具获得。

  3. 因此,我vsftpd在具有可扩展存储的计算引擎 VM 实例上设置了手动 SFTP 服务器,然后为其提供静态 IP 并将该 IP 硬连线到我的软件中。数据现在每小时无缝地到达计算引擎实例。

  4. 文件按小时生成。因此每个小时都有一个不同的文件。然而,它们可能包含一些重复。即前一小时文件的一些结束记录可能与当前小时文件的开头重叠。

  5. 文件来自不同的源提要,我在文件名中有提要名称,因此我的计算引擎 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
    ...
    

我试过的:

  1. 我在 VM 实例中设置了 Bigquery 访问和云存储权限,以将数据从 VM 实例访问到 BigQuery:

在此处输入图像描述

  1. 我曾尝试将数据直接导入 BigQuery 以及在谷歌云存储上从那里导入数据,但没有选项可以直接将数据从 VM 实例导入 BigQuery,我也无法以某种方式将数据从 VM 导入 GCS,然后加载到 BigQuery但是没有选择,文档也对预定转移的问题保持沉默。

  2. 有一些外部数据传输服务,例如FivetranHevoData,但它们相对昂贵,而且似乎有点过头了,因为我的源或目标都在 GCP 上,这与拥有第三个 VM 并安排一些导入脚本没有太大区别. (顺便说一句,我目前的解决方法是:D 即使用 python 脚本将数据流式传输到 BigQuery 中,如此所述)

  3. 目前我正在探索DataFusion ,它每个月只有 120 小时免费,底层Dataprep管道有额外的费用,并且不确定它是否正确。此外,我目前正在探索Cloud SchedulerCloud Composer之类的工具,以查看是否有适合我的数据需求的工具,但到目前为止还没有找到可行的解决方案。

我很高兴学习任何新的工具和技术,任何改善这种情况的建议也值得赞赏。

标签: google-cloud-platformgoogle-bigqueryscheduled-taskssftp

解决方案


我刚刚尝试直接从 GCE 虚拟机上传,它运行完美。我在 Cloud API 访问范围中启用了 BigQuery,使用一些随机数据创建了文件 (test_data.csv),它满足我在 BigQuery 表数据集 (test_dataset) 中的表 (test_table) 的架构并运行:

bq load test_dataset.test_table test_data.csv

推荐阅读