diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java index 171f944..6c2ce88 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hive.ql.metadata; +import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; @@ -27,6 +28,7 @@ import java.util.Map; import java.util.Properties; +import com.google.common.base.Preconditions; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; @@ -944,6 +946,16 @@ public static String getCompleteName(String dbName, String tabName) { } } + public boolean isEmpty() throws HiveException { + Preconditions.checkNotNull(getPath()); + try { + FileSystem fs = FileSystem.get(getPath().toUri(), SessionState.getSessionConf()); + return !fs.exists(getPath()) || fs.listStatus(getPath(), FileUtils.HIDDEN_FILES_PATH_FILTER).length == 0; + } catch (IOException e) { + throw new HiveException(e); + } + } + public boolean isTemporary() { return tTable.isTemporary(); } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java index 4f614a8..cea7189 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/CreateTableDesc.java @@ -834,7 +834,8 @@ public Table toTable(HiveConf conf) throws HiveException { } } } - if (getLocation() == null && !this.isCTAS) { + + if (!isExternal() && !this.isCTAS && (tbl.getPath() == null || tbl.isEmpty())) { if (!tbl.isPartitioned() && conf.getBoolVar(HiveConf.ConfVars.HIVESTATSAUTOGATHER)) { StatsSetupConst.setBasicStatsStateForCreateTable(tbl.getTTable().getParameters(), StatsSetupConst.TRUE);