Google bigquery 从Google Cloud SQL迁移到Google Bigquery

Google bigquery 从Google Cloud SQL迁移到Google Bigquery,google-bigquery,google-cloud-sql,Google Bigquery,Google Cloud Sql,我需要将我的两个表从Google Cloud SQL迁移到Google Bigquery 数据规模约为1 TB,约为5个月的股市行情数据 我从文档中了解到,我可以将数据导出为CSV并将其加载到Bigquery中。我希望按照最佳实践中的建议,在GoogleBigQuery中进行日期划分。另外,我希望在迁移每个日期的数据之后进行一次健壮的验证,以确保数据在传输过程中不会损坏 我的问题是,我如何编写代码来在日期和每个循环中执行此循环: 1.从谷歌云SQL导出 2.加载到Google BigQuery

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

数据规模约为1 TB,约为5个月的股市行情数据

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

我的问题是,我如何编写代码来在日期和每个循环中执行此循环:
1.从谷歌云SQL导出
2.加载到Google BigQuery

3.测试数据在传输过程中是否未损坏

以下是我要做的:

  • 将云SQL中的表导出为CSV
  • 将这些CSV文件上传到谷歌云存储
  • 编写云数据流管道以接收CSV文件,并写入正确的分区
  • 在BigQuery中使用SQL验证数据

  • 撇开我可能也会为这样的任务选择数据流这一事实不谈,我一直在开发一个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)
    
    我分享了一篇文章,希望它能对将来的人有所帮助。:-)

    您可以使用BigQuery将云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;");
    
    外部查询(“连接”、“外部SQL”)
    将在“连接”中指定的云SQL数据库中执行“外部SQL”,并将结果返回给BigQuery。“外来SQL”是源数据库SQL方言(MySQL或PostgreSQL)

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


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

    我不认为有一种简单的方法可以在循环中完成所有三个步骤。我知道在每个循环中,您都希望加载到BQ中,导出的csv结果是:select*from table where day=SOME_day,我认为这是无法通过编程实现的。我理解对了吗?另外,对于第三步,您基本上需要检查批量加载作业结果中返回的错误。是的,您理解正确。我想我们不能以编程方式导出CSV,但可以使用gcloud命令行工具导出为SQL转储文件。可以通过编程方式将该转储上传到bigquery吗?谢谢。步骤1和2是否可以通过编程方式完成?如果是,请包括代码/链接。还有,什么SQL可以验证数据?运行此命令也会产生错误,什么样的SQL可以验证数据?运行此命令会出现错误“从[project:database.table]中选择MD5(bid_price)”,就像“MD5不存在”,尽管MD5是一个函数。该表有数十亿行,我无法实际验证每个数据点。我希望能够匹配原始和最终bigquery表中每一列的MD5或其他校验和。MD5为您工作,因为您使用的是遗留SQL。切换到标准SQL以使其工作。@Siddharth您能确认使用legacySQL时引发的实际错误是“无法识别的函数md5”而不是“md5不存在”吗?