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

如何使Azure Synapse数据库与表名保留原大小写不自动转小写

原因说明

该行为是Spark引擎的默认逻辑,并非Synapse独有问题:Spark SQL默认对未加引用的SQL标识符(库名、表名、列名)做大小写不敏感处理,存入元数据库时会统一转换为小写,因此Synapse Studio读取元数据时展示的库、表名为全小写。建库语句中LOCATION后指定的路径是字符串字面量,不会触发大小写转换,因此ADLS中库级文件夹保留了你写的Database1格式;而表级路径是Spark根据元数据中存储的小写表名自动生成,因此显示为table1。

可行配置方案
  • 方案1:开启Spark大小写敏感全局配置
    在执行建库建表语句前,先在笔记本中执行如下配置,也可以直接将该参数配置到对应Spark池的默认会话参数中,对所有提交到该池的任务生效:
    spark.conf.set("spark.sql.caseSensitive", "true")
    
    配置生效后新创建的库、表、列都会保留代码中书写的原始大小写,不会自动转小写。注意该配置为全局生效,配置开启后后续所有SQL查询都必须严格匹配对象名的大小写,否则会报对象不存在错误;该配置不会修改已经创建完成的存量库表的元数据。
  • 方案2:使用反引号包裹标识符(无全局影响,推荐)
    不需要修改全局Spark配置,只需要在建表、建库的SQL语句中,用反引号包裹需要保留大小写的标识符即可,Spark会将反引号包裹的内容识别为精确标识符,完全保留输入的大小写格式。示例SQL如下:
    %%sql
    CREATE DATABASE IF NOT EXISTS `Database1` LOCATION '/Database1';
    CREATE TABLE IF NOT EXISTS `Database1`.`Table1`(`Column1` int) USING CSV OPTIONS (header=true);
    
    该方式仅对被反引号包裹的对象生效,不会影响其他任务的大小写匹配逻辑,后续查询、操作这些对象时,也需要用反引号包裹对应名称才能正常命中。
注意事项
  • 以上两种方式生效后,Spark自动生成的表级存储路径也会保留指定的原始大小写,不会自动转为小写。
  • 禁止直接修改ADLS中已生成的文件夹名来调整大小写,会导致元数据记录与实际存储路径不匹配,触发查询报错。
  • 如果需要用Synapse Serverless SQL池查询保留大小写的Spark表,查询时同样需要用引号包裹对应大小写的对象名,否则可能出现匹配不到对象的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:12:56