2016-12-19 4 views
0

Есть ли все-таки написать команду копирования напрямую, которая скопирует данные из 1 таблицы и заполнит другую таблицу (с некоторым условием будет лучше)?таблица для команды копирования таблицы с условием

То, что я наблюдал за выполнением команды копирования, намного лучше, чем INSERT INTO в vertica. Поэтому я пытаюсь заменить команду INSERT INTO копией.

Спасибо!

ответ

1

Что вы хотите сделать, это INSERT /*+ DIRECT */ INTO table2 SELECT ... FROM table1 WHERE .... Прямой намек заставит его делать прямую нагрузку на контейнеры ROS вместо WOS. Если вы делаете большие объемные нагрузки, это будет быстрее всего. Если вы делаете много небольших вставок/выбираете, как это, тогда было бы лучше использовать WOS и оставить DIRECT.

Другой возможностью было бы сделать CREATE TABLE table2 AS SELECT ... FROM table1 WHERE ....

Наконец, если вы действительно просто копируете все данные и не фильтруете (что я знаю, это не ваш вопрос, но я включаю это для полноты) ... и таблицы разделены, вы можете сделать COPY_PARTITONS_TO_TABLE, который будет просто создавать ссылки из контейнеров ROS исходной таблицы в целевую таблицу. Любые изменения в новой таблице приведут к реорганизации контейнеров ROS (со временем, с использованием кортежа и т. Д. Контейнеры не будут очищены, если обе таблицы не реорганизовали их).

+0

Спасибо @woot !!, я использую INSERT/* + DIRECT * /, но его производительность не так хороша, как команда копирования. Это займет больше времени, чтобы загрузить 1 миллион записей. – Biswabid

+0

@Biswabid Вы используете последовательность? Проецируются ли сегменты одинаково между исходной и целевой таблицей? – woot

+0

Да, у меня есть последовательность на месте. хотя я не уверен в прогнозах источника и цели. – Biswabid