使用 DuckDB 更新插入

问题描述 投票:0回答:1

假设我有两个镶木地板文件(又称为主文件),并更新了一些数据,如下所示。我需要在鸭数据库中实现 upsert 类型的操作。

镶木地板文件主要:id、名称、城市

data:
   id     name     city 
    1      a         p
    2      b         q
    3      c         r
    

parquet 文件更新:id、名称、城市

data:
   id     name     city
    1      a         m
    4      b         q

所需输出:-

   id     name     city
    1      a         m  <----update city
    2      b         q
    3      c         r
    4      b         q  <----insert

目前我正在使用以下查询执行相同的操作:-

create table main as select * from '/tmp/main.parquet';
create table stage as  select * from '/tmp/updates.parquet';
delete from main using stage where main.id=stage.id;
insert into main select * from stage;
COPY main TO '/tmp/final.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');

但唯一的事情是创建表将加载所有数据并将其保留在内存中,这是我不想要的,因为主文件可能包含 8-1000 万条记录,有什么方法可以仅使用连接来实现相同的目的并避免创建主桌和舞台桌。

mysql apache-spark data-analysis duckdb
1个回答
0
投票

DuckDB 有 upsert 支持,请参阅文档:https://duckdb.org/docs/sql/statements/insert#on-conflict-clause

© www.soinside.com 2019 - 2024. All rights reserved.