如何从数据流访问管道参数?

时间:2019-06-05 13:16:03

标签: parameters transformation pipeline azure-data-factory azure-data-factory-2

我有一个带有参数(类型为int)的管道。在管道内部,在某一点上,我有一个数据流。该数据流需要引用此参数,以便按其过滤数据并将其添加为新的派生列。但是,从数据流中,我无法访问数据流本身所在的管道中定义的参数。

管道:

    {
    "name": "TestPipeline",
    "properties": {
        "activities": [
            {
                "name": "TestDataFlow",
                "type": "ExecuteDataFlow",
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "typeProperties": {
                    "dataflow": {
                        "referenceName": "TestDataFlow",
                        "type": "DataFlowReference"
                    }
                }
            }
        ],
        "parameters": {
            "CompanyId": {
                "type": "int",
                "defaultValue": 1
            }
        }
    }
}

数据流:

    {
    "name": "TestDataFlow",
    "properties": {
        "type": "MappingDataFlow",
        "typeProperties": {
            "sources": [
                {
                    "dataset": {
                        "referenceName": "DBEmployee",
                        "type": "DatasetReference"
                    },
                    "name": "Employees",
                    "script": "source(output(\n\t\tId as long,\n\t\tName as string,\n\t\tSurname as string,\n\t\tEmail as string,\n\t\tPosition as string\n\t),\n\tallowSchemaDrift: true,\n\tvalidateSchema: false,\n\tformat: 'table') ~> Employees"
                }
            ],
            "transformations": [
                {
                    "name": "AddColumnId",
                    "script": "Employees derive(ColumnId = ERROR_FUNCTION('@pipeline(__SINGLE_QUOTE__TestPipeline__SINGLE_QUOTE__).parameters.CompanyId')) ~> AddColumnId"
                }
            ]
        }
    }
}

我的查询很简单。如何从数据流内部的转换中访问管道的参数“ CompanyId”?

谢谢!

2 个答案:

答案 0 :(得分:0)

我使用了一个参数来过滤数据流中来自数据集的传入数据,但是没有看到如何引用数据流中的参数来在流中进行操作(即未出现在“过滤器”可用的列表中)例如块)。您能否接受参数,将其作为查询的一部分发送到源,然后过滤和/或返回值作为结果集中的列,然后这样做?还没有尝试过。

引用管道参数:

如果您的数据集带有参数,则数据流将能够在数据流设置面板中提供该参数(出现在“源参数”下)。可以从管道参数提供该值。 没有数据集参数-“源参数”选项不会出现。

在下面的示例中,source1是我在数据流dataflow1中的数据集引用。它需要一个名为“ test”的参数。

我的管道有一个名为Test1的参数。这被传递到数据流。

请注意UI中有关如何调试的警告。

{
"name": "pipeline1",
"properties": {
    "activities": [
        {
            "name": "dataflow1",
            "type": "ExecuteDataFlow",
            "policy": {
                "timeout": "7.00:00:00",
                "retry": 0,
                "retryIntervalInSeconds": 30,
                "secureOutput": false,
                "secureInput": false
            },
            "typeProperties": {
                "dataflow": {
                    "referenceName": "dataflow1",
                    "type": "DataFlowReference",
                    "datasetParameters": {
                        "source1": {
                            "test": {
                                "value": "@pipeline().parameters.Test1",
                                "type": "Expression"
                            }
                        }
                    }
                }
            }
        }
    ],
    "parameters": {
        "Test1": {
            "type": "string"
        }
    }
}

}

答案 1 :(得分:0)

您的数据流参数必须为STRING类型,才能从管道中选择参数。如果要在数据流中使用日期或整数,可以始终将此字符串转换为数据流中的另一种数据类型。