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.
我知道我可以:
- 创建副本
PARTITION BY RANGE_N(demand_date BETWEEN DATE '2018-01-01' AND '9999-12-31' EACH INTERVAL '1' DAY );
- 将旧table中的所有数据插入新
- 放弃旧的 table
- 重命名新的 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 中的开销为零。
我已经创建了一个 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.
我知道我可以:
- 创建副本
PARTITION BY RANGE_N(demand_date BETWEEN DATE '2018-01-01' AND '9999-12-31' EACH INTERVAL '1' DAY );
- 将旧table中的所有数据插入新
- 放弃旧的 table
- 重命名新的 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 中的开销为零。