如何在Azure Data Factory V2中将上一步的输出传递到下一步?
我在Data Factory中构建了一系列活动,如下图所示 我想知道如何从如何在Azure Data Factory V2中将上一步的输出传递到下一步?,azure,azure-data-factory,azure-data-factory-2,Azure,Azure Data Factory,Azure Data Factory 2,我在Data Factory中构建了一系列活动,如下图所示 我想知道如何从步骤2中的步骤1捕获并传递SQL Server输出(包括错误消息)。如屏幕截图所示,我目前正在使用@activity('PR\u TEST\u RAISE\u ERROR')。输出,希望它捕获错误消息,如ERROR:TEST ERROR message,但当我检查日志表时,我们从使用@activity('PR\u TEST\u RAISE\u ERROR')中得到的消息如下所示。输出: exec [dbo].[PR_TE
步骤2
中的步骤1
捕获并传递SQL Server输出(包括错误消息)。如屏幕截图所示,我目前正在使用@activity('PR\u TEST\u RAISE\u ERROR')。输出,希望它捕获错误消息,如ERROR:TEST ERROR message
,但当我检查日志表时,我们从使用@activity('PR\u TEST\u RAISE\u ERROR')中得到的消息如下所示。输出
:
exec [dbo].[PR_TEST_LOG_ERROR_CATCHING] '[pr_test_sql_error_catching]', 'success'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PR_TEST_LOG_ERROR_CATCHING]
(
@log_table_name AS NVARCHAR(100),
@message AS NVARCHAR(MAX)
)
AS
DECLARE @cur_date DATETIME = getdate();
DECLARE @query NVARCHAR(MAX);
SET @query = (
'INSERT INTO [dbo].' + @log_table_name
+ '(
[Message],
[Logged_On]
)
VALUES ('''
+ @message + ''','
+ '''' + CONVERT(NVARCHAR, @cur_date) + ''''
+ ');'
);
EXEC (@query)
GO
CREATE TABLE Persons (
Message nvarchar(max),
Logged_On datetime
);
{
"name": "pr_test_sql_error_catching",
"properties": {
"description": "Example pipeline showing how we can catch SQL errors",
"activities": [
{
"name": "PR_TEST_RAISE_ERROR",
"description": "[dbo].[PR_TEST_RAISE_ERROR]",
"type": "SqlServerStoredProcedure",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_RAISE_ERROR]"
},
"linkedServiceName": {
"referenceName": "pr_us_programmatic_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_successful",
"description": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Succeeded"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": "success",
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_Errored",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Failed"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": {
"value": "@activity('PR_TEST_RAISE_ERROR').output",
"type": "Expression"
},
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
}
]
},
"type": "Microsoft.DataFactory/factories/pipelines"
}
如果有人想复制我所面临的内容,则步骤1中存储过程的代码如下所示:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PR_TEST_RAISE_ERROR]
AS
RAISERROR ('ERROR: test error message',16,1);
GO
exec [dbo].[PR_TEST_LOG_ERROR_CATCHING] '[pr_test_sql_error_catching]', 'failure'
对于步骤2
当步骤1成功时,我让它使用如下参数运行一个存储过程:
exec [dbo].[PR_TEST_LOG_ERROR_CATCHING] '[pr_test_sql_error_catching]', 'success'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PR_TEST_LOG_ERROR_CATCHING]
(
@log_table_name AS NVARCHAR(100),
@message AS NVARCHAR(MAX)
)
AS
DECLARE @cur_date DATETIME = getdate();
DECLARE @query NVARCHAR(MAX);
SET @query = (
'INSERT INTO [dbo].' + @log_table_name
+ '(
[Message],
[Logged_On]
)
VALUES ('''
+ @message + ''','
+ '''' + CONVERT(NVARCHAR, @cur_date) + ''''
+ ');'
);
EXEC (@query)
GO
CREATE TABLE Persons (
Message nvarchar(max),
Logged_On datetime
);
{
"name": "pr_test_sql_error_catching",
"properties": {
"description": "Example pipeline showing how we can catch SQL errors",
"activities": [
{
"name": "PR_TEST_RAISE_ERROR",
"description": "[dbo].[PR_TEST_RAISE_ERROR]",
"type": "SqlServerStoredProcedure",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_RAISE_ERROR]"
},
"linkedServiceName": {
"referenceName": "pr_us_programmatic_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_successful",
"description": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Succeeded"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": "success",
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_Errored",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Failed"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": {
"value": "@activity('PR_TEST_RAISE_ERROR').output",
"type": "Expression"
},
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
}
]
},
"type": "Microsoft.DataFactory/factories/pipelines"
}
对于步骤2
,当步骤1失败时,我让它运行相同的存储过程,如下所示:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PR_TEST_RAISE_ERROR]
AS
RAISERROR ('ERROR: test error message',16,1);
GO
exec [dbo].[PR_TEST_LOG_ERROR_CATCHING] '[pr_test_sql_error_catching]', 'failure'
其中,[dbo].[PR\u TEST\u LOG\u ERROR\u CATCHING]
的编码如下:
exec [dbo].[PR_TEST_LOG_ERROR_CATCHING] '[pr_test_sql_error_catching]', 'success'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PR_TEST_LOG_ERROR_CATCHING]
(
@log_table_name AS NVARCHAR(100),
@message AS NVARCHAR(MAX)
)
AS
DECLARE @cur_date DATETIME = getdate();
DECLARE @query NVARCHAR(MAX);
SET @query = (
'INSERT INTO [dbo].' + @log_table_name
+ '(
[Message],
[Logged_On]
)
VALUES ('''
+ @message + ''','
+ '''' + CONVERT(NVARCHAR, @cur_date) + ''''
+ ');'
);
EXEC (@query)
GO
CREATE TABLE Persons (
Message nvarchar(max),
Logged_On datetime
);
{
"name": "pr_test_sql_error_catching",
"properties": {
"description": "Example pipeline showing how we can catch SQL errors",
"activities": [
{
"name": "PR_TEST_RAISE_ERROR",
"description": "[dbo].[PR_TEST_RAISE_ERROR]",
"type": "SqlServerStoredProcedure",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_RAISE_ERROR]"
},
"linkedServiceName": {
"referenceName": "pr_us_programmatic_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_successful",
"description": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Succeeded"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": "success",
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_Errored",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Failed"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": {
"value": "@activity('PR_TEST_RAISE_ERROR').output",
"type": "Expression"
},
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
}
]
},
"type": "Microsoft.DataFactory/factories/pipelines"
}
日志表(@log\u table\u name
)[pr\u test\u sql\u error\u catching]
的创建方式如下:
exec [dbo].[PR_TEST_LOG_ERROR_CATCHING] '[pr_test_sql_error_catching]', 'success'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PR_TEST_LOG_ERROR_CATCHING]
(
@log_table_name AS NVARCHAR(100),
@message AS NVARCHAR(MAX)
)
AS
DECLARE @cur_date DATETIME = getdate();
DECLARE @query NVARCHAR(MAX);
SET @query = (
'INSERT INTO [dbo].' + @log_table_name
+ '(
[Message],
[Logged_On]
)
VALUES ('''
+ @message + ''','
+ '''' + CONVERT(NVARCHAR, @cur_date) + ''''
+ ');'
);
EXEC (@query)
GO
CREATE TABLE Persons (
Message nvarchar(max),
Logged_On datetime
);
{
"name": "pr_test_sql_error_catching",
"properties": {
"description": "Example pipeline showing how we can catch SQL errors",
"activities": [
{
"name": "PR_TEST_RAISE_ERROR",
"description": "[dbo].[PR_TEST_RAISE_ERROR]",
"type": "SqlServerStoredProcedure",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_RAISE_ERROR]"
},
"linkedServiceName": {
"referenceName": "pr_us_programmatic_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_successful",
"description": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Succeeded"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": "success",
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_Errored",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Failed"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": {
"value": "@activity('PR_TEST_RAISE_ERROR').output",
"type": "Expression"
},
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
}
]
},
"type": "Microsoft.DataFactory/factories/pipelines"
}
如果有人对整个Data Factory活动序列的源代码感到好奇,则如下所示:
exec [dbo].[PR_TEST_LOG_ERROR_CATCHING] '[pr_test_sql_error_catching]', 'success'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[PR_TEST_LOG_ERROR_CATCHING]
(
@log_table_name AS NVARCHAR(100),
@message AS NVARCHAR(MAX)
)
AS
DECLARE @cur_date DATETIME = getdate();
DECLARE @query NVARCHAR(MAX);
SET @query = (
'INSERT INTO [dbo].' + @log_table_name
+ '(
[Message],
[Logged_On]
)
VALUES ('''
+ @message + ''','
+ '''' + CONVERT(NVARCHAR, @cur_date) + ''''
+ ');'
);
EXEC (@query)
GO
CREATE TABLE Persons (
Message nvarchar(max),
Logged_On datetime
);
{
"name": "pr_test_sql_error_catching",
"properties": {
"description": "Example pipeline showing how we can catch SQL errors",
"activities": [
{
"name": "PR_TEST_RAISE_ERROR",
"description": "[dbo].[PR_TEST_RAISE_ERROR]",
"type": "SqlServerStoredProcedure",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_RAISE_ERROR]"
},
"linkedServiceName": {
"referenceName": "pr_us_programmatic_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_successful",
"description": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Succeeded"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": "success",
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
},
{
"name": "PR_TEST_LOG_ERROR_CATCHING_When_Errored",
"type": "SqlServerStoredProcedure",
"dependsOn": [
{
"activity": "PR_TEST_RAISE_ERROR",
"dependencyConditions": [
"Failed"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"typeProperties": {
"storedProcedureName": "[dbo].[PR_TEST_LOG_ERROR_CATCHING]",
"storedProcedureParameters": {
"log_table_name": {
"value": "[pr_test_sql_error_catching]",
"type": "String"
},
"message": {
"value": {
"value": "@activity('PR_TEST_RAISE_ERROR').output",
"type": "Expression"
},
"type": "String"
}
}
},
"linkedServiceName": {
"referenceName": "pr_sql_db",
"type": "LinkedServiceReference"
}
}
]
},
"type": "Microsoft.DataFactory/factories/pipelines"
}
提前感谢您对我如何在Azure Data Factory中将错误消息(或任何类型的输出)从上一步传递到下一步的回答/建议