我有一个开发票的桌子,1100万行。我不想每天都做全面的刷新,而是以增量方式加载。实际上,我希望更新已更改的行并添加新行。
我的想法是创建一个表键,并使用它来确定发票行是否已经出现在我的水槽中。
案例:源密钥是..。
案例:水槽钥匙是..。
来想象我想要的..。

然而,我的问题是,我的源和水槽不是同一类型的。Source = ODBC (Hive),Sink = Azure SQL数据库。因此,在ADF中,您不能加入它们,并且查找的行数限制为5000行。
有办法解决这个问题吗?无论如何,在另一个语句的Where子句中使用一个列吗?
发布于 2021-05-13 06:01:08
我们可以使用合并来实现这一点。合并语法如下:
MERGE target_table USING source_table
ON merge_condition
WHEN MATCHED
THEN update_statement
WHEN NOT MATCHED
THEN insert_statement
WHEN NOT MATCHED BY SOURCE

CREATE TABLE [dbo].[emp](
[id] [int] NOT NULL,
[name] [varchar](20) NULL,
[age] [int] NULL
)
CREATE TYPE [dbo].[EmpType] AS TABLE(
[id] [int] NOT NULL,
[name] [nvarchar](max) NOT NULL,
[age] [nvarchar](max) NOT NULL
)
GOCREATE PROCEDURE [dbo].[uspEmp]
@emp [dbo].[EmpType] READONLY
AS
MERGE [dbo].[emp] AS target_sqldb
USING @emp AS source_tblstg
ON target_sqldb.id = source_tblstg.id
WHEN MATCHED THEN
UPDATE SET
target_sqldb.name = source_tblstg.name,
target_sqldb.age = source_tblstg.age
WHEN NOT MATCHED BY TARGET THEN
INSERT VALUES (
source_tblstg.id,
source_tblstg.name,
source_tblstg.age
);
--WHEN NOT MATCHED BY SOURCE THEN
--DELETE;Copy activity1将行复制到Azure中。选择存储的prcedure并单击Import parameter。
Coy activity2从Azure中删除行。CREATE PROCEDURE [dbo].[deleteEmp]
@emp [dbo].[EmpType] READONLY
AS
MERGE [dbo].[emp] AS target_sqldb
USING @emp AS source_tblstg
ON target_sqldb.id = source_tblstg.id
WHEN NOT MATCHED BY SOURCE THEN
DELETE;同样,选择存储的prcedure并单击Import parameter。

发布于 2021-05-13 05:58:15
您可以加入它们,并在ADF中筛选和查找。但你想在复制活动中做到这一点。这正是为数据流活动创建的用例类型:https://www.youtube.com/watch?v=GACpvMjOJgE
https://stackoverflow.com/questions/67512274
复制相似问题