Azure数据工厂:参数化文件夹和文件路径

时间:2017-05-22 13:20:06

标签: azure-data-factory u-sql

环境

  • Azure数据工厂

情景

  • 我有ADF管道,它从On premise服务器读取数据并将数据写入azure数据湖。

  • 同样 - 我在ADF *(数据集)*中提供了文件夹结构,如下所示

    文件夹路径: - DBName / RawTables / Transactional

    文件路径: - TableName.csv

问题

是否可以参数化文件夹名称或文件路径?基本上 - 如果明天 - 我想更改文件夹路径*(没有部署)*那么我们应该更新元数据或表结构。

3 个答案:

答案 0 :(得分:1)

所以这里简短的答案是没有。单独使用ADF,您将无法实现这种动态灵活性。

您需要将新定义的数据集添加到管道中作为文件夹更改的输入。在Data Lake中,您可能会使用单个存储过程来接收文件路径的参数,该参数可以重复使用。但是这仍然需要在调用proc时调整ADF JSON。

当然,这里的所有情况都是使用ADF自定义活动并使用方法编写C#类来执行您需要的任何操作。可能有点过分,并且需要付出很多努力来为数据湖商店设置身份验证。

希望这能为你提供一个转向。

答案 1 :(得分:0)

Mangesh,为什么不尝试在ADF中使用.Net自定义活动。此自定义活动将是您可能检查已处理文件夹的第一个活动,如果处理过的文件夹存在,则会将其移至History(say)文件夹。因为,ADF是一个数据移动和数据转换的平台,它不会处理IO活动。您可以在以下位置了解有关.Net自定义活动的更多信息:

https://docs.microsoft.com/en-us/azure/data-factory/data-factory-use-custom-activities

答案 2 :(得分:0)

使用Azure Data Factory V2中的新Lookup活动可以实现您的目标。文档在这里:Lookup Activity

JSON示例将是这样的:

{
    "name": "LookupPipelineDemo",
    "properties": {
        "activities": [
            {
                "name": "LookupActivity",
                "type": "Lookup",
                "typeProperties": {
                    "dataset": { 
                        "referenceName": "LookupDataset", 
                        "type": "DatasetReference" 
                    }
                }
            },
            {
                "name": "CopyActivity",
                "type": "Copy",
                "typeProperties": {
                    "source": { 
                        "type": "SqlSource", 
                        "sqlReaderQuery": "select * from @{activity('LookupActivity').output.tableName}" 
                    },
                    "sink": { 
                        "type": "BlobSink" 
                    }
                },                
                "dependsOn": [ 
                    { 
                        "activity": "LookupActivity", 
                        "dependencyConditions": [ "Succeeded" ] 
                    }
                 ],
                "inputs": [ 
                    { 
                        "referenceName": "SourceDataset", 
                        "type": "DatasetReference" 
                    } 
                ],
                "outputs": [ 
                    { 
                        "referenceName": "SinkDataset", 
                        "type": "DatasetReference" 
                    } 
                ]
            }
        ]
    }
}