如何使用管道将本地数据库中特定模式的所有表加载到 Fabric 中 Lakehouse 的表部分?

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

我正在尝试使用管道将数据从本地数据库提取到 Fabric Lakehouse。首先,我创建了脚本活动,以使用 SELECT table_name FROM all_tables WHERE Owner = 'SCHEMA1' 获取所有表名称的列表。在管道运行中,我得到这样的输出,

{ “结果集计数”:1, “受影响的记录”:0, “结果集”:[ { “行数”:2637, “行”:[ { "TABLE_NAME": "表1" }, { "TABLE_NAME": "表2" },.....

我想将其转换为一个表名数组,我可以将其传递给 foreach 活动进行迭代,并使用 foreach 内的 copydata 活动将数据放入 Lakehouse。另外,我想过滤 foreach 内的表名,以便仅获取所需的表以进行进一步的工程工作。

我仅通过在动态内容中提供引用来连接所有管道组件。

我尝试的一种方法是在管道中设置一个变量。但是当我将此变量传递给 foreach 时它不起作用。此时它正在传递一个空字典。说明如下。

管道运行:

set_variable 输入为 { "variableName": "RawTableNames", “价值”: [ { "TABLE_NAME": "表1" }, { "TABLE_NAME": "表2" },.....

set_variable 输出为 { "name": "RawTableNames", “价值”: [ { "TABLE_NAME": "表1" }, { "TABLE_NAME": "表2" },.....

foreach 输入是 { “项目数”:“2637” }

我的期望:

在 foreach 的输入中,如果我得到一个表名列表,则可以通过 foreach 对其进行迭代以执行下一个任务。

azure-data-factory pipeline azure-synapse
1个回答
0
投票

在 foreach 的输入中,如果我得到一个表名列表,则可以通过 foreach 迭代它来执行下一个任务

For-each 活动不会在其输出或输入中给出提供的数组。在输入中,它将显示您给出的数组的计数,如

{ "ItemsCount": "3" }
,并且它将在输出中显示空对象。

enter image description here

您可以在 For-each 活动中使用您想要的活动。

enter image description here

它将按照迭代工作。

我正在尝试使用管道将数据从本地数据库提取到 Fabric Lakehouse

要过滤表名称,您可以在 if 活动中使用 ADF 管道动态表达式。在 if 活动表达式中设置一个条件,然后您可以继续在 if 的 True 活动中进行 copy 活动。如果当前表名@item().TABLE_NAME

满足if活动中的条件,则会执行True活动中的复制活动,否则将执行If活动中的False活动中的活动。如果您愿意,您可以在“虚假”活动中进行任何活动,也可以根据您的要求留空。

您需要参数化复制活动源和接收器中的数据集,以在每次迭代中传递当前表名称@item().TABLE_NAME

您可以通过此

SO答案了解有关数据集参数以及向这些参数传递值的更多信息。

For-each 活动不会有任何输出。如果你想得到过滤后的表名数组,你需要在使用

appendvariableactivity检查条件后在for-each中构建数组。或者,您可以在 for-each 活动之后对输入数组使用 Filter 活动。

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