我想每天从Google Storage导入10 Go数据到PostgreSQL,并定义一列作为主键。
我有 19 个压缩的 csv 文件,每个文件的重量为 135 Mo。导入一个文件大约需要 35 秒(总共 11 分钟)。导入文件的命令:
gcloud sql import csv instance-name gs://bucket/file.csv.gzip --database=database --table=table --quiet
当我在命令末尾直接添加 cloudsql 中的主键时,需要 30 分钟。添加主键的命令:
ALTER TABLE table ADD PRIMARY KEY (id);
是否有可能加快这两个操作?
我按照文档建议的最佳实践 [1] 和将 CSV 导入 CloudSQL 数据库的指南[2] 在我的 GCP 实例上复制了您的案例。
总之,最佳实践和步骤提到:
- 将您的 CSV 文件上传到 GCP 中的存储桶中
- 将 CSV 文件压缩为.gz
- 导入前创建数据库和表结构
我生成了一个大小为 35Mb~ 的压缩 CSV 文件,并将其上传到存储桶中,如指南中所述。然后,我使用 Postgresql 在 CloudSQL 中创建了我的数据库和表结构。从那里我按照指南运行了与您相同的命令:
gcloud sql import csv instance-name gs://bucket/file.csv.gzip --database=database --table=table --quiet
我得到了与您几乎相同的计时结果,这意味着我们正在尽最大努力为此命令进行计时工作。
对于下一个,
ALTER TABLE table ADD PRIMARY KEY (id);
我尝试在导入 CSV 之前添加约束(以及当我运行表定义的命令时),它工作正常,并且该命令在我的实例上运行了 1 秒。然后我导入了 CSV,它工作没有问题。 请记住,如果在创建表后运行该命令,则必须处理所有行以查看它们是否符合约束条件,如果有数百万行,这可能会导致一些延迟。欲了解更多信息,请参阅
"添加table_constraint [ 无效 ]">
来自PostgreSQL文档:https://www.postgresql.org/docs/current/sql-altertable.html#AEN64781
请让我知道你的想法。
[1] https://cloud.google.com/sql/docs/postgres/import-export/#best_practices_for_importing_and_exporting
[2] https://cloud.google.com/sql/docs/postgres/import-export/importing#csv