Вы хотите использовать команду COPY
( COPY ).
COPY Table FROM '/path/to/csv/file.csv' DELIMITER ',';
Это намного быстрее, чем вставка каждой строки за раз.
Так каквы используете python, я бы порекомендовал модуль vertica_python
, поскольку он имеет очень удобный метод копирования для объекта курсора ( vertica-python GitHub page ).
Синтаксис для использования COPY
с vertica-python выглядит следующим образом:
with open('file.csv', 'r') as file:
csv_file = file.read()
copy_cmd = "COPY Table FROM STDIN DELIMITER ','"
cur.copy(copy_cmd, csv_file)
connection.commit()
Еще одна вещь, которую вы можете сделать для ускорения процесса, - это сжатие файла CSV.Vertica может читать сжатые файлы gzip, bzip и lzo.
with open('file.csv.gz', 'r') as file:
gzipped_csv_file = file.read()
copy_cmd = "COPY Table FROM STDIN GZIP DELIMITER ','"
cur.copy(copy_cmd, gzipped_csv_file)
connection.commit()
Копирование сжатых файлов сократит сетевое время.Таким образом, вы должны определить, компенсируется ли дополнительное время, необходимое для сжатия файла csv, за время, сэкономленное при копировании сжатых файлов.В большинстве случаев, с которыми я сталкивался, стоит сжать файл.