将SQL数据库转储(一个SQL文件中的多个表)导入BigQuery

时间:2018-11-20 12:46:58

标签: google-cloud-platform google-bigquery google-cloud-storage google-cloud-functions google-cloud-sql

我正在尝试自动化将Postgres数据库作为日常工作加载到BigQuery中的任务。 postgres数据库采用单个sql文件的形式,其中包含所有表及其数据。此文件托管在Google云存储(GCS)上。我想获取该sql文件,并将每个表从其中加载到BigQuery中单独的对应表中。

有关StackOverflow的大多数问答,都假定sql文件仅包含一个表,而不包含多个表。不幸的是,目前看来,BigQuery本身不支持带有多个表的单个文件。此外,我也在寻找自动化解决方案,而不是一次性的东西。因此,我正在寻找其他解决方案。

我要解决两个问题:

  1. 如何将包含整个数据库的单个sql转储文件拆分为每个表的单独的csv文件?
  2. 我应该使用哪个工具来自动化数据管道中的每个步骤?

对于每个问题,我都有一些选择。我希望听到有关哪个选项似乎最可行的反馈,以及您之前可能听说或使用的其他策略。

  1. 用于按表将文件拆分为单独的csv文件:

    1. 使用脚本将文件拆分为多个csv文件,每个表一个。 (最低可伸缩性,尤其是随着数据库的增长)
    2. 将sql文件上传到Cloud SQL。将每个表作为单独的csv文件导出到GCS。将每个文件加载到BigQuery中。 (来源:Best way to import Google Cloud SQL data into BigQuery) (来源:Upload Google Cloud SQL backup to Bigquery
  2. 对于用于自动执行数据管道中每个步骤的工具:(我不十分熟悉它们,如果下面的工具都不是正确的选择,希望我得到纠正。)

    1. 云功能-此工具可以连接到各种GCP API,并且前景最乐观,但是我想在开始这条路之前先确认这是否是正确的工具。 (Automate file upload from Google Cloud Storage to Bigquery
    2. Cloud Composer-到目前为止,该工具似乎有些昂贵,但是如果它是唯一的工具,我可以研究一下。
    3. DataFlow-我的印象是该工具仅用于已分离表的数据转换,并且不具备执行导入/导出作业的能力,例如,将表从Cloud SQL保存到GCS作为csv文件。
    4. 是否还有其他工具可以调用GCP API,并且可以启动我这里未列出的日常工作?

现在,我正在考虑使用Cloud Functions编排以下管道:GCS-> Cloud SQL->拆分为单个csv文件->上载到GCS->转到BigQuery。如果您知道其他任何替代策略,也将不胜感激。

0 个答案:

没有答案