You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/11/21 16:42:35 UTC
svn commit: r1640943 - in /hive/trunk:
common/src/java/org/apache/hive/common/util/
metastore/src/java/org/apache/hadoop/hive/metastore/
ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/
Author: hashutosh
Date: Fri Nov 21 15:42:35 2014
New Revision: 1640943
URL: http://svn.apache.org/r1640943
Log:
HIVE-8863 : Cannot drop table with uppercase name after compute statistics for columns (Chaoyu Tang via Ashutosh Chauhan)
Added:
hive/trunk/ql/src/test/queries/clientpositive/drop_partition_with_stats.q
hive/trunk/ql/src/test/queries/clientpositive/drop_table_with_stats.q
hive/trunk/ql/src/test/results/clientpositive/drop_partition_with_stats.q.out
hive/trunk/ql/src/test/results/clientpositive/drop_table_with_stats.q.out
Modified:
hive/trunk/common/src/java/org/apache/hive/common/util/HiveStringUtils.java
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
Modified: hive/trunk/common/src/java/org/apache/hive/common/util/HiveStringUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hive/common/util/HiveStringUtils.java?rev=1640943&r1=1640942&r2=1640943&view=diff
==============================================================================
--- hive/trunk/common/src/java/org/apache/hive/common/util/HiveStringUtils.java (original)
+++ hive/trunk/common/src/java/org/apache/hive/common/util/HiveStringUtils.java Fri Nov 21 15:42:35 2014
@@ -882,4 +882,8 @@ public class HiveStringUtils {
}
return len;
}
+
+ public static String normalizeIdentifier(String identifier) {
+ return identifier.trim().toLowerCase();
+ }
}
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java?rev=1640943&r1=1640942&r2=1640943&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java Fri Nov 21 15:42:35 2014
@@ -137,6 +137,7 @@ import org.apache.hadoop.hive.serde2.typ
import org.apache.hadoop.hive.shims.ShimLoader;
import org.apache.hadoop.hive.metastore.partition.spec.PartitionSpecProxy;
import org.apache.hadoop.util.StringUtils;
+import org.apache.hive.common.util.HiveStringUtils;
import org.apache.thrift.TException;
import org.datanucleus.store.rdbms.exceptions.MissingTableException;
@@ -506,7 +507,7 @@ public class ObjectStore implements RawS
boolean commited = false;
try {
openTransaction();
- name = name.toLowerCase().trim();
+ name = HiveStringUtils.normalizeIdentifier(name);
Query query = pm.newQuery(MDatabase.class, "name == dbname");
query.declareParameters("java.lang.String dbname");
query.setUnique(true);
@@ -618,7 +619,7 @@ public class ObjectStore implements RawS
public boolean dropDatabase(String dbname) throws NoSuchObjectException, MetaException {
boolean success = false;
LOG.info("Dropping database " + dbname + " along with all tables");
- dbname = dbname.toLowerCase();
+ dbname = HiveStringUtils.normalizeIdentifier(dbname);
try {
openTransaction();
@@ -915,7 +916,7 @@ public class ObjectStore implements RawS
List<String> tbls = null;
try {
openTransaction();
- dbName = dbName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
// Take the pattern and split it on the | to get all the composing
// patterns
String[] subpatterns = pattern.trim().split("\\|");
@@ -961,8 +962,8 @@ public class ObjectStore implements RawS
boolean commited = false;
try {
openTransaction();
- db = db.toLowerCase().trim();
- table = table.toLowerCase().trim();
+ db = HiveStringUtils.normalizeIdentifier(db);
+ table = HiveStringUtils.normalizeIdentifier(table);
Query query = pm.newQuery(MTable.class, "tableName == table && database.name == db");
query.declareParameters("java.lang.String table, java.lang.String db");
query.setUnique(true);
@@ -985,7 +986,7 @@ public class ObjectStore implements RawS
try {
openTransaction();
- db = db.toLowerCase().trim();
+ db = HiveStringUtils.normalizeIdentifier(db);
Query dbExistsQuery = pm.newQuery(MDatabase.class, "name == db");
dbExistsQuery.declareParameters("java.lang.String db");
dbExistsQuery.setUnique(true);
@@ -997,7 +998,7 @@ public class ObjectStore implements RawS
List<String> lowered_tbl_names = new ArrayList<String>();
for (String t : tbl_names) {
- lowered_tbl_names.add(t.toLowerCase().trim());
+ lowered_tbl_names.add(HiveStringUtils.normalizeIdentifier(t));
}
Query query = pm.newQuery(MTable.class);
query.setFilter("database.name == db && tbl_names.contains(tableName)");
@@ -1077,7 +1078,7 @@ public class ObjectStore implements RawS
}
// A new table is always created with a new column descriptor
- return new MTable(tbl.getTableName().toLowerCase(), mdb,
+ return new MTable(HiveStringUtils.normalizeIdentifier(tbl.getTableName()), mdb,
convertToMStorageDescriptor(tbl.getSd()), tbl.getOwner(), tbl
.getCreateTime(), tbl.getLastAccessTime(), tbl.getRetention(),
convertToMFieldSchemas(tbl.getPartitionKeys()), tbl.getParameters(),
@@ -1090,7 +1091,7 @@ public class ObjectStore implements RawS
if (keys != null) {
mkeys = new ArrayList<MFieldSchema>(keys.size());
for (FieldSchema part : keys) {
- mkeys.add(new MFieldSchema(part.getName().toLowerCase(),
+ mkeys.add(new MFieldSchema(HiveStringUtils.normalizeIdentifier(part.getName()),
part.getType(), part.getComment()));
}
}
@@ -1114,7 +1115,7 @@ public class ObjectStore implements RawS
if (keys != null) {
mkeys = new ArrayList<MOrder>(keys.size());
for (Order part : keys) {
- mkeys.add(new MOrder(part.getCol().toLowerCase(), part.getOrder()));
+ mkeys.add(new MOrder(HiveStringUtils.normalizeIdentifier(part.getCol()), part.getOrder()));
}
}
return mkeys;
@@ -1489,8 +1490,8 @@ public class ObjectStore implements RawS
boolean commited = false;
try {
openTransaction();
- dbName = dbName.toLowerCase().trim();
- tableName = tableName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
MTable mtbl = getMTable(dbName, tableName);
if (mtbl == null) {
commited = commitTransaction();
@@ -1823,8 +1824,8 @@ public class ObjectStore implements RawS
private List<String> getPartitionNamesNoTxn(String dbName, String tableName, short max) {
List<String> pns = new ArrayList<String>();
- dbName = dbName.toLowerCase().trim();
- tableName = tableName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
Query q = pm.newQuery(
"select partitionName from org.apache.hadoop.hive.metastore.model.MPartition "
+ "where table.database.name == t1 && table.tableName == t2 "
@@ -1860,8 +1861,8 @@ public class ObjectStore implements RawS
private Collection getPartitionPsQueryResults(String dbName, String tableName,
List<String> part_vals, short max_parts, String resultsCol)
throws MetaException, NoSuchObjectException {
- dbName = dbName.toLowerCase().trim();
- tableName = tableName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
Table table = getTable(dbName, tableName);
if (table == null) {
@@ -1970,8 +1971,8 @@ public class ObjectStore implements RawS
try {
openTransaction();
LOG.debug("Executing listMPartitions");
- dbName = dbName.toLowerCase().trim();
- tableName = tableName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
Query query = pm.newQuery(MPartition.class,
"table.tableName == t1 && table.database.name == t2");
query.declareParameters("java.lang.String t1, java.lang.String t2");
@@ -2292,8 +2293,8 @@ public class ObjectStore implements RawS
query.setFilter(sb.toString());
LOG.debug(" JDOQL filter is " + sb.toString());
- params.put("t1", tblName.trim().toLowerCase());
- params.put("t2", dbName.trim().toLowerCase());
+ params.put("t1", HiveStringUtils.normalizeIdentifier(tblName));
+ params.put("t2", HiveStringUtils.normalizeIdentifier(dbName));
query.declareParameters(makeParameterDeclarationString(params));
return new ObjectPair<Query, Map<String,String>>(query, params);
@@ -2319,9 +2320,9 @@ public class ObjectStore implements RawS
throws MetaException {
assert allowSql || allowJdo;
this.allowJdo = allowJdo;
- this.dbName = dbName.toLowerCase();
+ this.dbName = HiveStringUtils.normalizeIdentifier(dbName);
if (tblName != null){
- this.tblName = tblName.toLowerCase();
+ this.tblName = HiveStringUtils.normalizeIdentifier(tblName);
} else {
// tblName can be null in cases of Helper being used at a higher
// abstraction level, such as with datbases
@@ -2622,7 +2623,7 @@ public class ObjectStore implements RawS
try {
openTransaction();
LOG.debug("Executing listTableNamesByFilter");
- dbName = dbName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
Map<String, Object> params = new HashMap<String, Object>();
String queryFilterString = makeQueryFilterString(dbName, null, filter, params);
Query query = pm.newQuery(MTable.class);
@@ -2667,8 +2668,8 @@ public class ObjectStore implements RawS
try {
openTransaction();
LOG.debug("Executing listMPartitionNamesByFilter");
- dbName = dbName.toLowerCase();
- tableName = tableName.toLowerCase();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
MTable mtable = getMTable(dbName, tableName);
if( mtable == null ) {
@@ -2719,8 +2720,8 @@ public class ObjectStore implements RawS
boolean success = false;
try {
openTransaction();
- name = name.toLowerCase();
- dbname = dbname.toLowerCase();
+ name = HiveStringUtils.normalizeIdentifier(name);
+ dbname = HiveStringUtils.normalizeIdentifier(dbname);
MTable newt = convertToMTable(newTable);
if (newt == null) {
throw new InvalidObjectException("new table is invalid");
@@ -2733,7 +2734,7 @@ public class ObjectStore implements RawS
// For now only alter name, owner, parameters, cols, bucketcols are allowed
oldt.setDatabase(newt.getDatabase());
- oldt.setTableName(newt.getTableName().toLowerCase());
+ oldt.setTableName(HiveStringUtils.normalizeIdentifier(newt.getTableName()));
oldt.setParameters(newt.getParameters());
oldt.setOwner(newt.getOwner());
// Fully copy over the contents of the new SD into the old SD,
@@ -2761,9 +2762,9 @@ public class ObjectStore implements RawS
boolean success = false;
try {
openTransaction();
- name = name.toLowerCase();
- baseTblName = baseTblName.toLowerCase();
- dbname = dbname.toLowerCase();
+ name = HiveStringUtils.normalizeIdentifier(name);
+ baseTblName = HiveStringUtils.normalizeIdentifier(baseTblName);
+ dbname = HiveStringUtils.normalizeIdentifier(dbname);
MIndex newi = convertToMIndex(newIndex);
if (newi == null) {
throw new InvalidObjectException("new index is invalid");
@@ -2788,8 +2789,8 @@ public class ObjectStore implements RawS
private void alterPartitionNoTxn(String dbname, String name, List<String> part_vals,
Partition newPart) throws InvalidObjectException, MetaException {
- name = name.toLowerCase();
- dbname = dbname.toLowerCase();
+ name = HiveStringUtils.normalizeIdentifier(name);
+ dbname = HiveStringUtils.normalizeIdentifier(dbname);
MPartition oldp = getMPartition(dbname, name, part_vals);
MPartition newp = convertToMPart(newPart, false);
if (oldp == null || newp == null) {
@@ -3022,7 +3023,7 @@ public class ObjectStore implements RawS
"Underlying index table does not exist for the given index.");
}
- return new MIndex(index.getIndexName().toLowerCase(), origTable, index.getCreateTime(),
+ return new MIndex(HiveStringUtils.normalizeIdentifier(index.getIndexName()), origTable, index.getCreateTime(),
index.getLastAccessTime(), index.getParameters(), indexTable, msd,
index.getIndexHandlerClass(), index.isDeferredRebuild());
}
@@ -3051,8 +3052,8 @@ public class ObjectStore implements RawS
boolean commited = false;
try {
openTransaction();
- dbName = dbName.toLowerCase().trim();
- originalTblName = originalTblName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ originalTblName = HiveStringUtils.normalizeIdentifier(originalTblName);
MTable mtbl = getMTable(dbName, originalTblName);
if (mtbl == null) {
commited = commitTransaction();
@@ -3063,7 +3064,8 @@ public class ObjectStore implements RawS
"origTable.tableName == t1 && origTable.database.name == t2 && indexName == t3");
query.declareParameters("java.lang.String t1, java.lang.String t2, java.lang.String t3");
query.setUnique(true);
- midx = (MIndex) query.execute(originalTblName, dbName, indexName.toLowerCase());
+ midx = (MIndex) query.execute(originalTblName, dbName,
+ HiveStringUtils.normalizeIdentifier(indexName));
pm.retrieve(midx);
commited = commitTransaction();
} finally {
@@ -3137,8 +3139,8 @@ public class ObjectStore implements RawS
try {
openTransaction();
LOG.debug("Executing listMIndexes");
- dbName = dbName.toLowerCase().trim();
- origTableName = origTableName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ origTableName = HiveStringUtils.normalizeIdentifier(origTableName);
Query query = pm.newQuery(MIndex.class,
"origTable.tableName == t1 && origTable.database.name == t2");
query.declareParameters("java.lang.String t1, java.lang.String t2");
@@ -3163,8 +3165,8 @@ public class ObjectStore implements RawS
try {
openTransaction();
LOG.debug("Executing listIndexNames");
- dbName = dbName.toLowerCase().trim();
- origTableName = origTableName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ origTableName = HiveStringUtils.normalizeIdentifier(origTableName);
Query q = pm.newQuery(
"select indexName from org.apache.hadoop.hive.metastore.model.MIndex "
+ "where origTable.database.name == t1 && origTable.tableName == t2 "
@@ -3585,7 +3587,7 @@ public class ObjectStore implements RawS
public List<PrivilegeGrantInfo> getDBPrivilege(String dbName,
String principalName, PrincipalType principalType)
throws InvalidObjectException, MetaException {
- dbName = dbName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
if (principalName != null) {
List<MDBPrivilege> userNameDbPriv = this.listPrincipalDBGrants(
@@ -3611,7 +3613,7 @@ public class ObjectStore implements RawS
String userName, List<String> groupNames) throws InvalidObjectException,
MetaException {
boolean commited = false;
- dbName = dbName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
PrincipalPrivilegeSet ret = new PrincipalPrivilegeSet();
try {
@@ -3654,8 +3656,8 @@ public class ObjectStore implements RawS
List<String> groupNames) throws InvalidObjectException, MetaException {
boolean commited = false;
PrincipalPrivilegeSet ret = new PrincipalPrivilegeSet();
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
try {
openTransaction();
@@ -3697,8 +3699,8 @@ public class ObjectStore implements RawS
throws InvalidObjectException, MetaException {
boolean commited = false;
PrincipalPrivilegeSet ret = new PrincipalPrivilegeSet();
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
try {
openTransaction();
@@ -3739,9 +3741,9 @@ public class ObjectStore implements RawS
String tableName, String partitionName, String columnName,
String userName, List<String> groupNames) throws InvalidObjectException,
MetaException {
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
- columnName = columnName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ columnName = HiveStringUtils.normalizeIdentifier(columnName);
boolean commited = false;
PrincipalPrivilegeSet ret = new PrincipalPrivilegeSet();
@@ -3783,8 +3785,8 @@ public class ObjectStore implements RawS
String tableName, String partName, String principalName,
PrincipalType principalType) {
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
if (principalName != null) {
List<MPartitionPrivilege> userNameTabPartPriv = this
@@ -3812,8 +3814,8 @@ public class ObjectStore implements RawS
private List<PrivilegeGrantInfo> getTablePrivilege(String dbName,
String tableName, String principalName, PrincipalType principalType) {
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
if (principalName != null) {
List<MTablePrivilege> userNameTabPartPriv = this
@@ -3838,9 +3840,9 @@ public class ObjectStore implements RawS
String tableName, String columnName, String partitionName,
String principalName, PrincipalType principalType) {
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
- columnName = columnName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ columnName = HiveStringUtils.normalizeIdentifier(columnName);
if (partitionName == null) {
List<MTableColumnPrivilege> userNameColumnPriv = this
@@ -4424,7 +4426,7 @@ public class ObjectStore implements RawS
PrincipalType principalType, String dbName) {
boolean success = false;
List<MDBPrivilege> mSecurityDBList = null;
- dbName = dbName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
try {
openTransaction();
@@ -4508,11 +4510,11 @@ public class ObjectStore implements RawS
public List<MTablePrivilege> listAllTableGrants(String dbName,
String tableName) {
boolean success = false;
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
List<MTablePrivilege> mSecurityTabList = null;
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
try {
openTransaction();
LOG.debug("Executing listAllTableGrants");
@@ -4539,8 +4541,8 @@ public class ObjectStore implements RawS
@SuppressWarnings("unchecked")
public List<MPartitionPrivilege> listTableAllPartitionGrants(String dbName,
String tableName) {
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
boolean success = false;
List<MPartitionPrivilege> mSecurityTabPartList = null;
try {
@@ -4571,8 +4573,8 @@ public class ObjectStore implements RawS
String tableName) {
boolean success = false;
List<MTableColumnPrivilege> mTblColPrivilegeList = null;
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
try {
openTransaction();
@@ -4598,8 +4600,8 @@ public class ObjectStore implements RawS
public List<MPartitionColumnPrivilege> listTableAllPartitionColumnGrants(String dbName,
String tableName) {
boolean success = false;
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
List<MPartitionColumnPrivilege> mSecurityColList = null;
try {
@@ -4626,8 +4628,8 @@ public class ObjectStore implements RawS
public List<MPartitionColumnPrivilege> listPartitionAllColumnGrants(String dbName,
String tableName, List<String> partNames) {
boolean success = false;
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
List<MPartitionColumnPrivilege> mSecurityColList = null;
try {
@@ -4658,7 +4660,7 @@ public class ObjectStore implements RawS
@SuppressWarnings("unchecked")
private List<MDBPrivilege> listDatabaseGrants(String dbName) {
- dbName = dbName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
boolean success = false;
try {
@@ -4684,8 +4686,8 @@ public class ObjectStore implements RawS
@SuppressWarnings("unchecked")
private List<MPartitionPrivilege> listPartitionGrants(String dbName, String tableName,
List<String> partNames) {
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
boolean success = false;
List<MPartitionPrivilege> mSecurityTabPartList = null;
@@ -4728,8 +4730,8 @@ public class ObjectStore implements RawS
String queryStr = tbCol + " == t1 && " + dbCol + " == t2";
String paramStr = "java.lang.String t1, java.lang.String t2";
Object[] params = new Object[2 + partNames.size()];
- params[0] = tableName;
- params[1] = dbName;
+ params[0] = HiveStringUtils.normalizeIdentifier(tableName);
+ params[1] = HiveStringUtils.normalizeIdentifier(dbName);
int index = 0;
for (String partName : partNames) {
params[index + 2] = partName;
@@ -4748,8 +4750,8 @@ public class ObjectStore implements RawS
public List<MTablePrivilege> listAllTableGrants(
String principalName, PrincipalType principalType, String dbName,
String tableName) {
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
boolean success = false;
List<MTablePrivilege> mSecurityTabPartList = null;
@@ -4782,8 +4784,8 @@ public class ObjectStore implements RawS
String principalName, PrincipalType principalType, String dbName,
String tableName, String partName) {
boolean success = false;
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
List<MPartitionPrivilege> mSecurityTabPartList = null;
try {
@@ -4817,9 +4819,9 @@ public class ObjectStore implements RawS
String principalName, PrincipalType principalType, String dbName,
String tableName, String columnName) {
boolean success = false;
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
- columnName = columnName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ columnName = HiveStringUtils.normalizeIdentifier(columnName);
List<MTableColumnPrivilege> mSecurityColList = null;
try {
openTransaction();
@@ -4851,9 +4853,9 @@ public class ObjectStore implements RawS
String principalName, PrincipalType principalType, String dbName,
String tableName, String partitionName, String columnName) {
boolean success = false;
- tableName = tableName.toLowerCase().trim();
- dbName = dbName.toLowerCase().trim();
- columnName = columnName.toLowerCase().trim();
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ columnName = HiveStringUtils.normalizeIdentifier(columnName);
List<MPartitionColumnPrivilege> mSecurityColList = null;
try {
@@ -6004,7 +6006,8 @@ public class ObjectStore implements RawS
protected ColumnStatistics getTableColumnStatisticsInternal(
String dbName, String tableName, final List<String> colNames, boolean allowSql,
boolean allowJdo) throws MetaException, NoSuchObjectException {
- return new GetStatHelper(dbName.toLowerCase(), tableName.toLowerCase(), allowSql, allowJdo) {
+ return new GetStatHelper(HiveStringUtils.normalizeIdentifier(dbName),
+ HiveStringUtils.normalizeIdentifier(tableName), allowSql, allowJdo) {
@Override
protected ColumnStatistics getSqlResult(GetHelper<ColumnStatistics> ctx) throws MetaException {
return directSql.getTableStats(dbName, tblName, colNames);
@@ -6221,7 +6224,9 @@ public class ObjectStore implements RawS
if (colName != null) {
query.setUnique(true);
mStatsObj = (MPartitionColumnStatistics)query.executeWithArray(partName.trim(),
- dbName.trim(), tableName.trim(), colName.trim());
+ HiveStringUtils.normalizeIdentifier(dbName),
+ HiveStringUtils.normalizeIdentifier(tableName),
+ HiveStringUtils.normalizeIdentifier(colName));
pm.retrieve(mStatsObj);
if (mStatsObj != null) {
@@ -6232,7 +6237,8 @@ public class ObjectStore implements RawS
}
} else {
mStatsObjColl= (List<MPartitionColumnStatistics>)query.execute(partName.trim(),
- dbName.trim(), tableName.trim());
+ HiveStringUtils.normalizeIdentifier(dbName),
+ HiveStringUtils.normalizeIdentifier(tableName));
pm.retrieveAll(mStatsObjColl);
if (mStatsObjColl != null) {
@@ -6298,8 +6304,10 @@ public class ObjectStore implements RawS
if (colName != null) {
query.setUnique(true);
- mStatsObj = (MTableColumnStatistics)query.execute(tableName.trim(),
- dbName.trim(), colName.trim());
+ mStatsObj = (MTableColumnStatistics)query.execute(
+ HiveStringUtils.normalizeIdentifier(tableName),
+ HiveStringUtils.normalizeIdentifier(dbName),
+ HiveStringUtils.normalizeIdentifier(colName));
pm.retrieve(mStatsObj);
if (mStatsObj != null) {
@@ -6309,7 +6317,9 @@ public class ObjectStore implements RawS
+ tableName + " col=" + colName);
}
} else {
- mStatsObjColl= (List<MTableColumnStatistics>)query.execute(tableName.trim(), dbName.trim());
+ mStatsObjColl= (List<MTableColumnStatistics>)query.execute(
+ HiveStringUtils.normalizeIdentifier(tableName),
+ HiveStringUtils.normalizeIdentifier(dbName));
pm.retrieveAll(mStatsObjColl);
if (mStatsObjColl != null) {
@@ -6688,8 +6698,8 @@ public class ObjectStore implements RawS
boolean success = false;
try {
openTransaction();
- dbName = dbName.toLowerCase().trim();
- tableName = tableName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
+ tableName = HiveStringUtils.normalizeIdentifier(tableName);
// TODO: this could also be passed from upper layer; or this method should filter the list.
MTable mtbl = getMTable(dbName, tableName);
@@ -6821,8 +6831,8 @@ public class ObjectStore implements RawS
boolean success = false;
try {
openTransaction();
- funcName = funcName.toLowerCase();
- dbName = dbName.toLowerCase();
+ funcName = HiveStringUtils.normalizeIdentifier(funcName);
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
MFunction newf = convertToMFunction(newFunction);
if (newf == null) {
throw new InvalidObjectException("new function is invalid");
@@ -6834,7 +6844,7 @@ public class ObjectStore implements RawS
}
// For now only alter name, owner, class name, type
- oldf.setFunctionName(newf.getFunctionName().toLowerCase());
+ oldf.setFunctionName(HiveStringUtils.normalizeIdentifier(newf.getFunctionName()));
oldf.setDatabase(newf.getDatabase());
oldf.setOwnerName(newf.getOwnerName());
oldf.setOwnerType(newf.getOwnerType());
@@ -6875,8 +6885,8 @@ public class ObjectStore implements RawS
boolean commited = false;
try {
openTransaction();
- db = db.toLowerCase().trim();
- function = function.toLowerCase().trim();
+ db = HiveStringUtils.normalizeIdentifier(db);
+ function = HiveStringUtils.normalizeIdentifier(function);
Query query = pm.newQuery(MFunction.class, "functionName == function && database.name == db");
query.declareParameters("java.lang.String function, java.lang.String db");
query.setUnique(true);
@@ -6914,7 +6924,7 @@ public class ObjectStore implements RawS
List<String> funcs = null;
try {
openTransaction();
- dbName = dbName.toLowerCase().trim();
+ dbName = HiveStringUtils.normalizeIdentifier(dbName);
// Take the pattern and split it on the | to get all the composing
// patterns
String[] subpatterns = pattern.trim().split("\\|");
Added: hive/trunk/ql/src/test/queries/clientpositive/drop_partition_with_stats.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/drop_partition_with_stats.q?rev=1640943&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/drop_partition_with_stats.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/drop_partition_with_stats.q Fri Nov 21 15:42:35 2014
@@ -0,0 +1,68 @@
+-- This test verifies that a table partition could be dropped with columns stats computed
+-- The column stats for a partitioned table will go to PART_COL_STATS
+CREATE DATABASE IF NOT EXISTS partstatsdb1;
+USE partstatsdb1;
+CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p11', Part2='P12');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p21', Part2='P22');
+ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key;
+ANALYZE TABLE testtable PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key;
+
+
+CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P11');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P12');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p21', Part2='P22');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p31', Part2='P32');
+ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key;
+ANALYZE TABLE TestTable1 PARTITION (part1='p11') COMPUTE STATISTICS FOR COLUMNS key;
+ANALYZE TABLE TestTable1 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key;
+
+CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p21', Part2='P22');
+ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key;
+ANALYZE TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key;
+
+ALTER TABLE partstatsdb1.testtable DROP PARTITION (part1='p11', Part2='P12');
+ALTER TABLE partstatsdb1.TestTable1 DROP PARTITION (part1='p11', Part2='P12');
+ALTER TABLE partstatsdb1.TESTTABLE2 DROP PARTITION (part1='p11', Part2='P12');
+
+DROP TABLE partstatsdb1.testtable;
+DROP TABLE partstatsdb1.TestTable1;
+DROP TABLE partstatsdb1.TESTTABLE2;
+DROP DATABASE partstatsdb1;
+
+CREATE DATABASE IF NOT EXISTS PARTSTATSDB2;
+USE PARTSTATSDB2;
+CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p11', Part2='P12');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p21', Part2='P22');
+ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key;
+ANALYZE TABLE testtable PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key;
+
+
+CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P11');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P12');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p21', Part2='P22');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p31', Part2='P32');
+ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key;
+ANALYZE TABLE TestTable1 PARTITION (part1='p11') COMPUTE STATISTICS FOR COLUMNS key;
+ANALYZE TABLE TestTable1 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key;
+
+CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12');
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p21', Part2='P22');
+ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key;
+ANALYZE TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key;
+
+ALTER TABLE PARTSTATSDB2.testtable DROP PARTITION (part1='p11', Part2='P12');
+ALTER TABLE PARTSTATSDB2.TestTable1 DROP PARTITION (part1='p11', Part2='P12');
+ALTER TABLE PARTSTATSDB2.TESTTABLE2 DROP PARTITION (part1='p11', Part2='P12');
+
+DROP TABLE PARTSTATSDB2.testtable;
+DROP TABLE PARTSTATSDB2.TestTable1;
+DROP TABLE PARTSTATSDB2.TESTTABLE2;
+DROP DATABASE PARTSTATSDB2;
+
Added: hive/trunk/ql/src/test/queries/clientpositive/drop_table_with_stats.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/drop_table_with_stats.q?rev=1640943&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/drop_table_with_stats.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/drop_table_with_stats.q Fri Nov 21 15:42:35 2014
@@ -0,0 +1,43 @@
+-- This test verifies that a table could be dropped with columns stats computed
+-- The column stats for table without partition will go to TAB_COL_STATS
+CREATE DATABASE IF NOT EXISTS tblstatsdb1;
+USE tblstatsdb1;
+CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable;
+ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key;
+
+CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1;
+ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key;
+
+CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2;
+ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key;
+
+DROP TABLE tblstatsdb1.testtable;
+DROP TABLE tblstatsdb1.TestTable1;
+DROP TABLE tblstatsdb1.TESTTABLE2;
+DROP DATABASE tblstatsdb1;
+
+CREATE DATABASE IF NOT EXISTS TBLSTATSDB2;
+USE TBLSTATSDB2;
+CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable;
+ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key;
+
+
+CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1;
+ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key;
+
+
+CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING);
+LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2;
+ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key;
+
+
+DROP TABLE TBLSTATSDB2.testtable;
+DROP TABLE TBLSTATSDB2.TestTable1;
+DROP TABLE TBLSTATSDB2.TESTTABLE2;
+DROP DATABASE TBLSTATSDB2;
+
Added: hive/trunk/ql/src/test/results/clientpositive/drop_partition_with_stats.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/drop_partition_with_stats.q.out?rev=1640943&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/drop_partition_with_stats.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/drop_partition_with_stats.q.out Fri Nov 21 15:42:35 2014
@@ -0,0 +1,496 @@
+PREHOOK: query: -- This test verifies that a table partition could be dropped with columns stats computed
+-- The column stats for a partitioned table will go to PART_COL_STATS
+CREATE DATABASE IF NOT EXISTS partstatsdb1
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:partstatsdb1
+POSTHOOK: query: -- This test verifies that a table partition could be dropped with columns stats computed
+-- The column stats for a partitioned table will go to PART_COL_STATS
+CREATE DATABASE IF NOT EXISTS partstatsdb1
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:partstatsdb1
+PREHOOK: query: USE partstatsdb1
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:partstatsdb1
+POSTHOOK: query: USE partstatsdb1
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:partstatsdb1
+PREHOOK: query: CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:partstatsdb1
+PREHOOK: Output: partstatsdb1@testtable
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:partstatsdb1
+POSTHOOK: Output: partstatsdb1@testtable
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb1@testtable
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb1@testtable
+POSTHOOK: Output: partstatsdb1@testtable@part1=p11/part2=P12
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p21', Part2='P22')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb1@testtable
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p21', Part2='P22')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb1@testtable
+POSTHOOK: Output: partstatsdb1@testtable@part1=p21/part2=P22
+PREHOOK: query: ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb1@testtable
+PREHOOK: Input: partstatsdb1@testtable@part1=p11/part2=P12
+PREHOOK: Input: partstatsdb1@testtable@part1=p21/part2=P22
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb1@testtable
+POSTHOOK: Input: partstatsdb1@testtable@part1=p11/part2=P12
+POSTHOOK: Input: partstatsdb1@testtable@part1=p21/part2=P22
+#### A masked pattern was here ####
+PREHOOK: query: ANALYZE TABLE testtable PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb1@testtable
+PREHOOK: Input: partstatsdb1@testtable@part1=p11/part2=P12
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE testtable PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb1@testtable
+POSTHOOK: Input: partstatsdb1@testtable@part1=p11/part2=P12
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:partstatsdb1
+PREHOOK: Output: partstatsdb1@TestTable1
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:partstatsdb1
+POSTHOOK: Output: partstatsdb1@TestTable1
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P11')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P11')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: Output: partstatsdb1@testtable1@part1=p11/part2=P11
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: Output: partstatsdb1@testtable1@part1=p11/part2=P12
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p21', Part2='P22')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p21', Part2='P22')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: Output: partstatsdb1@testtable1@part1=p21/part2=P22
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p31', Part2='P32')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p31', Part2='P32')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: Output: partstatsdb1@testtable1@part1=p31/part2=P32
+PREHOOK: query: ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb1@testtable1
+PREHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P11
+PREHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P12
+PREHOOK: Input: partstatsdb1@testtable1@part1=p21/part2=P22
+PREHOOK: Input: partstatsdb1@testtable1@part1=p31/part2=P32
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb1@testtable1
+POSTHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P11
+POSTHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P12
+POSTHOOK: Input: partstatsdb1@testtable1@part1=p21/part2=P22
+POSTHOOK: Input: partstatsdb1@testtable1@part1=p31/part2=P32
+#### A masked pattern was here ####
+PREHOOK: query: ANALYZE TABLE TestTable1 PARTITION (part1='p11') COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb1@testtable1
+PREHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P11
+PREHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P12
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TestTable1 PARTITION (part1='p11') COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb1@testtable1
+POSTHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P11
+POSTHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P12
+#### A masked pattern was here ####
+PREHOOK: query: ANALYZE TABLE TestTable1 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb1@testtable1
+PREHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P12
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TestTable1 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb1@testtable1
+POSTHOOK: Input: partstatsdb1@testtable1@part1=p11/part2=P12
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:partstatsdb1
+PREHOOK: Output: partstatsdb1@TESTTABLE2
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:partstatsdb1
+POSTHOOK: Output: partstatsdb1@TESTTABLE2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb1@testtable2
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb1@testtable2
+POSTHOOK: Output: partstatsdb1@testtable2@part1=p11/part2=P12
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p21', Part2='P22')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb1@testtable2
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p21', Part2='P22')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb1@testtable2
+POSTHOOK: Output: partstatsdb1@testtable2@part1=p21/part2=P22
+PREHOOK: query: ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb1@testtable2
+PREHOOK: Input: partstatsdb1@testtable2@part1=p11/part2=P12
+PREHOOK: Input: partstatsdb1@testtable2@part1=p21/part2=P22
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb1@testtable2
+POSTHOOK: Input: partstatsdb1@testtable2@part1=p11/part2=P12
+POSTHOOK: Input: partstatsdb1@testtable2@part1=p21/part2=P22
+#### A masked pattern was here ####
+PREHOOK: query: ANALYZE TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb1@testtable2
+PREHOOK: Input: partstatsdb1@testtable2@part1=p11/part2=P12
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb1@testtable2
+POSTHOOK: Input: partstatsdb1@testtable2@part1=p11/part2=P12
+#### A masked pattern was here ####
+PREHOOK: query: ALTER TABLE partstatsdb1.testtable DROP PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: ALTERTABLE_DROPPARTS
+PREHOOK: Input: partstatsdb1@testtable
+PREHOOK: Output: partstatsdb1@testtable@part1=p11/part2=P12
+POSTHOOK: query: ALTER TABLE partstatsdb1.testtable DROP PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: ALTERTABLE_DROPPARTS
+POSTHOOK: Input: partstatsdb1@testtable
+POSTHOOK: Output: partstatsdb1@testtable@part1=p11/part2=P12
+PREHOOK: query: ALTER TABLE partstatsdb1.TestTable1 DROP PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: ALTERTABLE_DROPPARTS
+PREHOOK: Input: partstatsdb1@testtable1
+PREHOOK: Output: partstatsdb1@testtable1@part1=p11/part2=P12
+POSTHOOK: query: ALTER TABLE partstatsdb1.TestTable1 DROP PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: ALTERTABLE_DROPPARTS
+POSTHOOK: Input: partstatsdb1@testtable1
+POSTHOOK: Output: partstatsdb1@testtable1@part1=p11/part2=P12
+PREHOOK: query: ALTER TABLE partstatsdb1.TESTTABLE2 DROP PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: ALTERTABLE_DROPPARTS
+PREHOOK: Input: partstatsdb1@testtable2
+PREHOOK: Output: partstatsdb1@testtable2@part1=p11/part2=P12
+POSTHOOK: query: ALTER TABLE partstatsdb1.TESTTABLE2 DROP PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: ALTERTABLE_DROPPARTS
+POSTHOOK: Input: partstatsdb1@testtable2
+POSTHOOK: Output: partstatsdb1@testtable2@part1=p11/part2=P12
+PREHOOK: query: DROP TABLE partstatsdb1.testtable
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: partstatsdb1@testtable
+PREHOOK: Output: partstatsdb1@testtable
+POSTHOOK: query: DROP TABLE partstatsdb1.testtable
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: partstatsdb1@testtable
+POSTHOOK: Output: partstatsdb1@testtable
+PREHOOK: query: DROP TABLE partstatsdb1.TestTable1
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: partstatsdb1@testtable1
+PREHOOK: Output: partstatsdb1@testtable1
+POSTHOOK: query: DROP TABLE partstatsdb1.TestTable1
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: partstatsdb1@testtable1
+POSTHOOK: Output: partstatsdb1@testtable1
+PREHOOK: query: DROP TABLE partstatsdb1.TESTTABLE2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: partstatsdb1@testtable2
+PREHOOK: Output: partstatsdb1@testtable2
+POSTHOOK: query: DROP TABLE partstatsdb1.TESTTABLE2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: partstatsdb1@testtable2
+POSTHOOK: Output: partstatsdb1@testtable2
+PREHOOK: query: DROP DATABASE partstatsdb1
+PREHOOK: type: DROPDATABASE
+PREHOOK: Input: database:partstatsdb1
+PREHOOK: Output: database:partstatsdb1
+POSTHOOK: query: DROP DATABASE partstatsdb1
+POSTHOOK: type: DROPDATABASE
+POSTHOOK: Input: database:partstatsdb1
+POSTHOOK: Output: database:partstatsdb1
+PREHOOK: query: CREATE DATABASE IF NOT EXISTS PARTSTATSDB2
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:PARTSTATSDB2
+POSTHOOK: query: CREATE DATABASE IF NOT EXISTS PARTSTATSDB2
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:PARTSTATSDB2
+PREHOOK: query: USE PARTSTATSDB2
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:partstatsdb2
+POSTHOOK: query: USE PARTSTATSDB2
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:partstatsdb2
+PREHOOK: query: CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: PARTSTATSDB2@testtable
+PREHOOK: Output: database:partstatsdb2
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: PARTSTATSDB2@testtable
+POSTHOOK: Output: database:partstatsdb2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb2@testtable
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb2@testtable
+POSTHOOK: Output: partstatsdb2@testtable@part1=p11/part2=P12
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p21', Part2='P22')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb2@testtable
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable PARTITION (part1='p21', Part2='P22')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb2@testtable
+POSTHOOK: Output: partstatsdb2@testtable@part1=p21/part2=P22
+PREHOOK: query: ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb2@testtable
+PREHOOK: Input: partstatsdb2@testtable@part1=p11/part2=P12
+PREHOOK: Input: partstatsdb2@testtable@part1=p21/part2=P22
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb2@testtable
+POSTHOOK: Input: partstatsdb2@testtable@part1=p11/part2=P12
+POSTHOOK: Input: partstatsdb2@testtable@part1=p21/part2=P22
+#### A masked pattern was here ####
+PREHOOK: query: ANALYZE TABLE testtable PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb2@testtable
+PREHOOK: Input: partstatsdb2@testtable@part1=p11/part2=P12
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE testtable PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb2@testtable
+POSTHOOK: Input: partstatsdb2@testtable@part1=p11/part2=P12
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: PARTSTATSDB2@TestTable1
+PREHOOK: Output: database:partstatsdb2
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: PARTSTATSDB2@TestTable1
+POSTHOOK: Output: database:partstatsdb2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P11')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P11')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: Output: partstatsdb2@testtable1@part1=p11/part2=P11
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: Output: partstatsdb2@testtable1@part1=p11/part2=P12
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p21', Part2='P22')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p21', Part2='P22')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: Output: partstatsdb2@testtable1@part1=p21/part2=P22
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p31', Part2='P32')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1 PARTITION (part1='p31', Part2='P32')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: Output: partstatsdb2@testtable1@part1=p31/part2=P32
+PREHOOK: query: ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb2@testtable1
+PREHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P11
+PREHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P12
+PREHOOK: Input: partstatsdb2@testtable1@part1=p21/part2=P22
+PREHOOK: Input: partstatsdb2@testtable1@part1=p31/part2=P32
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb2@testtable1
+POSTHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P11
+POSTHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P12
+POSTHOOK: Input: partstatsdb2@testtable1@part1=p21/part2=P22
+POSTHOOK: Input: partstatsdb2@testtable1@part1=p31/part2=P32
+#### A masked pattern was here ####
+PREHOOK: query: ANALYZE TABLE TestTable1 PARTITION (part1='p11') COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb2@testtable1
+PREHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P11
+PREHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P12
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TestTable1 PARTITION (part1='p11') COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb2@testtable1
+POSTHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P11
+POSTHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P12
+#### A masked pattern was here ####
+PREHOOK: query: ANALYZE TABLE TestTable1 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb2@testtable1
+PREHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P12
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TestTable1 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb2@testtable1
+POSTHOOK: Input: partstatsdb2@testtable1@part1=p11/part2=P12
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: PARTSTATSDB2@TESTTABLE2
+PREHOOK: Output: database:partstatsdb2
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING) PARTITIONED BY (part1 STRING, Part2 STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: PARTSTATSDB2@TESTTABLE2
+POSTHOOK: Output: database:partstatsdb2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb2@testtable2
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb2@testtable2
+POSTHOOK: Output: partstatsdb2@testtable2@part1=p11/part2=P12
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p21', Part2='P22')
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: partstatsdb2@testtable2
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2 PARTITION (part1='p21', Part2='P22')
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: partstatsdb2@testtable2
+POSTHOOK: Output: partstatsdb2@testtable2@part1=p21/part2=P22
+PREHOOK: query: ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb2@testtable2
+PREHOOK: Input: partstatsdb2@testtable2@part1=p11/part2=P12
+PREHOOK: Input: partstatsdb2@testtable2@part1=p21/part2=P22
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb2@testtable2
+POSTHOOK: Input: partstatsdb2@testtable2@part1=p11/part2=P12
+POSTHOOK: Input: partstatsdb2@testtable2@part1=p21/part2=P22
+#### A masked pattern was here ####
+PREHOOK: query: ANALYZE TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: partstatsdb2@testtable2
+PREHOOK: Input: partstatsdb2@testtable2@part1=p11/part2=P12
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TESTTABLE2 PARTITION (part1='p11', Part2='P12') COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: partstatsdb2@testtable2
+POSTHOOK: Input: partstatsdb2@testtable2@part1=p11/part2=P12
+#### A masked pattern was here ####
+PREHOOK: query: ALTER TABLE PARTSTATSDB2.testtable DROP PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: ALTERTABLE_DROPPARTS
+PREHOOK: Input: partstatsdb2@testtable
+PREHOOK: Output: partstatsdb2@testtable@part1=p11/part2=P12
+POSTHOOK: query: ALTER TABLE PARTSTATSDB2.testtable DROP PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: ALTERTABLE_DROPPARTS
+POSTHOOK: Input: partstatsdb2@testtable
+POSTHOOK: Output: partstatsdb2@testtable@part1=p11/part2=P12
+PREHOOK: query: ALTER TABLE PARTSTATSDB2.TestTable1 DROP PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: ALTERTABLE_DROPPARTS
+PREHOOK: Input: partstatsdb2@testtable1
+PREHOOK: Output: partstatsdb2@testtable1@part1=p11/part2=P12
+POSTHOOK: query: ALTER TABLE PARTSTATSDB2.TestTable1 DROP PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: ALTERTABLE_DROPPARTS
+POSTHOOK: Input: partstatsdb2@testtable1
+POSTHOOK: Output: partstatsdb2@testtable1@part1=p11/part2=P12
+PREHOOK: query: ALTER TABLE PARTSTATSDB2.TESTTABLE2 DROP PARTITION (part1='p11', Part2='P12')
+PREHOOK: type: ALTERTABLE_DROPPARTS
+PREHOOK: Input: partstatsdb2@testtable2
+PREHOOK: Output: partstatsdb2@testtable2@part1=p11/part2=P12
+POSTHOOK: query: ALTER TABLE PARTSTATSDB2.TESTTABLE2 DROP PARTITION (part1='p11', Part2='P12')
+POSTHOOK: type: ALTERTABLE_DROPPARTS
+POSTHOOK: Input: partstatsdb2@testtable2
+POSTHOOK: Output: partstatsdb2@testtable2@part1=p11/part2=P12
+PREHOOK: query: DROP TABLE PARTSTATSDB2.testtable
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: partstatsdb2@testtable
+PREHOOK: Output: partstatsdb2@testtable
+POSTHOOK: query: DROP TABLE PARTSTATSDB2.testtable
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: partstatsdb2@testtable
+POSTHOOK: Output: partstatsdb2@testtable
+PREHOOK: query: DROP TABLE PARTSTATSDB2.TestTable1
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: partstatsdb2@testtable1
+PREHOOK: Output: partstatsdb2@testtable1
+POSTHOOK: query: DROP TABLE PARTSTATSDB2.TestTable1
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: partstatsdb2@testtable1
+POSTHOOK: Output: partstatsdb2@testtable1
+PREHOOK: query: DROP TABLE PARTSTATSDB2.TESTTABLE2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: partstatsdb2@testtable2
+PREHOOK: Output: partstatsdb2@testtable2
+POSTHOOK: query: DROP TABLE PARTSTATSDB2.TESTTABLE2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: partstatsdb2@testtable2
+POSTHOOK: Output: partstatsdb2@testtable2
+PREHOOK: query: DROP DATABASE PARTSTATSDB2
+PREHOOK: type: DROPDATABASE
+PREHOOK: Input: database:partstatsdb2
+PREHOOK: Output: database:partstatsdb2
+POSTHOOK: query: DROP DATABASE PARTSTATSDB2
+POSTHOOK: type: DROPDATABASE
+POSTHOOK: Input: database:partstatsdb2
+POSTHOOK: Output: database:partstatsdb2
Added: hive/trunk/ql/src/test/results/clientpositive/drop_table_with_stats.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/drop_table_with_stats.q.out?rev=1640943&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/drop_table_with_stats.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/drop_table_with_stats.q.out Fri Nov 21 15:42:35 2014
@@ -0,0 +1,236 @@
+PREHOOK: query: -- This test verifies that a table could be dropped with columns stats computed
+-- The column stats for table without partition will go to TAB_COL_STATS
+CREATE DATABASE IF NOT EXISTS tblstatsdb1
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:tblstatsdb1
+POSTHOOK: query: -- This test verifies that a table could be dropped with columns stats computed
+-- The column stats for table without partition will go to TAB_COL_STATS
+CREATE DATABASE IF NOT EXISTS tblstatsdb1
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:tblstatsdb1
+PREHOOK: query: USE tblstatsdb1
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:tblstatsdb1
+POSTHOOK: query: USE tblstatsdb1
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:tblstatsdb1
+PREHOOK: query: CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:tblstatsdb1
+PREHOOK: Output: tblstatsdb1@testtable
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:tblstatsdb1
+POSTHOOK: Output: tblstatsdb1@testtable
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: tblstatsdb1@testtable
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: tblstatsdb1@testtable
+PREHOOK: query: ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: tblstatsdb1@testtable
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: tblstatsdb1@testtable
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:tblstatsdb1
+PREHOOK: Output: tblstatsdb1@TestTable1
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:tblstatsdb1
+POSTHOOK: Output: tblstatsdb1@TestTable1
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: tblstatsdb1@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: tblstatsdb1@testtable1
+PREHOOK: query: ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: tblstatsdb1@testtable1
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: tblstatsdb1@testtable1
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:tblstatsdb1
+PREHOOK: Output: tblstatsdb1@TESTTABLE2
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:tblstatsdb1
+POSTHOOK: Output: tblstatsdb1@TESTTABLE2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: tblstatsdb1@testtable2
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: tblstatsdb1@testtable2
+PREHOOK: query: ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: tblstatsdb1@testtable2
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: tblstatsdb1@testtable2
+#### A masked pattern was here ####
+PREHOOK: query: DROP TABLE tblstatsdb1.testtable
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: tblstatsdb1@testtable
+PREHOOK: Output: tblstatsdb1@testtable
+POSTHOOK: query: DROP TABLE tblstatsdb1.testtable
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: tblstatsdb1@testtable
+POSTHOOK: Output: tblstatsdb1@testtable
+PREHOOK: query: DROP TABLE tblstatsdb1.TestTable1
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: tblstatsdb1@testtable1
+PREHOOK: Output: tblstatsdb1@testtable1
+POSTHOOK: query: DROP TABLE tblstatsdb1.TestTable1
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: tblstatsdb1@testtable1
+POSTHOOK: Output: tblstatsdb1@testtable1
+PREHOOK: query: DROP TABLE tblstatsdb1.TESTTABLE2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: tblstatsdb1@testtable2
+PREHOOK: Output: tblstatsdb1@testtable2
+POSTHOOK: query: DROP TABLE tblstatsdb1.TESTTABLE2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: tblstatsdb1@testtable2
+POSTHOOK: Output: tblstatsdb1@testtable2
+PREHOOK: query: DROP DATABASE tblstatsdb1
+PREHOOK: type: DROPDATABASE
+PREHOOK: Input: database:tblstatsdb1
+PREHOOK: Output: database:tblstatsdb1
+POSTHOOK: query: DROP DATABASE tblstatsdb1
+POSTHOOK: type: DROPDATABASE
+POSTHOOK: Input: database:tblstatsdb1
+POSTHOOK: Output: database:tblstatsdb1
+PREHOOK: query: CREATE DATABASE IF NOT EXISTS TBLSTATSDB2
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:TBLSTATSDB2
+POSTHOOK: query: CREATE DATABASE IF NOT EXISTS TBLSTATSDB2
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:TBLSTATSDB2
+PREHOOK: query: USE TBLSTATSDB2
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:tblstatsdb2
+POSTHOOK: query: USE TBLSTATSDB2
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:tblstatsdb2
+PREHOOK: query: CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: TBLSTATSDB2@testtable
+PREHOOK: Output: database:tblstatsdb2
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS testtable (key STRING, value STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: TBLSTATSDB2@testtable
+POSTHOOK: Output: database:tblstatsdb2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: tblstatsdb2@testtable
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE testtable
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: tblstatsdb2@testtable
+PREHOOK: query: ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: tblstatsdb2@testtable
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE testtable COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: tblstatsdb2@testtable
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: TBLSTATSDB2@TestTable1
+PREHOOK: Output: database:tblstatsdb2
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS TestTable1 (key STRING, value STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: TBLSTATSDB2@TestTable1
+POSTHOOK: Output: database:tblstatsdb2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: tblstatsdb2@testtable1
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TestTable1
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: tblstatsdb2@testtable1
+PREHOOK: query: ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: tblstatsdb2@testtable1
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TestTable1 COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: tblstatsdb2@testtable1
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: TBLSTATSDB2@TESTTABLE2
+PREHOOK: Output: database:tblstatsdb2
+POSTHOOK: query: CREATE TABLE IF NOT EXISTS TESTTABLE2 (key STRING, value STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: TBLSTATSDB2@TESTTABLE2
+POSTHOOK: Output: database:tblstatsdb2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: tblstatsdb2@testtable2
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv1.txt' OVERWRITE INTO TABLE TESTTABLE2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: tblstatsdb2@testtable2
+PREHOOK: query: ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key
+PREHOOK: type: QUERY
+PREHOOK: Input: tblstatsdb2@testtable2
+#### A masked pattern was here ####
+POSTHOOK: query: ANALYZE TABLE TESTTABLE2 COMPUTE STATISTICS FOR COLUMNS key
+POSTHOOK: type: QUERY
+POSTHOOK: Input: tblstatsdb2@testtable2
+#### A masked pattern was here ####
+PREHOOK: query: DROP TABLE TBLSTATSDB2.testtable
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: tblstatsdb2@testtable
+PREHOOK: Output: tblstatsdb2@testtable
+POSTHOOK: query: DROP TABLE TBLSTATSDB2.testtable
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: tblstatsdb2@testtable
+POSTHOOK: Output: tblstatsdb2@testtable
+PREHOOK: query: DROP TABLE TBLSTATSDB2.TestTable1
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: tblstatsdb2@testtable1
+PREHOOK: Output: tblstatsdb2@testtable1
+POSTHOOK: query: DROP TABLE TBLSTATSDB2.TestTable1
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: tblstatsdb2@testtable1
+POSTHOOK: Output: tblstatsdb2@testtable1
+PREHOOK: query: DROP TABLE TBLSTATSDB2.TESTTABLE2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: tblstatsdb2@testtable2
+PREHOOK: Output: tblstatsdb2@testtable2
+POSTHOOK: query: DROP TABLE TBLSTATSDB2.TESTTABLE2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: tblstatsdb2@testtable2
+POSTHOOK: Output: tblstatsdb2@testtable2
+PREHOOK: query: DROP DATABASE TBLSTATSDB2
+PREHOOK: type: DROPDATABASE
+PREHOOK: Input: database:tblstatsdb2
+PREHOOK: Output: database:tblstatsdb2
+POSTHOOK: query: DROP DATABASE TBLSTATSDB2
+POSTHOOK: type: DROPDATABASE
+POSTHOOK: Input: database:tblstatsdb2
+POSTHOOK: Output: database:tblstatsdb2