Azure Databricks字符串转Timestamp报错:多余输入'timestamp'
解决Spark SQL修改列类型的ParseException及日期转换问题
错误原因
你使用的ALTER TABLE语法不符合Spark SQL规范。Spark SQL中修改列类型需要使用ALTER COLUMN <列名> TYPE <新类型>的格式,而非直接指定类型,这是导致ParseException的直接原因。
此外,你的日期字符串格式(M/d/yyyy h:mm:ss a)与Spark默认的timestamp格式(yyyy-MM-dd HH:mm:ss)不匹配,即使语法正确,直接修改类型也会触发解析失败。
解决方案
分三步完成列类型转换:
添加临时timestamp列并转换数据
使用to_timestamp函数指定日期格式,将原字符串列转换为timestamp类型存入临时列:ALTER TABLE convertToTimeStamp ADD COLUMN FinalDate_temp TIMESTAMP; UPDATE convertToTimeStamp SET FinalDate_temp = to_timestamp(FinalDate, 'M/d/yyyy h:mm:ss a');删除原字符串列
ALTER TABLE convertToTimeStamp DROP COLUMN FinalDate;重命名临时列为原列名
ALTER TABLE convertToTimeStamp RENAME COLUMN FinalDate_temp TO FinalDate;
验证结果
执行完上述步骤后,可通过以下语句验证列类型和数据:
DESCRIBE convertToTimeStamp; SELECT FinalDate FROM convertToTimeStamp LIMIT 3;
内容的提问来源于stack exchange,提问作者python learner
相关产品推荐
相关产品推荐

