我创建了一个表格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帖子:
他们很有启发性,但我无法从其中的讨论中得出答案。
答案 0 :(得分:2)
使用CURRENT_DATE进行分区是可能的,但我从来没有找到它的用例。
创建该表时,它将解析为当前日期,但之后未更改,请查看ResolvedCurrent_Date
中的dbc.PartitioningConstraintsV
列。当您提交ALTER TABLE mydb.mytable TO CURRENT
时,它会再次解决并修改范围。
但是没有理由这样做,只需要定义足够大的范围,这样你就不必再修改它了,例如。
PARTITION BY RANGE_N(demand_date
BETWEEN DATE '2018-01-01'
AND DATE '2040-01-01' EACH INTERVAL '1' DAY);
未使用的分区在Teradata中的开销为零。