我需要将两张桌面从Google Cloud SQL迁移到Google Bigquery。
数据大小约为1 TB,股票市场价格约为5个月。
我从文档中了解到,我可以将数据导出为CSV并将其加载到Bigquery中。我希望按照最佳做法建议在Google Bigquery中进行日期分区。此外,我希望在每个日期的数据迁移后进行可靠的验证,以确保数据在传输过程中不会被破坏。
我的问题是,如何在日期和每个循环中编写代码来执行此循环:
1.从Google Cloud SQL导出
2.加载到Google BigQuery中
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)
这就是我要做的事情:
答案 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,希望它能为将来的某些人提供帮助。 : - )