Я повторил ваш случай на моем экземпляре GCP, следуя рекомендациям [1], предложенным в документации, и руководству по импорту CSV в базу данных CloudSQL [2].
Вкратце, лучшие практики и шаги упоминают:
- Загрузите ваш CSV-файл в корзину в GCP
- Сжатие вашего CSV-файла в .gz
- Создание базы данных и структуры таблицы перед импортом
Я сгенерировал сжатый 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