Изменение таблицы в Teradata

Привет, коллеги Терадаты!

Мне нужно внести некоторые изменения в производство: 1) изменить существующие столбцы 2) добавить несколько новых столбцов 3) удалить и заново создать первичный индекс

Может ли кто-нибудь помочь мне в 1) случае - изменение сегмента столбца с добавлением части сжатия:

сегмент CHAR(10) НАБОР ЛАТИНСКИХ СИМВОЛОВ НЕ ДЛЯ РЕГИСТРА СЖАТИЕ ('AM','CAM','KAM','KO','PSHC','RES','SBS')

Как добавить этот столбец: pot_klasse CHAR(1) НАБОР СИМВОЛОВ LATIN NOT CASESPECIFIC COMPRESS ('B','U')

Как сделать новый индекс? (Должен ли я сначала удалить его, а затем сделать новый?)


person Dantes    schedule 09.08.2012    source источник


Ответы (1)


ПРИМЕЧАНИЕ. Всю эту информацию можно найти в руководствах по Teradata, которые можно загрузить с веб-сайта здесь. Оттуда вы можете выбрать интересующий вас выпуск в правом верхнем углу экрана.

Добавление сжатия списка значений к существующему столбцу

В зависимости от размера и продолжительности таблицы, которую вы можете допустить, чтобы таблица была монопольно заблокирована, вы можете добавить сжатие списка значений, используя ALTER TABLE. Если в заголовке таблицы достаточно битов присутствия для списка сжатых значений, операция может быть достаточно быстрой, в противном случае она будет довольно интенсивной:

ALTER TABLE MyDB.MyTable ADD SEGMENT CHAR(10) 
      COMPRESS ('AM', 'CAM', 'KAM', 'KO', 'PSHC', 'RES', 'SBS');

В противном случае вы можете создать новую таблицу с определенным для нее сжатием списка значений, скопировать статистику из исходной производственной таблицы в новую таблицу, вставить данные в новую таблицу, а затем переименовать таблицы, чтобы ввести новую таблицу в качестве производственной. стол.

Добавление столбца в существующую таблицу

Если в заголовке таблицы есть неиспользуемые биты присутствия, добавление этого столбца с помощью ALTER TABLE может быть довольно быстрой операцией. Если битов присутствия недостаточно для захвата списка сжатых значений, ALTER TABLE не рекомендуется:

ALTER TABLE MyDB.MyTable ADD pot_klasse CHAR(1) 
      CHARACTER SET LATIN NOT CASESPECIFIC COMPRESS ('B','U');

Изменение основного индекса

Это зависит.

Бывают ситуации, когда вы можете изменить PI таблицы, не создавая новую таблицу с помощью ALTER TABLE. (например, от неуникального к уникальному). Однако чаще всего вам приходится создавать новую таблицу и вставлять данные из исходной таблицы в новую таблицу. (например, добавление столбца, изменение типа данных столбца в первичном индексе и т. д.)

person Rob Paller    schedule 09.08.2012
comment
Спасибо, Роб! Это то, что я искал. - person Dantes; 09.08.2012
comment
Роб, не могли бы вы помочь мне в этом вопросе (я не нашел его в документации, которая, честно говоря, немного перегружена): В моей таблице был этот столбец -BAN DECIMAL(9,0)-, и теперь я хочу его изменить. to - BAN DECIMAL(15,0) COMPRESS 0.- Как мне это сделать? Что вообще означает ограничение COMPRESS 0. или любое другое? Спасибо д. - person Dantes; 10.08.2012
comment
Я надеюсь, что это возможно, и мне не нужно создавать новую таблицу, а затем копировать данные из старой таблицы. Таблица очень-очень большая - когда я делаю COUNT(*) из этой таблицы, я получаю эту ошибку: 2616 числовое переполнение произошло во время вычисления - person Dantes; 10.08.2012
comment
Я вижу, что ваш вопрос о CONUT(*) был рассмотрен в отдельной ветке SO. - person Rob Paller; 10.08.2012