Spark3执行Hive表写入命令后所有表消失,求助排查原因
问题分析与解答
结论:是的,这个命令会导致数据库所有表被删除
你执行的这条Spark写入命令,直接导致了数据库内所有表消失,问题出在两个关键点的错误组合:
错误的
path参数设置
你把path指定成了path_to_the_db/hive/——这是整个Hive数据库(或仓库)的根目录,而不是result_data表专属的子路径。overwrite模式的破坏性
在overwrite模式下,Spark会先彻底清空你指定的path路径下的所有内容,再写入新表的数据。因为你指向了数据库根目录,它就会删除该目录下所有已存在的表数据、元数据关联文件,最终让数据库里的所有表都消失。
针对最初报错的正确处理方式
你最初遇到的报错:
Can not create the managed table('result_data').
The associated location('dbfs:/user/hive/warehouse/result_data') already exists.
是因为result_data表的默认存储路径已经存在,正确的解决方法有两种:
- 不需要保留原路径内容的话,直接用
overwrite模式创建表,不用指定path(用默认路径即可):df.write.mode("overwrite").saveAsTable("result_data") - 需要自定义存储路径的话,必须指定单个表的专属子路径,比如:
df.write.option("path", "path_to_the_db/hive/result_data/").mode("overwrite").saveAsTable("result_data")
内容的提问来源于stack exchange,提问作者Anita
相关产品推荐
相关产品推荐

