Azure DataFlow中byName()与byNames()的用法及适用场景咨询
一、byName() 函数
核心功能
按指定列名动态获取单列的值,解决单列动态引用的需求,不用硬编码列名。
语法
byName(columnName: string)
实用示例
基于参数动态提取列值
假设数据流里有sales_2022、sales_2023这类按年份命名的列,定义参数targetYear = '2023'后,在派生列中写:byName(concat('sales_', $targetYear))
就能自动匹配并获取sales_2023的列值,后续改年份参数即可切换目标列,不用修改表达式。适配不固定列结构的数据源
如果上游数据源列的顺序经常变,但你需要的列名是固定的(比如customer_id),直接用:byName('customer_id')
不管列在数据集的哪个位置,只要存在这个列名就能拿到对应值,避免因列位置变化导致的报错。
注意事项
如果指定的列名不存在,函数返回null,可以配合isNull()做默认值处理:isNull(byName('optional_column'), '默认值')
二、byNames() 函数
核心功能
通过通配符匹配批量获取符合规则的列集合,用于多列批量处理场景,省去逐个列名编写的麻烦。
语法
byNames(pattern: string)
支持的通配符:
*:匹配任意长度的任意字符?:匹配单个任意字符
实用示例
批量聚合多列
假设有sales_jan、sales_feb、sales_mar等月度销售列,要计算所有月度销售的总和,直接写:sum(byNames('sales_*'))
自动匹配所有以sales_开头的列并求和。批量转换列类型
如果所有以amount_开头的列都是字符串类型,需要转成整数,在派生列中写:toInteger(byNames('amount_*'))
会批量处理所有符合规则的列,不用逐个列写转换表达式。批量筛选列
在选择变换中,要保留所有以customer_开头的列和order_id列,表达式可以写:byNames('customer_*') + order_id
快速组合出需要的数据集结构。
注意事项
byNames()返回的是列集合,不能直接作为单个值使用,必须配合支持集合操作的函数(如sum、avg)或者在选择/派生变换中批量处理。
内容的提问来源于stack exchange,提问作者AzSurya Teja

