我想每天从Google Storage导入10 Go数据到PostgreSQL,并将一列定义为主键。
我有19个压缩的csv文件,每个文件的重量均为135Mo。导入一个文件大约需要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);
是否可以加快这两个操作?
答案 0 :(得分:0)
我按照文档建议的最佳做法[1]和将CSV导入CloudSQL数据库的指南[2]在GCP实例上复制了您的案例。
总而言之,最佳实践和步骤提到:
我生成了一个压缩的CSV文件,大小为35Mb〜,并将其上传到存储桶中,如指南中所述。然后,我使用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,它可以正常工作。 请记住,如果在创建表后运行命令,则必须处理所有行以查看它们是否符合约束条件,如果有数百万行,则可能会导致某些延迟。有关更多信息,请参阅
“ ADD 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