Teradata table 分区从 select 覆盖
Teradata table partition overwrite from select
我有一个带分区 NUPI 的 table。
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
)
);
而且我想实现与 Apache Hive 中相同的功能(插入覆盖 TABLE 分区)。
是否可以在 Teradata 中执行相同的操作?
INSERT OVERWRITE TABLE mydb.orders_fact partition (order_date)
SELECT order_id, ...
order_date
FROM some_other_table;
如果不能完全一样,请指教在Teradata中重新加载分区的常见场景是什么?
我想要 运行 每日作业,它将用新数据(今天和前一天)重新加载最后两个每日分区,因此一个分区总是被完全覆盖,一个是新的。我也希望 ho 有可能进行重述 - 回载以前的日期。我不想合并分区中的数据。只覆盖整个分区
我应该执行 DROP/DELETE + INSERT 来做同样的事情还是什么?请提出解决方案。
Teradata 中没有 DROP PARTITION。数据按主索引分布,删除效率高:
重新加载分区之前:
delete from mydb.orders_fact where order_date between start_date and end_date
并再次加载它们:
insert into mydb.orders_fact
select * from some_other_table;
我有一个带分区 NUPI 的 table。
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
)
);
而且我想实现与 Apache Hive 中相同的功能(插入覆盖 TABLE 分区)。 是否可以在 Teradata 中执行相同的操作?
INSERT OVERWRITE TABLE mydb.orders_fact partition (order_date)
SELECT order_id, ...
order_date
FROM some_other_table;
如果不能完全一样,请指教在Teradata中重新加载分区的常见场景是什么?
我想要 运行 每日作业,它将用新数据(今天和前一天)重新加载最后两个每日分区,因此一个分区总是被完全覆盖,一个是新的。我也希望 ho 有可能进行重述 - 回载以前的日期。我不想合并分区中的数据。只覆盖整个分区
我应该执行 DROP/DELETE + INSERT 来做同样的事情还是什么?请提出解决方案。
Teradata 中没有 DROP PARTITION。数据按主索引分布,删除效率高:
重新加载分区之前:
delete from mydb.orders_fact where order_date between start_date and end_date
并再次加载它们:
insert into mydb.orders_fact
select * from some_other_table;