从Google Cloud SQL迁移到Google Bigquery

时间:2018-01-30 06:42:40

标签: google-bigquery google-cloud-sql

我需要将两张桌面从Google Cloud SQL迁移到Google Bigquery。

数据大小约为1 TB,股票市场价格约为5个月。

我从文档中了解到,我可以将数据导出为CSV并将其加载到Bigquery中。我希望按照最佳做法建议在Google Bigquery中进行日期分区。此外,我希望在每个日期的数据迁移后进行可靠的验证,以确保数据在传输过程中不会被破坏。

我的问题是,如何在日期和每个循环中编写代码来执行此循环:
 1.从Google Cloud SQL导出  2.加载到Google BigQuery中  3.测试数据在传输中是否已损坏

3 个答案:

答案 0 :(得分:2)

您可以使用BigQuery Cloud SQL federated query将Cloud SQL表复制到BigQuery中。您可以使用一个BigQuery SQL语句来实现。例如,按照SQL将MySQL表sales_20191002复制到BigQuery表demo.sales_20191002。

INSERT
   demo.sales_20191002 (column1, column2 etc..)
SELECT
   *
FROM
   EXTERNAL_QUERY(
      "project.us.connection",
      "SELECT * FROM sales_20191002;");

EXTERNAL_QUERY("connection", "foreign SQL")将在“连接”中指定的Cloud SQL数据库中执行“外部SQL”,并将结果返回给BigQuery。 “外部SQL”是源数据库SQL方言(MySQL或PostgreSQL)。

在运行SQL查询之前,您需要创建一个指向Cloud SQL数据库的BigQuery连接。

最后,您可以通过检查两个表的一些高级统计信息来验证数据质量。例如,行数是否匹配?结果分组是否匹配?

答案 1 :(得分:1)

这就是我要做的事情:

  1. 将Cloud SQL中的表格导出为CSV
  2. 将这些CSV文件上传到Google云端存储
  3. 编写Cloud Dataflow管道以提取CSV文件,并写入正确的分区。
  4. 在BigQuery中使用SQL来验证您的数据

答案 2 :(得分:0)

撇开我可能也会为这样的任务选择Dataflow的事实,我一直在研究一个完全符合Siddharth所要求的python样本。我希望它能够很好地适用于小型数据集。

它从源CloudSQL表中收集日期列表。然后,每一天:

1)将相关的CloudSQL行导出到单独的CSV文件中

2)将每个CSV加载到单独的BQ表中

3)在MySQL和BQ中启动一个简单的验证查询

if __name__ == '__main__':
  days = mysql_distinct_days()[:NUM_DAYS_TO_TEST]

  do_extract_and_load(days)

  do_checks(days)

  if DELETE_TABLES:
    delete_tables(days)

我已经分享了一份gist with the full source code and output,希望它能为将来的某些人提供帮助。 : - )