本文中的演练使用 Azure SQL 数据库。 还可使用 Azure SQL 托管实例。
创建 Azure-SSIS 集成运行时
如果还没有 Azure-SSIS 集成运行时,请按照
教程:部署 SSIS 包
。 无法使用数据工厂版本 1 创建 Azure-SSIS 集成运行时。
Azure PowerShell
在此部分中,将使用 Azure PowerShell 创建数据工厂管道,管道中包含可调用 SSIS 包的存储过程活动。
建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅
安装 Azure PowerShell
以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅
将 Azure PowerShell 从 AzureRM 迁移到 Az
。
按
如何安装和配置 Azure PowerShell
中的说明安装最新的 Azure PowerShell 模块。
创建数据工厂
下列过程提供创建数据工厂的步骤。 可在数据工厂中使用存储过程活动创建管道。 存储过程活动在 SSISDB 数据库中执行存储过程,运行 SSIS 包。
为资源组名称定义一个变量,稍后会在 PowerShell 命令中使用该变量。 将以下命令文本复制到 PowerShell,在双引号中指定
Azure 资源组
的名称,然后运行命令。 例如:
"adfrg"
。
$resourceGroupName = "ADFTutorialResourceGroup";
如果该资源组已存在,请勿覆盖它。 为 $ResourceGroupName
变量分配另一个值,然后再次运行命令
若要创建 Azure 资源组,请运行以下命令:
$ResGrp = New-AzResourceGroup $resourceGroupName -location 'eastus'
如果该资源组已存在,请勿覆盖它。 为 $ResourceGroupName
变量分配另一个值,然后再次运行命令。
定义一个用于数据工厂名称的变量。
更新数据工厂名称,使之全局唯一。
$DataFactoryName = "ADFTutorialFactory";
要创建数据工厂,请运行下面的 New-AzDataFactory cmdlet,使用 $ResGrp 变量中的 Location 和 ResourceGroupName 属性:
$df = New-AzDataFactory -ResourceGroupName $ResourceGroupName -Name $dataFactoryName -Location "East US"
请注意以下几点:
Azure 数据工厂的名称必须全局唯一。 如果收到以下错误,请更改名称并重试。
The specified Data Factory name 'ADFTutorialFactory' is already in use. Data Factory names must be globally unique.
若要创建数据工厂实例,用于登录到 Azure 的用户帐户必须属于参与者或所有者角色,或者是 Azure 订阅的管理员。
创建 Azure SQL 数据库链接服务
创建一个链接服务,将托管 SSIS 目录的 Azure SQL 数据库中的数据库链接到数据工厂。 数据工厂使用此链接服务中的信息连接到 SSISDB 数据库,并执行存储过程来运行 SSIS 包。
在 C:\ADF\RunSSISPackage 文件夹中创建一个名为 AzureSqlDatabaseLinkedService.json 的 JSON 文件,并在其中包含以下内容 :
保存文件之前,请将 <servername>、<username>@<servername> 和 <password> 替换为 Azure SQL 数据库的值。
"name": "AzureSqlDatabaseLinkedService",
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=SSISDB;User ID=<username>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
在 Azure PowerShell 中,切换到 C:\ADF\RunSSISPackage 文件夹 。
运行 New-AzDataFactoryLinkedService cmdlet,创建链接服务:AzureSqlDatabaseLinkedService 。
New-AzDataFactoryLinkedService $df -File ".\AzureSqlDatabaseLinkedService.json"
创建输出数据集
此输出数据集是一个虚拟数据集,用于驱动管道的计划。 注意,频率设置为“小时”,间隔设置为“1”。 因此,管道在启动至结束期间,一小时运行一次。
创建一个 OutputDataset.json 文件,并在其中包含以下内容:
"name": "sprocsampleout",
"properties": {
"type": "AzureSqlTable",
"linkedServiceName": "AzureSqlLinkedService",
"typeProperties": { },
"availability": {
"frequency": "Hour",
"interval": 1
运行 New-AzDataFactoryDataset cmdlet,创建一个数据集。
New-AzDataFactoryDataset $df -File ".\OutputDataset.json"
使用存储过程活动创建管道
在此步骤中,使用存储过程活动创建管道。 该活动调用 sp_executesql 存储过程来运行 SSIS 包。
在 C:\ADF\RunSSISPackage 文件夹中创建一个名为 MyPipeline.json 的 JSON 文件,并在其中包含以下内容:
保存文件之前,请将 <folder name>、<project name> 和 <package name> 替换为 SSIS 目录中文件夹、项目和包的名称。
"name": "MyPipeline",
"properties": {
"activities": [{
"name": "SprocActivitySample",
"type": "SqlServerStoredProcedure",
"typeProperties": {
"storedProcedureName": "sp_executesql",
"storedProcedureParameters": {
"stmt": "DECLARE @return_value INT, @exe_id BIGINT, @err_msg NVARCHAR(150) EXEC @return_value=[SSISDB].[catalog].[create_execution] @folder_name=N'<folder name>', @project_name=N'<project name>', @package_name=N'<package name>', @use32bitruntime=0, @runinscaleout=1, @useanyworker=1, @execution_id=@exe_id OUTPUT EXEC [SSISDB].[catalog].[set_execution_parameter_value] @exe_id, @object_type=50, @parameter_name=N'SYNCHRONIZED', @parameter_value=1 EXEC [SSISDB].[catalog].[start_execution] @execution_id=@exe_id, @retry_count=0 IF(SELECT [status] FROM [SSISDB].[catalog].[executions] WHERE execution_id=@exe_id)<>7 BEGIN SET @err_msg=N'Your package execution did not succeed for execution ID: ' + CAST(@exe_id AS NVARCHAR(20)) RAISERROR(@err_msg,15,1) END"
"outputs": [{
"name": "sprocsampleout"
"scheduler": {
"frequency": "Hour",
"interval": 1
"start": "2017-10-01T00:00:00Z",
"end": "2017-10-01T05:00:00Z",
"isPaused": false
要创建管道 RunSSISPackagePipeline,请运行 New-AzDataFactoryPipeline cmdlet 。
$DFPipeLine = New-AzDataFactoryPipeline -DataFactoryName $DataFactory.DataFactoryName -ResourceGroupName $ResGrp.ResourceGroupName -Name "RunSSISPackagePipeline" -DefinitionFile ".\RunSSISPackagePipeline.json"
监视管道运行
运行 Get-AzDataFactorySlice,获取有关输出数据集**(管道的输出表)的所有切片的详细信息。
Get-AzDataFactorySlice $df -DatasetName sprocsampleout -StartDateTime 2017-10-01T00:00:00Z
请注意,此处指定的 StartDateTime 与在管道 JSON 中指定的开始时间是相同的。
运行 Get-AzDataFactoryRun,获取特定切片的活动运行详细信息。
Get-AzDataFactoryRun $df -DatasetName sprocsampleout -StartDateTime 2017-10-01T00:00:00Z
可以继续运行此 cmdlet,直到切片进入“就绪”状态或“失败”状态。
可在服务器中针对 SSISDB 数据库运行以下查询,验证是否执行了该包。
select * from catalog.executions
有关存储过程活动的详细信息,请参阅存储过程活动一文。