Teradata:如何扩展非空分区 table 的范围分区?

Teradata: How to extend the range partition of a non-empty partitioned table?

我已经创建了一个 table、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.

我知道我可以:

  1. 创建副本 PARTITION BY RANGE_N(demand_date BETWEEN DATE '2018-01-01' AND '9999-12-31' EACH INTERVAL '1' DAY );
  2. 将旧table中的所有数据插入新
  3. 放弃旧的 table
  4. 重命名新的 table

但我希望 teradata 提供一种更优雅的方式来 将分区添加到现有分区 table.

我已经查阅了以下 Whosebug 帖子:

他们很有启发性,但我无法从其中的讨论中得到答案。

使用CURRENT_DATE 进行分区是可能的,但我从未找到它的用例。

当您创建 table 时,它被解析为 当前日期 ,但之后没有更改,请检查 [=12= 中的 ResolvedCurrent_Date 列].当您提交 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 中的开销为零。