2016-03-08 3 views
0

У меня есть такая таблица:Teradata: Как добавить раздел диапазона в непустую таблицу?

CREATE SET TABLE ONLINE_BANKING.TRANSACTIONS ,NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKRATIO 
    (
     transaction_id INTEGER NOT NULL, 
     date_of_transaction DATE FORMAT 'YYYYMMDD' NOT NULL, 
     amount_of_transaction DECIMAL(38,2) NOT NULL, 
     transaction_type_code BYTEINT NOT NULL DEFAULT 25 , 
UNIQUE PRIMARY INDEX (transaction_id); 

Я хотел бы добавить раздел в мой заполнены таблицы данных в date_of_transaction колонке.

Я попробовал этот путь:

ALTER TABLE TRANSACTIONS 
MODIFY PRIMARY INDEX (date_of_transaction) -- tried to write different columns, but failed 
ADD RANGE BETWEEN DATE '1998-01-01' AND DATE '2015-12-31' EACH INTERVAL '1' MONTH; 

Однако Teradata возвратил ошибку:

DROP RANGE/ADD RANGE clause no corresponding level that is a RANGE_N function

Что это значит и то, что, как я могу достичь цели?

ответ

2

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

Единственный способ создать новую таблицу и INSERT/SELECT, как это:

CREATE SET TABLE ONLINE_BANKING.TRANSACTIONS_PPI ,NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKRATIO 
    (
     transaction_id INTEGER NOT NULL, 
     date_of_transaction DATE FORMAT 'YYYYMMDD' NOT NULL, 
     amount_of_transaction DECIMAL(38,2) NOT NULL, 
     transaction_type_code BYTEINT NOT NULL DEFAULT 25 , 
     ...) 
PRIMARY INDEX (transaction_id) 
PARTITION BY 
    RANGE_N (date_of_transaction BETWEEN DATE '1998-01-01' AND DATE '2015-12-31' 
    EACH INTERVAL '1' MONTH); 

INSERT INTO ONLINE_BANKING.TRANSACTIONS_PPI 
SELECT * FROM ONLINE_BANKING.TRANSACTIONS; 

-- when everything is ok 
DROP TABLE ONLINE_BANKING.TRANSACTIONS; 
RENAME TABLE ONLINE_BANKING.TRANSACTIONS_PPI AS ONLINE_BANKING.TRANSACTIONS; 
+0

Спасибо за ответ, но я что-то не хватает. TD продолжает говорить, что 'data type (date_of_transaction) не соответствует определенному типу имени teradata'. Что не так? – Rocketq

+1

@Rocketq: Я исправил свой ответ (много вырезать и вставить), теперь он должен работать ... – dnoeth

 Смежные вопросы

  • Нет связанных вопросов^_^