将mysql结果导入BigQuery的最快方法

时间:2017-09-30 04:58:45

标签: mysql google-bigquery

我有一个104M行的mysql表。使用streaming inserts的方法,花费将近三个小时,花费5美元。

查询或复制mysql表并将其放入BQ的最快方法是什么?例如,有没有办法将mysql数据库(不在GCP上)直接流式传输到GCS上的csv文件中,然后从BQ加载csv文件?我们注意到loading csv files from GCS into BQ非常快。

建议的方法是以尽可能最快的方式将数据从外部mysql表(或任何外部数据库)真正地传入BQ?

更新:请注意,我们不是通过执行增量Feed(我们已经这样做)来减少数据量。这个问题只是询问从外部数据库向BQ获取100M行数据(假设为15GB)的绝对最快方法。

1 个答案:

答案 0 :(得分:4)

有一系列的博客文章是WePay展示他们实现这一目标的方式:

  

MySQL to GCS运算符对MySQL执行SELECT查询   表。 SELECT拉取大于(或等于)最后一个的所有数据   高水印。高水印要么是主要的关键   table(如果表是仅附加的)或修改时间戳   列(如果表接收更新)。再次,SELECT语句   也会回溯一点时间(或行)以捕获可能丢失的   上次查询的行(由于上述问题)。

使用Airflow,他们设法每15分钟将BigQuery与MySQL数据库保持同步。

附录(因为问题想知道将行插入BigQuery的最快方法):

  • 流式插入是将数据导入BigQuery的最快方法,但每秒限制为100,000行。 100M行至少需要100秒才能达到此速率。

  • bq load GCS(json,csv,avro)中的文件通常是批量导入数据并且免费导入数据的最快方式。

  • 尝试联合查询:将您的(json,csv,avro)文件放在GCS中,而不是直接从GCS运行传统的导入查询数据。这应该比bq load更快(不需要等待加载调度程序),并且可以将SELECT *的结果输出到新的BQ本机表。这笔费用将是查询费用(扫描字节数)。