如何从SQL表检索架构并在Azure Data Factory中强制匹配至对应表
解决方案
一、获取SQL数据库表的列名与数据类型
使用SQL系统视图查询,可一次性导出所有表的结构信息:
SELECT t.name AS table_name, c.name AS column_name, ty.name AS data_type, c.max_length, c.is_nullable FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id JOIN sys.types ty ON c.system_type_id = ty.system_type_id ORDER BY t.name, c.column_id;
若仅需单张表的结构,添加WHERE条件过滤:
WHERE t.name = '目标表名'
二、ADF中强制匹配SQL目标表架构的操作方法
方法1:复制活动手动配置列映射(单表场景)
- 打开ADF复制活动,切换至映射标签页
- 点击导入架构,选择从目标存储导入,直接加载SQL目标表的列结构
- 自动匹配同名列后,删除源表多出列的映射项;对数据类型不匹配的列,手动调整源列类型至目标表对应类型(如源
string转目标varchar、源int64转目标int) - 勾选映射页底部的跳过不匹配的列,确保仅复制目标表存在的列
方法2:数据流动实现列筛选与类型转换(多表/复杂场景)
- 创建ADF数据流动,添加源数据集(ADF数据源)和目标数据集(SQL目标表)
- 在源与目标间添加选择转换:
- 进入选择转换的映射页,点击导入目标架构,自动保留与目标表匹配的列,过滤源表多余列
- 若需类型转换,添加派生列转换,使用ADF内置函数处理:
- 字符串转指定长度字符类型:
toString(源列, 'UTF-8') - 数值类型转换:
toInteger(源列)或toDecimal(源列, 18, 2)
- 字符串转指定长度字符类型:
- 配置目标数据集的架构选项为使用目标架构,严格对齐目标表结构
方法3:元数据驱动批量处理(多张表场景)
通过Lookup+ForEach活动实现批量表的架构匹配:
- Lookup活动:执行前述SQL查询,获取所有目标表的名称及列结构
- ForEach活动:遍历Lookup返回的表列表,循环内执行复制活动:
- 动态设置源/目标数据集的表名:
@item().table_name - 使用动态内容生成列映射,仅保留目标表存在的列并处理类型转换,示例动态映射代码:
@json(concat('{', string(join(select(map(activity('Lookup').output.value, (item) => concat('"', item.column_name, '": {"source": {"name": "', item.column_name, '"}, "sink": {"name": "', item.column_name, '"}}')), ', ')), '}'))
- 动态设置源/目标数据集的表名:
内容的提问来源于stack exchange,提问作者Herwini
相关产品推荐
相关产品推荐

