首页 > 解决方案 > 将 csv 从 gcs 迁移到 postgresql

问题描述

我正在尝试使用 python 脚本将 csv 文件从已从 BigQuery 导出的 Google Cloud Storage (GCS) 迁移到 PostgreSQL Google cloud sql 实例。

我希望使用 Google API,但在文档中发现了这一点:

PostgreSQL 实例不支持使用 Cloud SQL Admin API 导入 CSV 数据。

作为替代方案,我可以使用psycopg2库并将 csv 文件的行流式传输到 SQL 实例中。我可以通过三种方式做到这一点

我担心这些 csv 文件可能包含数百万行,并且为上述三个选项中的任何一个运行此过程对我来说似乎是个坏主意。

我有什么选择?本质上,我在 BigQuery 中有一些原始数据,我们在导出到 GCS 之前对其进行了一些预处理,以准备导入到 PostgreSQL 实例。我需要将这些预处理数据从 BigQuery 导出到 PostgreSQL 实例。

这不是这个问题的重复,因为我最好寻找将数据从 BigQuery 导出到 PostgreSQL 实例的解决方案,无论它是通过 GCS 还是直接。

标签: pythonpostgresqlcsvgoogle-cloud-platformgoogle-bigquery

解决方案


您可以按照@GrahamPolley 的建议使用Cloud Dataflow执行导入过程。确实,此解决方案涉及一些额外的工作(熟悉 Dataflow、设置所有内容等)。即使有额外的工作,这将是您的情况的首选解决方案。但是,还有其他解决方案可用,我将在下面解释其中之一。

要使用 Dataflow 设置迁移过程,有关将 BigQuery 导出到 Google Datastore的本教程就是一个很好的示例


Cloud Dataflow 的替代解决方案

Cloud SQL for PostgreSQL 不支持从 a 导入,.CSV但支持.SQL文件。

指定 uri 的文件类型。
SQL:该文件包含 SQL 语句。
CSV:文件包含 CSV 数据。PostgreSQL 实例不支持使用 Cloud SQL Admin API 导入 CSV 数据。

一个直接的解决方案是使用一些工具将文件转换为.CSV.SQL谷歌不提供我知道的工具,但网上有很多),然后导入到 PostgreSQL。

如果您想以更“编程”的方式实现此解决方案,我建议使用Cloud Functions,这是我将如何尝试执行此操作的示例:

  1. 设置在文件上传到 Cloud Storage 存储分区时触发的 Cloud Function
  2. 对函数进行编码以获取上传的文件并检查它是否为.CSV. 如果是,请使用 csv-to-sql API(此处为 API 示例)将文件转换为.SQL
  3. 将新文件存储在 Cloud Storage 中
  4. 导入到 PostgreSQL

推荐阅读