我在postgresql中创建了一个下表:
create table retail_fact( id serial not null, name text);
我在hive和MySQL中有customer表,我想使用Pentaho pdi(通过presto连接)将数据从它们加载到PostgreSQL retail_fact
表。
此外,当我使用来自Hive和MySQL的数据加载表时,O希望id在Postgres中自动递增(更简单的说法。我需要一个sql查询来执行相同的操作。)
查询如下所示:
insert into postgresql.rpt.order_fact(
select name from hive.retail.customer_hive
UNION
select name from mysql.retail.customer_mysql
);
当我将名称列的上述数据插入postgres中的order_fact时,如何使id列自动递增?
答案 0 :(得分:0)
你的表构造看起来不像PostgreSQL ......可能是MS SQL Server或Sybase,但是除此之外。如果您使用的是PostgreSQL且版本为9.x,则序列会在幕后实现序列/默认值。我认为在10.x上它是不同的,但在9.x上,你可以简单地劫持你的插入序列:
insert into postgresql.rpt.order_fact
with results as (
select name from hive.retail.customer_hive
UNION
select name from mysql.retail.customer_mysql
)
select
nextval('retail_fact_id_seq'), name
from results;
我假设CTE是必要的,否则唯一的序列值会将union
变成union all
。
或者,更好(更便携),在插入中明确指定字段:
insert into postgresql.rpt.order_fact (name)
select name from hive.retail.customer_hive
UNION
select name from mysql.retail.customer_mysql