python - 将 PostgreSQL 加速到 BigQuery

标签 python postgresql pandas amazon-ec2 google-bigquery

我想将一些当前存储在 postGreSQL 中的数据上传到 Google Bigquery,以查看这两个工具的比较情况。

要四处移动数据,有很多选择,但迄今为止我发现的最用户友好(对我而言)的选择利用了 python pandas 的强大功能。

sql = "SELECT * FROM {}".format(input_table_name)
i = 0
for chunk in pd.read_sql_query(sql , engine, chunksize=10000):
    print("Chunk number: ",i)
    i += 1
    df.to_gbq(destination_table="my_new_dataset.test_pandas",
              project_id = "aqueduct30",
              if_exists= "append" )

但是这种方法相当慢,我想知道我有什么选择可以加快速度。我的表有 1100 万行和 100 列。

postGreSQL 在 AWS RDS 上,我从 Amazon EC2 实例调用 python。两者都大而快。虽然有 16 个可用,但我目前没有使用多个处理器。

最佳答案

正如 JosMac 的评论所暗示的那样,您的解决方案/方法根本无法扩展到大型数据集。由于您已经在 AWS/RDS 上运行,因此我认为以下内容会更好:

  1. 将 Postgres 表导出到 S3
  2. 使用 GCS 传输服务将 S3 导出到 GCS
  3. 从 GCS 直接加载到 BigQuery(考虑使用 Cloud Functions 和 Dataflow 自动化此管道)

关于python - 将 PostgreSQL 加速到 BigQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51266282/

相关文章:

python - 按重复日期分组的 Pandas

编写两个 if 语句的 Pythonic 方式

sql - 使用 CTE,即使 tableA 未返回任何结果,我如何从 tableB 中选择行?

sql - 将行合并为一个结果并将结果添加为 SQL 中的不同值

Python pandas 创建一个函数来计算 n 列行的平均值

python - 初始化一个列表并找到该列表的平均值

python - 通过 SQLAlchemy 使用 Postgresql 执行多个语句不会保留更改

python - 将多个 lambda 函数与 pandas 数据框一起使用

python - 合并数据框中的重复列

python - 当列是一系列列表时,如何有条件地添加到 pandas 数据框列中的单元格选择?