Teradata表分区覆盖从选择

Teradata表分区覆盖从选择,teradata,partitioning,partition,Teradata,Partitioning,Partition,我有一张带分区NUPI的桌子 CREATE MULTISET TABLE mydb.orders_fact ( order_date DATE FORMAT 'yyyy-mm-dd' NOT NULL, order_id INTEGER NOT NULL, ... ) PRIMARY INDEX NUPI_orders_fact ( order_id, ... ) PARTITION BY ( RANGE_N

我有一张带分区NUPI的桌子

CREATE MULTISET TABLE mydb.orders_fact

(
order_date                    DATE FORMAT 'yyyy-mm-dd' NOT NULL, 
order_id                      INTEGER NOT NULL,
...
)
PRIMARY INDEX NUPI_orders_fact ( order_id, ... )

PARTITION BY 
(
RANGE_N
   (
   order_date BETWEEN DATE '2016-01-01' AND DATE '2019-12-31' EACH INTERVAL '1' MONTH ,
   DATE '2020-01-01' AND '2025-12-31' EACH INTERVAL '1' DAY ,
   NO RANGE
   ) 
);
我想实现与ApacheHive(插入覆盖表分区)相同的功能。 在Teradata中也可以这样做吗

INSERT OVERWRITE TABLE mydb.orders_fact partition (order_date)
SELECT order_id, ...
       order_date
  FROM some_other_table;
如果不可能完全相同,请建议在Teradata中重新加载分区的常见场景是什么

我想运行daily job,它将用新数据重新加载最后两个每日分区(今天和前一天),所以一个分区总是被完全覆盖,另一个是新的。此外,我希望何有可能做重述-回加载以前的日期。我不想合并分区中的数据。仅覆盖整个分区


我应该执行的是拖放/删除+插入操作还是什么?请建议解决方案。

Teradata中没有拖放分区。数据按主索引分布,删除工作高效:

在重新加载分区之前:

delete from mydb.orders_fact where order_date between start_date and end_date
然后再次加载它们:

insert into mydb.orders_fact 
select * from some_other_table;

只需运行
delete from mydb.orders\u fact,其中order\u date介于当前\u date-1和当前\u date之间
,这将导致快速路径删除这两个分区(除非您得到触发器或外键),然后插入/选择(同样是快速路径,因为目标分区为空)。您所说的重述是什么意思-回加载以前的日期?@dnoeth我的意思是,在重述时,我可以对过去的分区重复此操作。insert语句将只影响数据集返回的分区,而现有分区将保持原样,对吗?请以回复方式发布您需要知道哪些日期需要重新加载,并在之前运行匹配的删除。Teradata中的分区不是物理文件。@请不要费心回答这个问题,我接受