Импортируйте csv.gzip из Google Storage в CloudSQL - PullRequest
1 голос
/ 11 июля 2019

Я хотел бы ежедневно импортировать данные 10 Go из Google Storage в PostgreSQL и определять столбец в качестве первичного ключа.

У меня 19 сжатых CSV-файлов, каждый из которых весит 135 мес. Для импорта одного файла требуется около 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 голосов
/ 12 июля 2019

Я повторил ваш случай на моем экземпляре GCP, следуя рекомендациям [1], предложенным в документации, и руководству по импорту CSV в базу данных CloudSQL [2].

Вкратце, лучшие практики и шаги упоминают:

  1. Загрузите ваш CSV-файл в корзину в GCP
  2. Сжатие вашего CSV-файла в .gz
  3. Создание базы данных и структуры таблицы перед импортом

Я сгенерировал сжатый CSV-файл размером 35 Мб ~ и загрузил его в хранилище, как указано в руководстве. Затем я создал свою базу данных и структуру таблиц в CloudSQL, используя Postgresql. Оттуда я последовал за гидом и выполнил ту же команду, что и вы:

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 [NOT VALID]»

из документации 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

...