Мы делаем это, не используя именованный канал (mkfifo), но стандартные анонимные трубы оболочки:
hive -e "select whatever FROM wherever" | \
dd bs=1M | \
/opt/vertica/bin/vsql -U $V_USERNAME -w $V_PASSWORD -h $HOST $DB -c \
"COPY schema.table FROM LOCAL STDIN DELIMITER E'\t' NULL 'NULL' DIRECT"
Это отлично работает для нас. Обратите внимание на «dd» между ульем и vsql. Это необходимо для правильной работы. Трудно дать вам хорошие цифры с этим, потому что наш оператор выбора улья на самом деле не является тривиальным, и я не знаю, где было потрачено время (обработка улья или загрузка данных).
Но tbh, используя именованный канал, как вы, или неназванный канал, как мы делаем, - это хороший способ сделать это, и вы не можете оптимизировать его на уровне системы. Есть несколько вещей, чтобы принять во внимание, хотя:
- время вычислить свой улей запрос
- , где вы ведете свой запрос. Например, если вы запустите его, создайте сторонний компьютер, данные должны перетекать из улья на ваш сервер в Vertica. Выполнение команды на сервере улья или на узле Vertica может ускорить работу, пропуская ненужный прыжок.
- COPY заявление: вы используете DIRECT?
- и, конечно, обычные проекции (несколько выступов замедляют загрузку), ресурсы Vertica и т. Д.
Непонятно, что вы спрашиваете, может быть, приведен пример кода или дальнейших подробностей. – EternalHour
эй, на самом деле мы планируем перенести большие таблицы из hivr, как 3 миллиарда записей из улья в Vertica с помощью unix named pipe означает сначала выбрать col1 col2 из таблиц hive> mkfifo после этого мы выполняем подключение по вертикали и начинаем копировать как ниже cat mkfifo | copy to vertica Мы делаем это упражнение с 5 параллельными потоками на 5 узлах в Vertica. –
@abhishekrastogi это одно время или произойдет часто? – Kermit