2017-07-07 105 views
0

我追踪了我已上传到Google bigquery的约250,000个时间序列文件。每天每个时间系列有大约200个新行,应该通过一些API下载,然后上传到bigquery。我已经建立了一个python脚本,首先连接到Google BigQuery以获取每个时间序列的最后日期,然后脚本使用多处理创建10个进程,每个进程连接到一些API并下载缺失的数据。下载后需要大约2秒钟,我需要将数据存入BigQuery。我目前使用名为to_gbqpandas功能将数据上传和我计时需要多长时间上传,这里的结果:Python:如何快速上传到Google BigQuery?

1,000 rows takes 45 seconds 
10,000 rows takes 52 seconds 
100,000 rows takes 128 seconds 

所以基于这样我想在内存中追加到一个大dataframe和然后在dataframe达到100,000行时使用to_gbq.I已被建议找到完全不依赖于内存的解决方案,并且只要下载该数据即可将该数据上传到bigquery。解决这个问题的好方法是什么?

我将所有下载的数据附加到同一个表中。

回答

3

我推荐使用Apache Beam来解决这个问题。它已经是一个分布式处理框架,用于处理这种类型的ETL任务。

通过这个example将让你很好地掌握如何使用它。您也可以使用Dataflow TemplatesApache Airflow来安排您的管线执行。