Мне нужно скопировать таблицы с одного сервера teradata на другой довольно много таблиц. Чтобы решить эту проблему, мне было рекомендовано использовать arcmain. Поэтому таблица может быть передана так:Как динамически использовать Arcmain или просто неполно скопировать таблицы в Teradata?
logon ZZZZ/YYYY,XXXX;
COPY DATA TABLES
(DATABASENAME.TABLENAME11) (FROM(DATABASENAME.TABLENAME1)),
(DATABASENAME.TABLENAME12) (FROM(DATABASENAME.TABLENAME2)),
(DATABASENAME.TABLENAME13) (FROM(DATABASENAME.TABLENAME3)),
RELEASE LOCK,
FILE=NVDSID1;
Однако у меня есть несколько таблиц с одинаковыми именами между различными базами данными, в дополнении этой таблице нужна только переданы их структуру и некоторые строки (пусть это будет WHERE service_quality ='epic'
). Есть ли решение, как просто скопировать таблицы?
Изначально я понял, совсем не так:
1) скопировать все эти таблицы `ы структуру временную базу данных
2) Вставьте только требуется строк их
3) Скопируйте эти таблицы в требуемую БД в другую таблицу
Но, еще раз, таблицы с одинаковыми именами рунируют это решение, они просто не могут быть просто вставлены в тот же БД. Возможно ли сделать эти 3 шага в цикле, добавив еще один шаг - drop table
, чтобы избежать конфликтов?
Создание 100 temp DB действительно плохое решение, и уже есть таблицы с длинным именем в 30 символов.
Любые идеи?
В конце концов я переименовал таблицы с помощью 2 временных таблиц с именами таблиц и БД и связанных с ними идентификаторов (IDENTITY), чтобы иметь возможность хранить их во временной базе данных. После этого деловая проблема не будет похожа на проблему. – Rocketq
Насколько я знаю, новые Teradata (версии 14.1+) допускают 128 длинных имен таблиц, поэтому в этих именах временного БД можно легко стать уникальными следующим образом: 'Databasename.tableName' – Rocketq
Да, но для этого требуется изменение default DBSControls для включения и, я считаю, вам нужно приложить любое имя, превышающее 30 символов, в двойных кавычках ("). –