本文属于【Azure Data Platform】系列。
接上文:【Azure Data Platform】ETL工具(14)——ADF控制流简介
本文介绍ADF 的lookup 详解
前言
Lookup活动,可以读取数据库中或文件系统中的数据然后作为参数,传输到后续的数据复制和数据转换活动中。但是ADF的lookup只能用于对象级别。也就是说用来定义文件名,表名等。并且这些都只能在同一个管道中实现。
它可以从多种数据源中读取数据,详细列表:支持的数据源。Lookup活动支持单行模式和数据模式(全部数据集),下面分别演示一下。
单行模式
单行模式就是从数据源中获取第一行的数据而不是全部数据。首先从数据库中获取用户表名,并把第一行传输到后续的操作中作为输入参数。
先创建一个管道,并通过下面的SQL获取数据库中所有表名。
select schema_name(schema_id)+'.'+name as Name
from sys.tables
然后使用一个存储过程把上面的表名以值的形式插入到日志表中:
CREATE TABLE [dbo].[Log](
[TableName] [varchar](max) NULL
)
GO
CREATE PROCEDURE [dbo].[sp_LogTBNames]
@TableName varchar(max)
AS
BEGIN
INSERT INTO [Log] Values(@TableName)
END
GO
拖拽一个“存储过程”活动并接收Lookup活动的输出:
找出上面创建的存储过程。
导入并在值中选择添加动态内容,选择Lookup1的输出作为参数值,如下图:
但是最终参数并不能直接选用,要再添加两部分,firstRow.Name, 也就是参数值为:@activity(‘Lookup1’).output.firstRow.Name
然后完成了搭建,并发布,调试:
检查结果:
接下来我们试一下数据模式,也就是整个数据集。
数组模式
首先数组模式与单行模式的区别是不可勾选【仅第一行】,这里我们沿用上面的pipeline,但是取消勾选【仅第一行】然后拖拽“设置变量”
点击空白处,创建一个变量TableName,并把类型设置为“数组”类型:
在设置变量中的变量页选择上面创建出来的变量“TableName”:
如下图所示,选择Lookup1中的输出值为TableName的输入值。
发布并调试,可以看到Lookup1的输出如下,是一个数组类型,而不是前面那种单值类型,单值模式显示的是【FirstRow】:
检查输入,也就是“设置变量”活动中的输入值: