在vertica中创建20列的表b,就像在impala中一样。 构建一个连接impala和vertica的java程序。在那个程序中,批量读取 SELECT * FROM impala.B 并将该内存用作目标语句的主机变量 INSERT /*+DIRECT */ INTO vertica.B VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) . 创建(或保留)暂存表 stg_A 具有与50列表a相同的结构和主键(理想情况下是一列)。 截断暂存表,然后 INSERT /*+DIRECT */ INTO stg_A SELECT B.*, A.col21,A.col22 .... A.col50 FROM B JOIN A ON stg_A.id=A.id (如果 id 是主键)。这确保20列来自 Impala ,其余的来自目标。 最后,运行优化合并:
MERGE /*+DIRECT*/
INTO A t
USING stg_A s
ON s.id = t.id
WHEN MATCHED THEN UPDATE SET
id = s.id
, col02 = s.col02
, col03 = s.col03
, col04 = s.col04
, col05 = s.col05
[...]
, col50 = s.col50
WHEN NOT MATCHED THEN INSERT VALUES (
s.s.id
, s.s.col02
, s.s.col03
, s.s.col04
, s.s.col05
, s.[...]
, s.s.col50
);
1条答案
按热度按时间9nvpjoqh1#
在vertica中创建20列的表b,就像在impala中一样。
构建一个连接impala和vertica的java程序。在那个程序中,批量读取
SELECT * FROM impala.B
并将该内存用作目标语句的主机变量INSERT /*+DIRECT */ INTO vertica.B VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
.创建(或保留)暂存表
stg_A
具有与50列表a相同的结构和主键(理想情况下是一列)。截断暂存表,然后
INSERT /*+DIRECT */ INTO stg_A SELECT B.*, A.col21,A.col22 .... A.col50 FROM B JOIN A ON stg_A.id=A.id
(如果id
是主键)。这确保20列来自 Impala ,其余的来自目标。最后,运行优化合并:
当explain计划有一个用于insert的完整访问路径和一个用于delete的完整访问路径,而没有用于merge的访问路径时,您将看到您的合并是一个优化的合并。