Spark SQL查询Databricks Delta表全局字符串不区分大小写设置问询
Spark SQL Databricks Delta表全局字符串比较不区分大小写配置方案
全局生效配置(适用Databricks Runtime 11.3及以上版本)
Databricks从11.3运行时版本开始支持字符串排序规则(Collation)能力,可通过全局配置默认排序规则实现所有字符串比较默认不区分大小写,不需要在WHERE子句额外做大小写转换:
会话级配置(仅当前交互式会话/作业生效)
直接在SQL中执行配置语句:
SET spark.sql.defaultCollation = 'UTF8_BIN_CI';
集群级配置(集群下所有作业/会话全局生效)
在集群的Spark配置项中添加如下参数,重启集群后生效:
spark.sql.defaultCollation UTF8_BIN_CI
表级/列级单独配置
如果不需要全局生效,仅需要针对特定Delta表实现字符串比较不区分大小写,可以在建表或者修改表结构时指定排序规则:
建表时指定全表默认规则
建表时通过表属性设置所有字符串列默认使用不区分大小写的排序规则:
CREATE TABLE <表名> ( id INT, somefield STRING, -- 其他字段 ) TBLPROPERTIES ( 'delta.defaultColumnCollation' = 'UTF8_BIN_CI' );
单独修改已有列的排序规则
针对已存在的表的指定列修改比较规则:
ALTER TABLE <表名> ALTER COLUMN somefield STRING COLLATE UTF8_BIN_CI;
效果验证
以上配置生效后,你提到的两条过滤语句会返回完全一致的结果:
WHERE somefield = 'blah blah'WHERE somefield = "Blah Blah"
注意事项
spark.sql.caseSensitive参数仅用于控制SQL标识符(表名、列名、别名等)的大小写敏感性,不会影响字符串值的比较逻辑,请勿和本需求的配置混淆。
内容的提问来源于stack exchange,提问作者Kirk Quinbar
相关产品推荐
相关产品推荐

