AlloyDB:使用python从GCS Bucket批量导入CSV文件

问题描述 投票:0回答:1

我们需要设计一个流程,能够有效地将上游流程定期创建的大型 CSV 文件导入 AlloyDB。我们想使用 python 来完成这项任务。这种情况下的最佳做法是什么?

一些注意事项:

  • SQL 的 INSERT 语句的性能远低于使用 pg_restore 等数据库特定导入工具
  • 虽然 pg_restore 可以远程执行,但由于节省了网络往返次数,我预计在数据库服务器本地运行时大文件的导入性能会明显更好
  • AlloyDB 文档说:从容器通过 SSH 进入数据库服务器,将文件从 GCS 存储桶复制到本地并运行 psql COPY / pg_restore。这不是一组非常方便以编程方式执行的操作。

我们对 CloudSQL postgres 实例有类似的设置。与 AlloyDB 相比,CloudSQL 提供了一个很好的API,充当抽象层并处理文件的整个导入。这样,就减轻了开发者的很多负担。

python postgresql google-cloud-platform google-alloydb
1个回答
0
投票

首先,AlloyDB(目前)没有与 CloudSQL 类似的抽象层来从云存储导入文件。

当然,您可以将 CSV 文件从存储桶导入 AlloyDB,但这可能不太方便。根据您的需要,您可以

  1. 对于小文件:创建一个读取 CSV 文件、连接到数据库并从文件内容发出 SQL 插入语句的脚本。使用 [postgre 的多值语法](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-insert-multiple-rows/。与下面的选项相比,预计性能会明显较差

  2. 对于使用 python 的中型到大型文件:一些 python postgres 驱动程序支持 postgre 的 COPY 命令。这比发出 SQL 命令要快得多。示例:pyscopg3asyncpg。后者还可以与 [Google AlloyDB python 连接器] (https://cloud.google.com/alloydb/docs/connect-language-connectors) 结合使用,以实现轻松且安全的连接。两者都与 SQL 炼金术有关。

  3. 对于非常大的文件,如果您需要边缘性能,您可能需要先将文件复制到数据库服务器,然后在服务器上使用 psql direclty 执行 postgres COPY 命令。

© www.soinside.com 2019 - 2024. All rights reserved.