Есть ли способ загрузить мои .gz-файлы, которые у меня есть на удаленном сервере, в таблицу базы данных красного смещения (postgresql), не загружая ее сначала в ведро s3?Загрузка данных из .gz-файла с удаленного сервера в postgresql-экземпляр красного смещения без использования ведра S3?
Я видел два варианта: -
"copy <tablename> from program "gzip -d <file location in remote server> with delimeter tab '\t' "
команду после подключения к базе данных. Это дало мне ошибку «синтаксическая ошибка в программе или рядом с ней».Не удалось найти выход из библиотеки psycopg2 в python. Вот код, написанный для python.
import psycopg2 import gzip conn_string="dbname='<>' port='5439' user='<>' password='<>' host='<>'"; print "Connecting to database\n ->%s"%(conn_string) conn=psycopg2.connect(conn_string); cursor=conn.cursor(); with gzip.open('<gzip filelocation>','r') as l: for line in l: cursor.execute('copy <table_name from %s with delimiter '\t'", (line,))
Спасибо.
Это очень плохо ** идея для Redshift. Вы сможете загружать только ~ 100 строк в секунду * в лучшем случае *. Если это достаточно быстро для вас, вы, вероятно, не должны использовать Redshift. Как минимум, перед отправкой необходимо создать очень большие инструкции «INSERT ... VALUES». http://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-multi-row-inserts.html –
Это правда. Это будет медленный, но только способ избежать S3 (потому что у вас нет доступа). Есть ли способ оптимизировать инструкции insert? или «КОПИЯ» - лучший способ пойти? –
Вы можете немного оптимизировать вставки, объединив много линий «VALUES». 'INSERT INTO (b, c) ЗНАЧЕНИЯ (1,2), (3,4), (5,6), ...;' –