Как напечатать результаты оператора teradata SHOW в текстовый файл, чтобы DDL был исполняемым - PullRequest
0 голосов
/ 22 марта 2019

Я хотел бы написать сценарий Teradata bteq, который экспортирует все DDL для моих таблиц, фиксируя выходные данные команды show.Я подумал, что это будет так же просто, как экспортировать результаты из команды show, выполненной из BTEQ, в файл, и этот подход сработал (см. Сценарий ниже) отлично для таблиц без сжатия столбцов.

Проблема в том, что когда есть столбцы с большим количеством сжатых значений, вывод оборачивается и иногда разбивает строку в середине списка сжатых значений (например, для «BUSINESS» вы получаете «BUS, а затем следующую строку»).начинается с INESS '. Тот факт, что перенос слов сжатых значений означает, что я не могу запустить экспортированный DDL.

Сначала я подумал, что установка ширины в супер-большое число предотвратит перенос слов, ноЯ не могу установить ширину на достаточно большое значение, чтобы определить ширину сжатой строки значений. Это означает, что мой единственный вариант - запустить оператор show в Teradata SQL Assistant и скопировать и вставить его по одному, чтобы создать мойСценарий создания таблицы DDL. Я должен думать, что есть лучший способ перехватить существующий DDL таким образом, чтобы экспортированный DDL был исполняемым?

#!/bin/ksh
# -------------------------------------------------------------------------
# Environment Variables
LDAP_IND=".logmech LDAP"
TD_UID=uXXXXX
TD_PWD='pwXXXX'
TD_TDPID=TD1
OUT_SCRIPT=./DDL.txt
echo "-----------------------------------"
echo "TD_UID =<${TD_UID}>"
echo "-----------------------------------"

###########################################################################
bteq<<EOBTQ
${LDAP_IND}
.logon ${TD_TDPID}/${TD_UID},${TD_PWD}
.IF ERRORCODE>0 THEN .GOTO ABEND
--#  START  SQL ###########################################################

.set width 999
.export report file=${OUT_SCRIPT}
.set defaults
.set format off
.set foldline on 1,2,3,4
.set sidetitles off
--  IS WIDTH MAX ENOUGH TO ALWAYS ACCOMODATE ALL COMPRESSED VALUES?
.set width 65531

-- Export DDL for Tables Using Show Commands
show sel * from DB_PRODUCTS.t_product_ref;

show sel * from DB_PRODUCTS.t_acct;

--#  FINISH SQL ###########################################################
.LABEL GOODEND;
.QUIT;
.LABEL ABEND;
.QUIT ERRORCODE;
EOBTQ

1 Ответ

0 голосов
/ 22 марта 2019

Ответ заключается в том, что увеличение ширины до максимального значения символа для CompressValueList гарантирует, что выходной файл может вместить всю ширину сжатого текста значений без переноса. Это означает, что .set ширина должна быть 8193, чтобы решить проблему. Предупреждение для любого ультраредактируемого пользователя, некоторые редакторы имеют «мягкую переноску», где строка выглядит обернутой, но не является.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...