环境
情景
我有ADF管道,它从On premise服务器读取数据并将数据写入azure数据湖。
同样 - 我在ADF *(数据集)*中提供了文件夹结构,如下所示
文件夹路径: - DBName / RawTables / Transactional
文件路径: - TableName.csv
问题
是否可以参数化文件夹名称或文件路径?基本上 - 如果明天 - 我想更改文件夹路径*(没有部署)*那么我们应该更新元数据或表结构。
答案 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"
}
]
}
]
}
}