我跟踪了大约250,000个已上传到Google bigquery
的时间序列文件。每个时间序列每天都有大约200个新行,应该通过一些API
下载,然后上传到bigquery
。我已经设置了一个python脚本,首先连接到Google BigQuery
以获取每个时间序列的最后日期,然后脚本使用多处理创建10个进程,每个进程连接到一些API
并下载丢失的数据。下载后大约需要2秒钟,我需要将数据输入BigQuery
。我目前使用名为pandas
的{{1}}函数上传数据,我计算了上传所需的时间,以下是结果:
to_gbq
基于此我想在内存中附加一个大 1,000 rows takes 45 seconds
10,000 rows takes 52 seconds
100,000 rows takes 128 seconds
,然后在dataframe
达到100,000行时使用to_gbq
。我被建议找到一个解决方案根本不依赖于内存,只需将数据下载到dataframe
即可。什么是解决这个问题的好方法?
我将所有下载的数据附加到同一个表中。
答案 0 :(得分:3)
我建议您使用Apache Beam来解决此问题。它已经是一个分布式处理框架,旨在处理这种类型的ETL任务。
完成此example将让您掌握如何使用它。您也可以使用Dataflow Templates或Apache Airflow安排管道执行。