将 csv 从 gcs 迁移到 postgresql

DJ3*_*319 6 python csv postgresql google-bigquery google-cloud-platform

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

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

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

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

  • 逐行:读取每一行然后提交插入命令然后提交
  • 批处理流:读取每一行,然后提交插入命令,然后在 10 行或 100 行后提交。
  • 整个 csv:读取每一行并提交插入命令,然后仅在文档末尾提交。

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

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

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

Gui*_*eda 3

您可以按照 @GrahamPolley 的建议使用Cloud 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 数据。

一种直接的解决方案是使用某种工具将.CSVfilest 转换为.SQL(据我所知,Google 没有提供工具,但网上有很多),然后导入到 PostgreSQL。

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

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