diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java index f15755f..376e040 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java @@ -1852,7 +1852,7 @@ private int showCreateTable(Hive db, ShowCreateTableDesc showCreateTbl) throws H final String ROW_FORMAT = "row_format"; final String TBL_LOCATION = "tbl_location"; final String TBL_PROPERTIES = "tbl_properties"; - boolean isHbaseTable = false; + boolean needsLocation = true; StringBuilder createTab_str = new StringBuilder(); String tableName = showCreateTbl.getTableName(); @@ -1864,9 +1864,7 @@ private int showCreateTable(Hive db, ShowCreateTableDesc showCreateTbl) throws H FileSystem fs = resFile.getFileSystem(conf); outStream = fs.create(resFile); - if (tbl.getStorageHandler() != null) { - isHbaseTable = tbl.getStorageHandler().toString().equals("org.apache.hadoop.hive.hbase.HBaseStorageHandler"); - } + needsLocation = doesTableNeedLocation(tbl); if (tbl.isView()) { String createTab_stmt = "CREATE VIEW `" + tableName + "` AS " + tbl.getViewExpandedText(); @@ -1883,7 +1881,7 @@ private int showCreateTable(Hive db, ShowCreateTableDesc showCreateTbl) throws H createTab_str.append("<" + LIST_PARTITIONS + ">\n"); createTab_str.append("<" + SORT_BUCKET + ">\n"); createTab_str.append("<" + ROW_FORMAT + ">\n"); - if (!isHbaseTable) { + if (needsLocation) { createTab_str.append("LOCATION\n"); createTab_str.append("<" + TBL_LOCATION + ">\n"); } @@ -2065,7 +2063,7 @@ else if (sortCol.getOrder() == BaseSemanticAnalyzer.HIVE_COLUMN_ORDER_DESC) { createTab_stmt.add(SORT_BUCKET, tbl_sort_bucket); createTab_stmt.add(ROW_FORMAT, tbl_row_format); // Table location should not be printed with hbase backed tables - if (!isHbaseTable) { + if (needsLocation) { createTab_stmt.add(TBL_LOCATION, tbl_location); } createTab_stmt.add(TBL_PROPERTIES, tbl_properties); @@ -3933,7 +3931,7 @@ private int createTable(Hive db, CreateTableDesc crtTbl) throws HiveException { tbl.getTTable().getSd().setOutputFormat(tbl.getOutputFormatClass().getName()); } - if (!Utilities.isDefaultNameNode(conf) && tbl.getTTable().getSd().isSetLocation()) { + if (!Utilities.isDefaultNameNode(conf) && doesTableNeedLocation(tbl)) { // If location is specified - ensure that it is a full qualified name makeLocationQualified(tbl.getDbName(), tbl.getTTable().getSd(), tbl.getTableName()); } @@ -4341,4 +4339,15 @@ private void makeLocationQualified(Database database) throws HiveException { database.getName().toLowerCase() + ".db"))); } } + + private static boolean doesTableNeedLocation(Table tbl) { + // If we are ok with breaking compatibility of existing 3rd party StorageHandlers, + // this method could be moved to the HiveStorageHandler interface. + boolean retval = true; + if (tbl.getStorageHandler() != null) { + retval = !tbl.getStorageHandler().toString().equals( + "org.apache.hadoop.hive.hbase.HBaseStorageHandler"); + } + return retval; + } }