Databricks执行CREATE OR REPLACE TABLE报DELTA_CREATE_TABLE_WITH_NON_EMPTY_LOCATION错误
解决Databricks中CREATE OR REPLACE TABLE报错的方法
问题原因
报错[DELTA_CREATE_TABLE_WITH_NON_EMPTY_LOCATION]的核心原因是:你要创建的表spark_catalog.foo.bar对应的存储路径dbfs:/user/hive/warehouse/foo/bar已经存在非Delta格式的文件/数据,而Databricks默认使用Delta格式创建表,CREATE OR REPLACE TABLE只能替换同格式的Delta表或在空路径上创建表,无法直接覆盖非Delta格式的已有路径内容。
具体解决办法
方法1:清理已有路径的非Delta数据
先通过Databricks文件系统工具删除目标路径下的所有内容,再重新执行建表语句:
- 执行递归删除命令清空路径:
dbutils.fs.rm("dbfs:/user/hive/warehouse/foo/bar", recurse=True) - 重新运行建表SQL:
CREATE OR REPLACE TABLE foo.bar ( comment VARCHAR(255), row_count INT, date TIMESTAMP )
方法2:指定新的空路径创建表
如果不想清理原有路径的数据,可以在建表语句中通过LOCATION指定一个全新的空路径:
CREATE OR REPLACE TABLE foo.bar ( comment VARCHAR(255), row_count INT, date TIMESTAMP ) LOCATION 'dbfs:/user/hive/warehouse/foo/bar_new'
方法3:将原有数据转换为Delta格式(如需保留数据)
如果路径下的原有数据需要保留,先将其转换为Delta格式,再执行替换操作:
- 根据原有数据格式转换为Delta表(以Parquet为例):
CONVERT TO DELTA parquet.`dbfs:/user/hive/warehouse/foo/bar` - 再执行
CREATE OR REPLACE TABLE语句替换表结构或数据
内容的提问来源于stack exchange,提问作者Joe Zalewski
相关产品推荐
相关产品推荐

