将csv.gzip从Google Storage导入到CloudSQL

时间:2019-07-11 13:12:46

标签: postgresql google-cloud-platform google-cloud-storage google-cloud-sql csv-import

我想每天从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);

是否可以加快这两个操作?

1 个答案:

答案 0 :(得分:0)

我按照文档建议的最佳做法[1]和将CSV导入CloudSQL数据库的指南[2]在GCP实例上复制了您的案例。

总而言之,最佳实践和步骤提到:

  1. 将CSV文件上传到GCP的存储桶中
  2. 将CSV文件压缩到.gz
  3. 在导入之前创建数据库和表结构

我生成了一个压缩的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