【发布时间】:2018-08-30 22:02:01
【问题描述】:
我创建了一个表mydb.mytable,基本上包含以下SQL,比如上周:
CREATE MULTISET TABLE mydb.mytable ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO
(
master_transaction_header VARCHAR(64) CHARACTER SET LATIN NOT CASESPECIFIC,
demand_date DATE FORMAT 'YY/MM/DD',
item_id BIGINT,
QTY INTEGER,
price DECIMAL(15,2))
PRIMARY INDEX ( master_transaction_header )
PARTITION BY RANGE_N(demand_date BETWEEN DATE '2018-01-01' AND CURRENT_DATE EACH INTERVAL '1' DAY );
当我尝试向其中插入数据时,比如说 昨天,teradata 给了我以下错误消息
Partitioning violation for table mydb.mytable
当我尝试使用以下方式扩展分区时:
ALTER TABLE mydb.mytable MODIFY PRIMARY INDEX (master_transaction_header) ADD RANGE BETWEEN DATE '2018-03-15' AND CURRENT_DATE EACH INTERVAL '1' DAY;
我从teradata 收到以下错误消息:
The altering of RANGE_N definition with CURRENT_DATE/CURRENT_TIMESTAMP is not allowed.
我知道我可以:
- 使用
PARTITION BY RANGE_N(demand_date BETWEEN DATE '2018-01-01' AND '9999-12-31' EACH INTERVAL '1' DAY );创建一个副本 - 将旧表中的所有数据插入新表中
- 删除旧表
- 重命名新表
但我希望 teradata 提供一种更优雅的方式来将分区添加到现有分区表。
我已经查阅了以下 stackoverflow 帖子:
- Range partition table creation with large number of paritions
- Teradata: How to add range partition to non empty table?
他们很有启发性,但我无法从其中的讨论中想出答案。
【问题讨论】:
标签: teradata