You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by zs...@apache.org on 2008/12/13 04:05:08 UTC
svn commit: r726161 - in /hadoop/hive/trunk: CHANGES.txt
metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
Author: zshao
Date: Fri Dec 12 19:05:06 2008
New Revision: 726161
URL: http://svn.apache.org/viewvc?rev=726161&view=rev
Log:
HIVE-114. Drop partition does not delete data for external tables now.
(Johan Oskarsson via zshao)
Modified:
hadoop/hive/trunk/CHANGES.txt
hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
hadoop/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=726161&r1=726160&r2=726161&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Fri Dec 12 19:05:06 2008
@@ -36,6 +36,9 @@
BUG FIXES
+ HIVE-114. Drop partition does not delete data for external tables now.
+ (Johan Oskarsson via zshao)
+
HIVE-144. Hive/ql java source copied to build/ql/java to make it work
with eclipse. (Johan Oskarsson via zshao)
Modified: hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java?rev=726161&r1=726160&r2=726161&view=diff
==============================================================================
--- hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java (original)
+++ hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java Fri Dec 12 19:05:06 2008
@@ -340,6 +340,11 @@
}
}
+ /**
+ * Is this an external table?
+ * @param table Check if this table is external.
+ * @return True if the table is external, otherwise false.
+ */
private boolean isExternal(Table table) {
if(table == null) {
return false;
@@ -480,6 +485,7 @@
LOG.info("Partition values:" + part_vals);
boolean success = false;
Path partPath = null;
+ Table tbl = null;
try {
getMS().openTransaction();
Partition part = this.get_partition(db_name, tbl_name, part_vals);
@@ -494,12 +500,15 @@
}
success = getMS().commitTransaction();
partPath = new Path(part.getSd().getLocation());
+ tbl = get_table(db_name, tbl_name);
} finally {
if(!success) {
getMS().rollbackTransaction();
} else if(deleteData && (partPath != null)) {
- wh.deleteDir(partPath, true);
- // ok even if the data is not deleted
+ if(tbl != null && !isExternal(tbl)) {
+ wh.deleteDir(partPath, true);
+ // ok even if the data is not deleted
+ }
}
}
return true;
Modified: hadoop/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java?rev=726161&r1=726160&r2=726161&view=diff
==============================================================================
--- hadoop/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java (original)
+++ hadoop/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java Fri Dec 12 19:05:06 2008
@@ -125,6 +125,7 @@
part.setParameters(new HashMap<String, String>());
part.setSd(tbl.getSd());
part.getSd().setSerdeInfo(tbl.getSd().getSerdeInfo());
+ part.getSd().setLocation(tbl.getSd().getLocation() + "/part1");
Partition retp = client.add_partition(part);
assertNotNull("Unable to create partition " + part, retp);
@@ -132,8 +133,13 @@
Partition part2 = client.getPartition(dbName, tblName, part.getValues());
assertTrue("Partitions are not same",part.equals(part2));
+ FileSystem fs = FileSystem.get(this.hiveConf);
+ Path partPath = new Path(part2.getSd().getLocation());
+
+ assertTrue(fs.exists(partPath));
ret = client.dropPartition(dbName, tblName, part.getValues(), true);
assertTrue(ret);
+ assertFalse(fs.exists(partPath));
// add the partition again so that drop table with a partition can be tested
retp = client.add_partition(part);
@@ -143,7 +149,17 @@
ret = client.dropType(typeName);
assertTrue("Unable to drop type " + typeName, ret);
-
+
+ //recreate table as external, drop partition and it should
+ //still exist
+ tbl.setParameters(new HashMap<String, String>());
+ tbl.getParameters().put("EXTERNAL", "TRUE");
+ client.createTable(tbl);
+ retp = client.add_partition(part);
+ assertTrue(fs.exists(partPath));
+ client.dropPartition(dbName, tblName, part.getValues(), true);
+ assertTrue(fs.exists(partPath));
+
ret = client.dropDatabase(dbName);
assertTrue("Unable to create the databse " + dbName, ret);
} catch (Exception e) {