Databricks SQL中执行ALTER TABLE设置字段默认值时出现ParseException错误的解决方法
问题:Databricks SQL设置字段默认值触发ParseException错误
我在Databricks SQL环境中执行以下SQL语句创建表并设置字段默认值:
CREATE TABLE dbo_urban( T_Date date , Latest_User_Id varchar (100)); ALTER TABLE dbo_urban ALTER Latest_User_Id SET DEFAULT "";
当前该表无任何数据,但执行时触发了ParseException错误,错误信息如下:
Error in SQL statement: ParseException: mismatched input 'DEFAULT' expecting NOT(line 1, pos 70) == SQL == ALTER TABLE dbo_trn_billwise_itemwise_urban ALTER Latest_User_Id SET DEFAULT, "" ----------------------------------------------------------------------^^^
请问该如何修复此错误?
回答
这个错误是因为你用的是类似SQL Server的语法,但Databricks SQL基于Spark SQL,它的列默认值设置语法有差异,再加上语句里的小语法错误导致的。下面是具体的修复方案:
方案1:创建表时直接指定默认值(推荐)
最简洁高效的方式是在CREATE TABLE阶段就定义好默认值,这样不需要后续的ALTER操作:
CREATE TABLE dbo_urban( T_Date date, Latest_User_Id varchar(100) DEFAULT '' );
方案2:对已存在的表修改默认值
如果表已经创建完成,需要用Spark SQL兼容的ALTER TABLE语法,注意两个关键点:
- 必须使用
ALTER COLUMN关键字(你之前写的ALTER Latest_User_Id缺少了COLUMN) SET DEFAULT后面直接跟默认值,不要加多余的逗号
正确的语句如下:
ALTER TABLE dbo_urban ALTER COLUMN Latest_User_Id SET DEFAULT '';
错误原因解析
从报错信息里可以看到你的执行语句变成了SET DEFAULT, "",多了一个不必要的逗号,这是语法错误;另外Databricks SQL不支持ALTER [列名]这种写法,必须明确写ALTER COLUMN [列名]来指定要修改的列。
内容的提问来源于stack exchange,提问作者Aakarsh Raj
相关产品推荐
相关产品推荐

