FAQ-离线开发建hive外表报错hdfs目录非空

问题描述/异常栈
在离线开发执行建立hive外表报错,每次执行建表语句均需手动清空hdfs路径:
Caused by: org.apache.spark.sql.AnalysisException: CREATE-TABLE-AS-SELECT cannot create table with location to a non-empty directory /user/bigdata_ip_patent_dev/hive_db/bigdata_ip_patent.db/patent_for_algo_ipc .
发现版本
所有版本
解决方案
1、方案1
建表语句执行前,添加下列前置sql:
ALTER TABLE bigdata_ip_patent.patent_for_algo_ipc SET TBLPROPERTIES ('external.table.purge'='true'); FAQ-离线开发建hive外表报错hdfs目录非空 - 图1
但此方案需注意,ALTER TABLE时需保证表一定要存在,否则也会报错(尤其任务调度运行时)

2、方案2
在节点运行设置/其他设置内添加参数:
conf.spark.sql.legacy.allowNonEmptyLocationInCTAS=true

FAQ-离线开发建hive外表报错hdfs目录非空 - 图2

该参数含义:建表时允许hdfs目录非空
问题原因
删除hive外表默认不会删除hdfs上的数据,因此只能:(需结合业务实际场景选择)
1、设置参数指定删除外表时一同删除hdfs数据
2、或者设置参数指定建表时允许hdfs目录非空

作者:曹俊