Teradata:如何将范围分区添加到非空 table?
Teradata: How to add range partition to non empty table?
我有这样的 table:
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 );
我想将分区添加到我的填充数据 table 到 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
这是什么意思,我怎样才能达到目标?
您不能向未分区的现有 table 添加分区,但是,您只能从已分区的 table 添加或删除范围。
唯一的方法是像这样创建一个新的 table 和 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;
我有这样的 table:
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 );
我想将分区添加到我的填充数据 table 到 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
这是什么意思,我怎样才能达到目标?
您不能向未分区的现有 table 添加分区,但是,您只能从已分区的 table 添加或删除范围。
唯一的方法是像这样创建一个新的 table 和 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;