哪款Azure Function模板适合实现ADF自定义Lookup Activity
实现方案
第一步:选择合适的Azure Function模板
直接选择HTTP触发类型的Azure Function模板即可,不需要选择其他专用模板,该模板支持直接被Azure Data Factory调用并返回结构化数组数据,完全适配你的需求。你可以根据自己的技术栈选择.NET、Python、Node.js等任意运行时。
模板选择参考如下:
第二步:编写Azure Function逻辑
功能逻辑非常简单,只需要调用Cosmos DB SDK拉取指定数据库下的所有容器名,封装为数组返回即可,以下为C#语言的示例代码:
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Azure.Cosmos; using System.Collections.Generic; using System.Threading.Tasks; public static class GetCosmosContainersFunction { [FunctionName("GetCosmosContainers")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req) { // 从应用配置读取Cosmos DB连接字符串和数据库名 string cosmosConnString = Environment.GetEnvironmentVariable("CosmosDBConnectionString"); string databaseName = Environment.GetEnvironmentVariable("CosmosDBDatabaseName"); using CosmosClient client = new CosmosClient(cosmosConnString); Database database = await client.CreateDatabaseIfNotExistsAsync(databaseName); List<string> containerNames = new List<string>(); using var iterator = database.GetContainerQueryIterator<ContainerProperties>(); while (iterator.HasMoreResults) { foreach (var container in await iterator.ReadNextAsync()) { containerNames.Add(container.Id); } } // 返回容器名称数组,格式和Lookup Activity输出一致 return new OkObjectResult(containerNames); } }
第三步:对接ADF的ForEach Activity
- 在ADF中添加Azure Function Activity,配置调用你编写的上述HTTP触发Function
- 将Azure Function Activity的输出数组,直接填入ForEach Activity的
项目配置项 - 后续ForEach的循环逻辑可以直接读取每个遍历项作为容器名,和Lookup Activity的使用方式完全一致。
内容的提问来源于stack exchange,提问作者Yuzuki Ayase
相关产品推荐
相关产品推荐

