从 Google Cloud SQL 迁移到 Google Bigquery



我需要将我的两个表从 Google Cloud SQL 迁移到 Google Bigquery。

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

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

我的问题是,我如何编写代码来在日期上以及每个循环中执行此循环:
1. 从谷歌云 SQL
导出 2. 加载到谷歌大查询
中 3.测试数据在传输过程中是否未损坏

您可以使用 BigQuery Cloud SQL

联合查询将 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")将在"连接"中指定的云SQL数据库中执行"外部SQL",并将结果返回给BigQuery。"foreign SQL"是源数据库SQL方言(MySQL或PostgreSQL(。

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

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

以下是我会做的:

  1. 将云 SQL 中的表导出为 CSV
  2. 将这些 CSV 文件上传到 Google Cloud Storage
  3. 编写云数据流管道以引入 CSV 文件,并写入正确的分区。
  4. 在 BigQuery 中使用 SQL 验证数据

撇开我可能也会选择Dataflow来完成这样的任务这一事实不谈,我一直在研究一个python示例,它完全符合Siddharth的要求。我希望它对于小型数据集足够好。

它从源 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)

我已经分享了完整源代码和输出的要点,希望它能证明对未来的某人有所帮助。

相关内容

  • 没有找到相关文章

最新更新