gpt4 book ai didi

Azure 数据工厂 V2 : Copy OR Stored Procedure activity for SQL merge

转载 作者:行者123 更新时间:2023-12-03 02:58:35 25 4
gpt4 key购买 nike

我们的 Azure 数据工厂 v2 解决方案中有许多数据库表合并步骤。我们将表合并到 Azure SQL Server DB 的单个实例中。源表和目标表位于不同的数据库架构中。源被定义为对单个表的选择或两个表的联接。

我的疑问是,从性能角度来看,下面描述的场景中哪一种更好。

场景一(每个表)

存储过程事件调用执行所有工作的存储过程。管道中的存储过程事件调用该存储过程。更新插入包含所有源数据的目标表。此类存储过程的示例:

create or alter procedure dwh.fill_lnk_cemvypdet_cemstr2c_table_with_stage_data as
merge
dwh.lnk_cemvypdet_cemstr2c as target
using

(select
t.sa_hashkey cemvypdet_hashkey,
t.sa_timestamp load_date,
t.sa_source record_source,
d.sa_hashkey cemstr2c_hashkey
from
egje.cemvypdet t
join
egje.cemstr2c d
on
t.id_mstr = d.id_mstr)
as source
on target.cemvypdet_hashkey = source.cemvypdet_hashkey
and target.cemstr2c_hashkey = source.cemstr2c_hashkey
when not matched then
insert(
cemvypdet_hashkey,
cemstr2c_hashkey,
record_source,
load_date,
last_seen_date)
values(
source.cemvypdet_hashkey,
source.cemstr2c_hashkey,
source.record_source,
source.load_date,
source.load_date)
when matched then
update set last_seen_date = source.load_date;

场景二(每行)

复制事件声明一个要在“目标”选项卡中调用的存储过程,以便该事件为源的每一行调用该存储过程。

create or alter procedure dwh.fill_lnk_cemvypdet_cemstr2c_subset_table_row_with_stage_data
@lnk_cemvypdet_cemstr2c_subset dwh.lnk_cemvypdet_cemstr2c_subset_type readonly
as
merge
dwh.lnk_cemvypdet_cemstr2c_subset as target
using

@lnk_cemvypdet_cemstr2c_subset
as source
on target.cemvypdet_hashkey = source.cemvypdet_hashkey
and target.cemstr2c_hashkey = source.cemstr2c_hashkey
when not matched then
insert(
hashkey,
cemvypdet_hashkey,
cemstr2c_hashkey,
record_source,
load_date,
last_seen_date)
values(
source.hashkey,
source.cemvypdet_hashkey,
source.cemstr2c_hashkey,
source.record_source,
source.load_date,
source.load_date)
when matched then
update set last_seen_date = source.load_date;

类型@lnk_cemvypdet_cemstr2c_subset被定义为遵循目标表结构的表类型。

最佳答案

场景 1 应该具有更好的性能,但考虑以下优化:

  1. 在源表中的连接列上创建唯一且覆盖的索引。
  2. 在目标表中的连接列上创建唯一聚集索引。
  3. 参数化 ON 子句和 WHEN 子句中的所有文字值。
  4. 通过使用 OFFSET 和 ROWS FETCH NEXT 或在源或目标上定义返回已筛选行的 View 并将该 View 引用为源表或目标表,将数据子集从源表合并到目标表。此外,不建议使用 TOP 子句的WITH 子句来过滤源表或目标表中的行,因为它们可能会生成不正确的结果。
  5. 要进一步优化合并操作,请尝试不同的批量大小。 Here就是这个原因。

关于Azure 数据工厂 V2 : Copy OR Stored Procedure activity for SQL merge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51149857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com