如何在映射源为参数化 SAP CDC 数据集的数据流时使用验证架构

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

我有一个要求,当源发生更改时,我们不想更改目标(即 ADLS)中的数据集的架构

(SAP BW)
。 我创建了一个映射数据流,其源具有
SAP CDC
数据集,其中有
ODPNAME
ODPContext
loadType
runMode
参数化。 我禁用了
"Allow schema drift"
选项,并尝试了两件事,首先启用“验证架构”,然后禁用所有选项。 但是当我去验证或发布更改时,它开始抛出一个错误,
"schema should be defined in the dataset or enable allow schema drift"
。 因此,我在数据集中定义了一个架构,但 SAP CDC 数据集中没有该架构的选项。

有人可以帮我吗,我被这个问题困扰了。

此外,投影选项没有帮助,因为管道被参数化了

ODPName and ODPContext are taken at runtime
。或者如果我遗漏了什么,请告诉我。

azure azure-data-factory sap
1个回答
0
投票

在参数化和动态更改模式的情况下,验证模式选项将不起作用。当您导入投影时可以使用它,并且稍后在数据流运行期间数据会发生变化。

在这种情况下,您可以使用 assert 转换来使数据流失败。请遵循以下数据流设计。

对源进行所有转换后,获取一个派生列并创建一个新列

source_col_names
并给出表达式
ColumnNames()
,如下所示。

enter image description here

现在,采用另一个来源并为此提供目标 ADLS 数据集。同样,进行另一个派生列转换并使用相同的表达式

target_col_names
创建一个新列
ColumnNames()

enter image description here

现在,使用断言转换条件比较这两个数组列,如下所示。

衍生列2上进行断言转换并在附加流中添加衍生列1转换。检查失败数据流并选择预期存在。给出任何描述,并在表达式中从两个转换中选择

source_col_names
target_col_names

enter image description here

如果来自 returnedColumn2 的

source_col_names
的第一行,即源的列名数组不存在于目标列名数组中,则数据流将失败。否则,这将进入下一个转变。

接下来,使用选择转换基于规则的映射,删除额外创建的列,如下所示。

(name!='target_col_names')&&(name!='source_col_names')

enter image description here

在接收器中再次添加目标数据集。如果架构相同,则将源数据复制到目标文件。否则,数据流将失败,如下所示。

enter image description here

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