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

Databricks Runtime 9.1 LTS升14.3 LTS:类型转换错误处理咨询

Databricks Runtime 9.1 LTS 升级至14.3 LTS 问题解答

升级背景与遇到的错误

我们正将Databricks Runtime从9.1 LTS升级至14.3 LTS(9.1将于今年9月退役),但在库中遇到两类错误:

  • [CAST_INVALID_INPUT] 类型为STRING的'01/01/1900'无法转为TIMESTAMP,通过在集群配置中设置spark.sql.storeAssignmentPolicy为legacy解决,设置spark.sql.ansi.enabled为false无效(其默认值即为false);
  • [DATATYPE_MISMATCH.BINARY_OP_DIFF_TYPES] 无法解析(coalesce(EndDate, '2078/06/01') + INTERVAL '1' YEAR),因STRING与INTERVAL YEAR类型不兼容,修改配置后仍未解决。

问题解答

1. spark.sql.storeAssignmentPolicy设为legacy是否适合长期生产使用?Databricks会移除该配置支持吗?

  • 短期用legacy配置可快速适配旧代码,但不建议长期依赖。Databricks长期趋势是向ANSI SQL兼容靠拢,legacy模式是平滑过渡的兼容选项,未来版本大概率会逐步缩减支持甚至移除。如果有50-60个库需要调整,建议制定分批迁移计划,逐步将代码修改为符合新版Runtime的类型转换逻辑,比如显式指定日期格式转换:to_timestamp('01/01/1900', 'MM/dd/yyyy'),避免后续升级再遇兼容问题。

2. 是否有其他配置可修复第二个错误?

  • 这类类型不兼容问题靠配置解决的可能性极低。高版本Databricks Runtime严格限制了字符串与INTERVAL的隐式转换,这是遵循SQL规范的要求。必须修改代码,显式将字符串转为日期/时间戳类型后再进行INTERVAL运算,示例修改如下:
    coalesce(to_date(EndDate, 'yyyy/MM/dd'), to_date('2078/06/01', 'yyyy/MM/dd')) + INTERVAL '1' YEAR
    
    可根据实际日期格式调整to_date的格式参数。

3. 如何为全用途集群全局设置spark.sql.storeAssignmentPolicy为legacy?

  • 有两种全局配置方式:
    • 集群层面配置:在集群创建/编辑页面的「高级选项」→「Spark」→「Spark配置」中,添加一行配置:spark.sql.storeAssignmentPolicy legacy,保存后启动集群即可生效;
    • 工作区全局配置:若要对所有全用途集群生效,可在Databricks工作区的「管理控制台」→「工作区设置」→「Spark配置」中添加上述配置项,新创建的全用途集群会自动继承,已存在的集群需重启后生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:01:02