You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Data Factory中使用类SSIS的Script组件进行数据转换?

在Azure Data Factory中实现类似SSIS Script组件的C#数据转换

针对你需要用C#转换SQL源数据再加载到目标存储的需求,ADF提供了几种替代SSIS Script组件的方案,按复杂度分以下三类:

1. 映射数据流脚本转换(轻量字段级转换)

适合简单的字段处理(如格式转换、字符串拼接、条件判断),直接在ADF映射数据流中嵌入C#风格脚本:

  • 操作步骤:
    • 创建映射数据流,连接SQL数据库作为源数据集。
    • 拖拽脚本转换(Script Transformation)组件到数据流画布,关联源输出。
    • 在脚本编辑器中,选择输入列,编写C#转换逻辑:
      // 示例1:将姓名字段转为大写并添加前缀
      output.FullName = "EMP_" + input.LastName.ToUpper() + ", " + input.FirstName.ToUpper();
      // 示例2:处理空值的日期转换
      output.ProcessedDate = input.BirthDate != null ? DateTime.Parse(input.BirthDate.ToString()).ToString("yyyy-MM-dd") : null;
      
    • 配置输出列,将转换后的字段映射到目标数据集。

注意:此环境支持基础C#语法,但无法引用外部NuGet包,仅适用于轻量逻辑。

2. Azure Function活动(复杂C#逻辑)

如果需要调用外部API、使用第三方库或执行复杂业务计算,推荐用Azure Function配合ADF活动:

  • 操作步骤:
    1. 创建HTTP触发的Azure Function(C#),编写转换逻辑:
    [FunctionName("TransformSqlRecords")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        // 读取传入的SQL源数据
        var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        var sourceRecords = JsonConvert.DeserializeObject<List<SqlSourceRecord>>(requestBody);
        
        // 自定义转换逻辑
        var transformedRecords = sourceRecords.Select(r => new TargetRecord
        {
            RecordId = r.Id,
            FullName = $"{r.FirstName} {r.LastName}".Trim().ToUpper(),
            CalculatedValue = r.Salary * 1.1,
            ProcessedTimestamp = DateTime.UtcNow
        }).ToList();
        
        return new OkObjectResult(transformedRecords);
    }
    
    // 定义数据实体类
    public class SqlSourceRecord { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public decimal Salary { get; set; } }
    public class TargetRecord { public int RecordId { get; set; } public string FullName { get; set; } public decimal CalculatedValue { get; set; } public DateTime ProcessedTimestamp { get; set; } }
    
    1. 在ADF管道中:
      • 用Lookup活动读取SQL源数据(小数据量),或用复制活动将SQL数据暂存到Blob(大数据量)。
      • 添加Azure Function活动,配置Function的URL和访问密钥,将源数据作为请求体传入。
      • 用复制活动将Function返回的转换后数据写入目标存储。

3. 自定义活动(本地/私有环境代码)

如果你的C#代码需要访问本地资源或私有网络服务,可使用ADF自定义活动:

  • 操作步骤:
    • 编写C#控制台应用,实现从SQL读取、转换、写入目标存储的完整逻辑。
    • 将程序打包为ZIP文件,上传到Azure Blob存储。
    • 在ADF中创建自定义活动,配置Azure Batch账户或自托管集成运行时,指定ZIP文件路径和执行命令(如dotnet YourTransformApp.dll)。
    • 运行管道执行转换。

内容的提问来源于stack exchange,提问作者DataEngineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:35:31