Azure Data Factory数据流如何强制列名大小写不敏感?
下面分几种常用数据流工具给出具体解决办法:
Azure Data Factory (ADF) 数据流
映射时直接开启大小写不敏感匹配:在数据流的映射界面右上角点设置图标,勾选「Case-insensitive column matching」,系统就会自动忽略列名大小写差异,把THE_ID和The_Id当成同一列处理。
如果需要用表达式标准化,就用lower()函数把所有列名转成小写,比如在派生列或列映射里写:lower($$)统一列名后再做关联或合并。
Spark 数据流(Databricks/Spark SQL)
Spark默认大小写敏感,你可以直接改配置参数:spark.sql.caseSensitive false或者读取数据后手动统一列名大小写,比如用Scala代码:
df.selectExpr("*", "lower(THE_ID) as the_id").drop("THE_ID")合并数据集时,也可以用
lower(col("THE_ID")) === lower(col("The_Id"))作为关联条件,忽略大小写匹配。SSIS(SQL Server Integration Services)
在派生列或查找组件里,用LOWER()函数统一列名大小写再处理。比如查找组件的匹配条件设为LOWER(THE_ID) == LOWER(The_Id)。
另外也可以给数据源的数据库设置不区分大小写的排序规则,比如SQL_Latin1_General_CP1_CI_AS,从源头解决问题。通用方案
不管用什么工具,最稳妥的办法就是统一所有列名的大小写格式:要么全转小写,要么全转大写。读取数据源后先做一步列名标准化,把THE_ID和The_Id都改成the_id(或THE_ID),后续操作就不会因为大小写差异报错了。
内容的提问来源于stack exchange,提问作者Stephen

