jacktby jacktby
08/11/2023, 7:39 AMcreate table account
using delta select col1 as id,col2 as name,col3 as last_updated from values (1, 'alice', '2023-01-01');
create temp view account_stage as select col1 as id, col2 as name,col3 as last_updated,col4 as operation
from values(1, 'alice', '2023-02-22', 'U'),(1, 'alice', '2023-02-22', 'D');
MERGE INTO account
using (SELECT id, NAME, last_updated,operation FROM account_stage) AS cdc
ON account.id = cdc.id
WHEN matched AND cdc.operation='U' THEN
UPDATE SET NAME = cdc.NAME, last_updated = cdc.last_updated
WHEN matched AND cdc.operation='D' THEN
DELETE
WHEN NOT matched AND cdc.operation='I' THEN
INSERT (account.id,account.name,account.last_updated) VALUES(cdc.id, cdc.NAME, cdc.last_updated);
Vincent Chee
08/11/2023, 8:08 AMjacktby jacktby
08/11/2023, 8:11 AMVincent Chee
08/11/2023, 8:14 AMalice
jacktby jacktby
08/11/2023, 8:16 AMCREATE TABLE account_stage
(
id INT,
NAME VARCHAR,
last_updated DATETIME,
operation VARCHAR
);
INSERT INTO account_stage VALUES (1, 'alice', '2023-02-22', 'U');
INSERT INTO account_stage VALUES (1, 'alice', '2023-02-22', 'D');
CREATE TABLE account
(
id INT,
name VARCHAR,
last_updated DATETIME
);
INSERT INTO account VALUES (1, 'alice', '2023-01-01');
MERGE INTO account
using (SELECT id, NAME, last_updated,operation FROM account_stage) AS cdc
ON account.id = cdc.id
WHEN matched AND cdc.operation='U' THEN
UPDATE SET NAME = cdc.NAME, last_updated = cdc.last_updated
WHEN matched AND cdc.operation='D' THEN
DELETE
WHEN NOT matched AND cdc.operation='I' THEN
INSERT VALUES(cdc.id, cdc.NAME, cdc.last_updated);
we can success on other productsVincent Chee
08/11/2023, 8:19 AMjacktby jacktby
08/11/2023, 8:33 AMVincent Chee
08/11/2023, 8:36 AMjacktby jacktby
08/11/2023, 8:36 AMVincent Chee
08/11/2023, 8:37 AM(1, 'alice', '2023-02-22', 'U')
(1, 'alice', '2023-02-22', 'D')
These two events are modifying two different rows?jacktby jacktby
08/11/2023, 8:38 AMCREATE TABLE account
(
id INT,
name VARCHAR,
last_updated DATETIME
);
INSERT INTO account VALUES (1, 'alice', '2023-01-01');
Vincent Chee
08/11/2023, 8:40 AMjacktby jacktby
08/11/2023, 8:53 AMCREATE TABLE account
(
id INT,
name VARCHAR,
last_updated DATETIME
);
INSERT INTO account VALUES (1, 'alice', '2023-01-01');
INSERT INTO account VALUES (2, 'bob', '2023-01-01');
INSERT INTO account VALUES (3, 'charlie', '2023-01-02');
CREATE TABLE account_stage
(
id INT,
NAME VARCHAR,
last_updated DATETIME,
operation VARCHAR
);
INSERT INTO account_stage VALUES (1, 'alice', '2023-02-22', 'U');
INSERT INTO account_stage VALUES (1, 'alice', '2023-02-23', 'D');
INSERT INTO account_stage VALUES (2, 'bob', '2023-02-21', 'U');
INSERT INTO account_stage VALUES (2, 'bob', '2023-02-23', 'U');
INSERT INTO account_stage VALUES (4, 'dell', '2022-02-23', 'I');
MERGE INTO account
using (SELECT id, NAME, last_updated,operation FROM account_stage) AS cdc
ON account.id = cdc.id
WHEN matched AND cdc.operation='U' THEN
UPDATE SET NAME = cdc.NAME, last_updated = cdc.last_updated
WHEN matched AND cdc.operation='D' THEN
DELETE
WHEN NOT matched AND cdc.operation='I' THEN
INSERT VALUES(cdc.id, cdc.NAME, cdc.last_updated)
what about this? you think it will success or fail?Vincent Chee
08/11/2023, 8:56 AMjacktby jacktby
08/11/2023, 9:05 AMVincent Chee
08/11/2023, 9:12 AMjacktby jacktby
08/11/2023, 9:27 AMcreate table account
using delta select col1 as id,col2 as name,col3 as last_updated from values (1, 'alice', '2023-01-01');
create temp view account_stage as select col1 as id, col2 as name,col3 as last_updated,col4 as operation
from values(1, 'alice', '2023-02-22', 'U'),(1, 'alice', '2023-02-22', 'D');
MERGE INTO account
using (SELECT id, NAME, last_updated,operation FROM account_stage) AS cdc
ON account.id = cdc.id
WHEN matched AND cdc.operation='U' THEN
UPDATE SET NAME = cdc.NAME, last_updated = cdc.last_updated
WHEN matched AND cdc.operation='U' THEN
DELETE
WHEN NOT matched AND cdc.operation='I' THEN
INSERT (account.id,account.name,account.last_updated) VALUES(cdc.id, cdc.NAME, cdc.last_updated);
what about this?