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

Azure Synapse创建视图报错‘Column mapping is not enabled’:原因与解决

Azure Synapse中使用OpenRowset访问Delta表报错“Column mapping is not enabled”的原因及解决办法

问题描述

在Azure Synapse中执行以下SQL语句创建视图时:

CREATE VIEW view_name
AS
SELECT * FROM 
openrowset(bulk '/some_path/delta_table_name',
                data_source = 'sample',
                format='delta') as a;

抛出错误:

Column mapping is not enabled.

该Delta表是通过Databricks使用以下代码创建的:

df.write.format('delta').mode('overwrite').save("abfss://containername@storagename.dfs.core.windows.net/sample/some_path/delta_table_name")

报错原因

Azure Synapse的OPENROWSET访问Delta Lake表时,要求Delta表必须启用**列映射(Column Mapping)**功能。而Databricks默认创建Delta表时并未开启该功能,导致Synapse无法正确解析Delta表的元数据结构,从而抛出此错误。

列映射是Delta Lake用于追踪列变更(如列重命名、删除)的机制,启用后可以保证不同工具访问Delta表时列的一致性。

解决办法

方法1:重新创建Delta表时启用列映射

在Databricks中写入Delta表时,添加delta.columnMapping.mode参数并设置为name:

df.write.format('delta')
  .option('delta.columnMapping.mode', 'name')
  .mode('overwrite')
  .save("abfss://containername@storagename.dfs.core.windows.net/sample/some_path/delta_table_name")

方法2:对已存在的Delta表启用列映射

如果Delta表已经存在且有数据,可在Databricks中执行以下SQL操作开启列映射:

  1. 设置表属性启用列映射:
ALTER TABLE delta.`abfss://containername@storagename.dfs.core.windows.net/sample/some_path/delta_table_name` 
SET TBLPROPERTIES (delta.columnMapping.mode = 'name')
  1. 执行OPTIMIZE命令重写数据,应用列映射配置:
OPTIMIZE delta.`abfss://containername@storagename.dfs.core.windows.net/sample/some_path/delta_table_name`

完成上述操作后,回到Azure Synapse重新执行原来的CREATE VIEW语句即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:33:10