diff --git metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index 844e07c..6df55c9 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -120,6 +120,7 @@ import org.apache.hadoop.hive.metastore.api.ShowLocksRequest; import org.apache.hadoop.hive.metastore.api.ShowLocksResponse; import org.apache.hadoop.hive.metastore.api.SkewedInfo; +import org.apache.hadoop.hive.metastore.api.StorageDescriptor; import org.apache.hadoop.hive.metastore.api.Table; import org.apache.hadoop.hive.metastore.api.TableStatsRequest; import org.apache.hadoop.hive.metastore.api.TableStatsResult; @@ -2158,46 +2159,59 @@ public Partition exchange_partition(Map partitionSpecs, boolean pathCreated = false; RawStore ms = getMS(); ms.openTransaction(); - Table destinationTable = ms.getTable(destDbName, destTableName); + Table destTable = ms.getTable(destDbName, destTableName); Table sourceTable = ms.getTable(sourceDbName, sourceTableName); - List partVals = MetaStoreUtils.getPvals(sourceTable.getPartitionKeys(), - partitionSpecs); - List partValsPresent = new ArrayList (); - List partitionKeysPresent = new ArrayList (); - int i = 0; - for (FieldSchema fs: sourceTable.getPartitionKeys()) { - String partVal = partVals.get(i); - if (partVal != null && !partVal.equals("")) { - partValsPresent.add(partVal); - partitionKeysPresent.add(fs); - } - i++; - } - List partitionsToExchange = get_partitions_ps(sourceDbName, sourceTableName, - partVals, (short)-1); + + List dPartKeys = destTable.getPartitionKeys(); + List sPartKeys = sourceTable.getPartitionKeys(); + + List sPartVals = MetaStoreUtils.getPvals(sPartKeys, partitionSpecs); + List dPartVals = MetaStoreUtils.getPvals(dPartKeys, partitionSpecs); + + boolean tableSourced = sPartKeys.isEmpty(); + + List partitionsToExchange = Collections.emptyList(); + if (!tableSourced) { + partitionsToExchange = get_partitions_ps(sourceDbName, sourceTableName, sPartVals, (short) -1); + } + + int offset = dPartKeys.size() - sPartKeys.size(); boolean sameColumns = MetaStoreUtils.compareFieldColumns( - sourceTable.getSd().getCols(), destinationTable.getSd().getCols()); - boolean samePartitions = MetaStoreUtils.compareFieldColumns( - sourceTable.getPartitionKeys(), destinationTable.getPartitionKeys()); + sourceTable.getSd().getCols(), destTable.getSd().getCols()); + boolean samePartitions = MetaStoreUtils.compareLastFieldColumns(dPartKeys, sPartKeys, offset); if (!sameColumns || !samePartitions) { throw new MetaException("The tables have different schemas." + " Their partitions cannot be exchanged."); } - Path sourcePath = new Path(sourceTable.getSd().getLocation(), - Warehouse.makePartName(partitionKeysPresent, partValsPresent)); - Path destPath = new Path(destinationTable.getSd().getLocation(), - Warehouse.makePartName(partitionKeysPresent, partValsPresent)); + Path sourcePath = toPartitionPath(sourceTable, sPartVals); + Path destPath = toPartitionPath(destTable, dPartVals); try { for (Partition partition: partitionsToExchange) { Partition destPartition = new Partition(partition); destPartition.setDbName(destDbName); - destPartition.setTableName(destinationTable.getTableName()); - Path destPartitionPath = new Path(destinationTable.getSd().getLocation(), - Warehouse.makePartName(destinationTable.getPartitionKeys(), partition.getValues())); + destPartition.setTableName(destTable.getTableName()); + destPartition.getValues().addAll(0, dPartVals.subList(0, offset)); + + List values = partition.getValues(); + Path destPartitionPath = new Path(destPath, Warehouse.makePartName(sPartKeys, values)); destPartition.getSd().setLocation(destPartitionPath.toString()); ms.addPartition(destPartition); - ms.dropPartition(partition.getDbName(), sourceTable.getTableName(), - partition.getValues()); + ms.dropPartition(partition.getDbName(), sourceTable.getTableName(), values); + } + if (tableSourced) { + Partition destPartition = new Partition(); + destPartition.setDbName(destDbName); + destPartition.setTableName(destTableName); + destPartition.setSd(new StorageDescriptor(destTable.getSd())); + destPartition.setParameters(new HashMap(destTable.getParameters())); + if (destTable.isSetPrivileges()) { + destPartition.setPrivileges(destTable.getPrivileges()); + } + destPartition.setValues(dPartVals); + Path destPartitionPath = new Path(destPath, Warehouse.makePartName(dPartKeys, dPartVals)); + destPartition.getSd().setLocation(destPartitionPath.toString()); + ms.addPartition(destPartition); + // should drop source table? } /** * TODO: Use the hard link feature of hdfs @@ -2216,6 +2230,25 @@ public Partition exchange_partition(Map partitionSpecs, return new Partition(); } + private Path toPartitionPath(Table table, List partValues) throws MetaException { + List trimmed = trimPartValues(partValues); + Path tablePath = new Path(table.getSd().getLocation()); + if (!trimmed.isEmpty()) { + List partCols = table.getPartitionKeys().subList(0, trimmed.size()); + tablePath = new Path(tablePath, Warehouse.makePartName(partCols, trimmed)); + } + return tablePath; + } + + private List trimPartValues(List partVals) { + for (int i = partVals.size() - 1; i >= 0; i--) { + if (!partVals.get(i).isEmpty()) { + return i == partVals.size() - 1 ? partVals : partVals.subList(0, i + 1); + } + } + return Collections.emptyList(); + } + private boolean drop_partition_common(RawStore ms, String db_name, String tbl_name, List part_vals, final boolean deleteData, final EnvironmentContext envContext) throws MetaException, NoSuchObjectException, IOException, InvalidObjectException, diff --git metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java index 1bbe02e..d58bdce 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java @@ -1431,6 +1431,14 @@ public static boolean partitionNameHasValidCharacters(List partVals, return getPartitionValWithInvalidCharacter(partVals, partitionValidationPattern) == null; } + public static boolean compareLastFieldColumns( + List bigger, List smaller, int offset) { + if (offset != 0) { + bigger = bigger.subList(offset, bigger.size()); + } + return compareFieldColumns(bigger, smaller); + } + /** * @param schema1: The first schema to be compared * @param schema2: The second schema to be compared diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 117295a..9cdcdaf 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -641,35 +641,37 @@ private void analyzeExchangePartition(ASTNode ast) throws SemanticException { Table destTable = getTable(getUnescapedName((ASTNode)ast.getChild(0))); Table sourceTable = getTable(getUnescapedName((ASTNode)ast.getChild(2))); + if (!MetaStoreUtils.compareFieldColumns(destTable.getCols(), sourceTable.getCols())) { + throw new SemanticException(ErrorMsg.TABLES_INCOMPATIBLE_SCHEMAS.getMsg()); + } // Get the partition specs Map partSpecs = getPartSpec((ASTNode) ast.getChild(1)); validatePartitionValues(partSpecs); - boolean sameColumns = MetaStoreUtils.compareFieldColumns( - destTable.getAllCols(), sourceTable.getAllCols()); - boolean samePartitions = MetaStoreUtils.compareFieldColumns( - destTable.getPartitionKeys(), sourceTable.getPartitionKeys()); - if (!sameColumns || !samePartitions) { + + List dPartKeys = destTable.getPartitionKeys(); + List sPartKeys = sourceTable.getPartitionKeys(); + + int counter = isPartitionValueContinuous(dPartKeys, partSpecs); + if (counter < 0) { + throw new SemanticException( + ErrorMsg.PARTITION_VALUE_NOT_CONTINUOUS.getMsg(partSpecs.toString())); + } + + int offset = dPartKeys.size() - sPartKeys.size(); + if (!MetaStoreUtils.compareLastFieldColumns(dPartKeys, sPartKeys, offset)) { throw new SemanticException(ErrorMsg.TABLES_INCOMPATIBLE_SCHEMAS.getMsg()); } + // check if source partition exists - getPartitions(sourceTable, partSpecs, true); + if (sourceTable.isPartitioned()) { + getPartitions(sourceTable, partSpecs, true); + } // Verify that the partitions specified are continuous // If a subpartition value is specified without specifying a partition's value // then we throw an exception - int counter = isPartitionValueContinuous(sourceTable.getPartitionKeys(), partSpecs); - if (counter < 0) { - throw new SemanticException( - ErrorMsg.PARTITION_VALUE_NOT_CONTINUOUS.getMsg(partSpecs.toString())); - } - List destPartitions = null; - try { - destPartitions = getPartitions(destTable, partSpecs, true); - } catch (SemanticException ex) { - // We should expect a semantic exception being throw as this partition - // should not be present. - } - if (destPartitions != null) { + List destPartitions = getPartitions(destTable, partSpecs, false); + if (destPartitions != null && !destPartitions.isEmpty()) { // If any destination partition is present then throw a Semantic Exception. throw new SemanticException(ErrorMsg.PARTITION_EXISTS.getMsg(destPartitions.toString())); } diff --git ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match1.q ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match1.q new file mode 100644 index 0000000..8c8c98f --- /dev/null +++ ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match1.q @@ -0,0 +1,18 @@ +CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING); +CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING); + +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20'); + +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='20'); +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='20'); + +-- already exists +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='B', hr='2') WITH TABLE exchange_part_test2; + +SHOW PARTITIONS exchange_part_test1; +SHOW PARTITIONS exchange_part_test2; diff --git ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match2.q ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match2.q new file mode 100644 index 0000000..d053675 --- /dev/null +++ ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match2.q @@ -0,0 +1,11 @@ +CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING); +CREATE TABLE exchange_part_test2 (f1 string); + +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2'); + +-- cannot make full partition spec for destination table +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A') WITH TABLE exchange_part_test2; + +SHOW PARTITIONS exchange_part_test1; +SHOW PARTITIONS exchange_part_test2; diff --git ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match3.q ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match3.q new file mode 100644 index 0000000..5791041 --- /dev/null +++ ql/src/test/queries/clientnegative/exchange_partition_neg_partial_match3.q @@ -0,0 +1,18 @@ +CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING); +CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING); + +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20'); + +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='20'); +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='20'); + +-- cannot make full partition spec for destination table +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A') WITH TABLE exchange_part_test2; + +SHOW PARTITIONS exchange_part_test1; +SHOW PARTITIONS exchange_part_test2; diff --git ql/src/test/queries/clientpositive/exchange_partition_partial_match1.q ql/src/test/queries/clientpositive/exchange_partition_partial_match1.q new file mode 100644 index 0000000..b590de8 --- /dev/null +++ ql/src/test/queries/clientpositive/exchange_partition_partial_match1.q @@ -0,0 +1,10 @@ +CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING); +CREATE TABLE exchange_part_test2 (f1 string); + +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2'); + +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='1') WITH TABLE exchange_part_test2; + +SHOW PARTITIONS exchange_part_test1; +DESC exchange_part_test2; diff --git ql/src/test/queries/clientpositive/exchange_partition_partial_match2.q ql/src/test/queries/clientpositive/exchange_partition_partial_match2.q new file mode 100644 index 0000000..90cb90a --- /dev/null +++ ql/src/test/queries/clientpositive/exchange_partition_partial_match2.q @@ -0,0 +1,15 @@ +CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING); +CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (mn STRING); + +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20'); + +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (mn='20'); + +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='3') WITH TABLE exchange_part_test2; + +SHOW PARTITIONS exchange_part_test1; +SHOW PARTITIONS exchange_part_test2; diff --git ql/src/test/queries/clientpositive/exchange_partition_partial_match3.q ql/src/test/queries/clientpositive/exchange_partition_partial_match3.q new file mode 100644 index 0000000..40a8484 --- /dev/null +++ ql/src/test/queries/clientpositive/exchange_partition_partial_match3.q @@ -0,0 +1,17 @@ +CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING); +CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING); + +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20'); + +ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='20'); +ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='20'); + +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A') WITH TABLE exchange_part_test2; + +SHOW PARTITIONS exchange_part_test1; +SHOW PARTITIONS exchange_part_test2; diff --git ql/src/test/queries/clientpositive/exchange_partition_partial_match4.q ql/src/test/queries/clientpositive/exchange_partition_partial_match4.q new file mode 100644 index 0000000..e28b7ee --- /dev/null +++ ql/src/test/queries/clientpositive/exchange_partition_partial_match4.q @@ -0,0 +1,17 @@ +CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING); +CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING); + +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10'); +ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20'); + +ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='20'); +ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='10'); +ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='20'); + +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='1') WITH TABLE exchange_part_test2; + +SHOW PARTITIONS exchange_part_test1; +SHOW PARTITIONS exchange_part_test2; diff --git ql/src/test/results/clientnegative/exchange_partition_neg_partial_match1.q.out ql/src/test/results/clientnegative/exchange_partition_neg_partial_match1.q.out new file mode 100644 index 0000000..14f89f2 --- /dev/null +++ ql/src/test/results/clientnegative/exchange_partition_neg_partial_match1.q.out @@ -0,0 +1,43 @@ +PREHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test1 +PREHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test2 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=20 +FAILED: SemanticException partition spec {mn=10} doesn't contain all (2) partition columns diff --git ql/src/test/results/clientnegative/exchange_partition_neg_partial_match2.q.out ql/src/test/results/clientnegative/exchange_partition_neg_partial_match2.q.out new file mode 100644 index 0000000..b24f248 --- /dev/null +++ ql/src/test/results/clientnegative/exchange_partition_neg_partial_match2.q.out @@ -0,0 +1,44 @@ +PREHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test1 +PREHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test2 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2 +PREHOOK: query: -- cannot make full partition spec for destination table +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A') WITH TABLE exchange_part_test2 +PREHOOK: type: null +POSTHOOK: query: -- cannot make full partition spec for destination table +ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A') WITH TABLE exchange_part_test2 +POSTHOOK: type: null +PREHOOK: query: SHOW PARTITIONS exchange_part_test1 +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: SHOW PARTITIONS exchange_part_test1 +POSTHOOK: type: SHOWPARTITIONS +ds=A/hr=__HIVE_DEFAULT_PARTITION__ +ds=B/hr=1 +ds=B/hr=2 +PREHOOK: query: SHOW PARTITIONS exchange_part_test2 +PREHOOK: type: SHOWPARTITIONS +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Table exchange_part_test2 is not a partitioned table diff --git ql/src/test/results/clientnegative/exchange_partition_neg_partial_match3.q.out ql/src/test/results/clientnegative/exchange_partition_neg_partial_match3.q.out new file mode 100644 index 0000000..14f89f2 --- /dev/null +++ ql/src/test/results/clientnegative/exchange_partition_neg_partial_match3.q.out @@ -0,0 +1,43 @@ +PREHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test1 +PREHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test2 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=20 +FAILED: SemanticException partition spec {mn=10} doesn't contain all (2) partition columns diff --git ql/src/test/results/clientpositive/exchange_partition_partial_match1.q.out ql/src/test/results/clientpositive/exchange_partition_partial_match1.q.out new file mode 100644 index 0000000..582d610 --- /dev/null +++ ql/src/test/results/clientpositive/exchange_partition_partial_match1.q.out @@ -0,0 +1,44 @@ +PREHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test1 +PREHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test2 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2 +PREHOOK: query: ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='1') WITH TABLE exchange_part_test2 +PREHOOK: type: null +POSTHOOK: query: ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='1') WITH TABLE exchange_part_test2 +POSTHOOK: type: null +PREHOOK: query: SHOW PARTITIONS exchange_part_test1 +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: SHOW PARTITIONS exchange_part_test1 +POSTHOOK: type: SHOWPARTITIONS +ds=A/hr=1 +ds=B/hr=1 +ds=B/hr=2 +PREHOOK: query: DESC exchange_part_test2 +PREHOOK: type: DESCTABLE +POSTHOOK: query: DESC exchange_part_test2 +POSTHOOK: type: DESCTABLE +f1 string diff --git ql/src/test/results/clientpositive/exchange_partition_partial_match2.q.out ql/src/test/results/clientpositive/exchange_partition_partial_match2.q.out new file mode 100644 index 0000000..2dfb9bc --- /dev/null +++ ql/src/test/results/clientpositive/exchange_partition_partial_match2.q.out @@ -0,0 +1,74 @@ +PREHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test1 +PREHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test2 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='3') WITH TABLE exchange_part_test2 +PREHOOK: type: null +POSTHOOK: query: ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='3') WITH TABLE exchange_part_test2 +POSTHOOK: type: null +PREHOOK: query: SHOW PARTITIONS exchange_part_test1 +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: SHOW PARTITIONS exchange_part_test1 +POSTHOOK: type: SHOWPARTITIONS +ds=A/hr=3/mn=10 +ds=A/hr=3/mn=20 +ds=B/hr=1/mn=10 +ds=B/hr=1/mn=20 +ds=B/hr=2/mn=10 +ds=B/hr=2/mn=20 +PREHOOK: query: SHOW PARTITIONS exchange_part_test2 +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: SHOW PARTITIONS exchange_part_test2 +POSTHOOK: type: SHOWPARTITIONS diff --git ql/src/test/results/clientpositive/exchange_partition_partial_match3.q.out ql/src/test/results/clientpositive/exchange_partition_partial_match3.q.out new file mode 100644 index 0000000..1dbc4af --- /dev/null +++ ql/src/test/results/clientpositive/exchange_partition_partial_match3.q.out @@ -0,0 +1,90 @@ +PREHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test1 +PREHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test2 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@hr=1/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@hr=1/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@hr=2/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@hr=2/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A') WITH TABLE exchange_part_test2 +PREHOOK: type: null +POSTHOOK: query: ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A') WITH TABLE exchange_part_test2 +POSTHOOK: type: null +PREHOOK: query: SHOW PARTITIONS exchange_part_test1 +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: SHOW PARTITIONS exchange_part_test1 +POSTHOOK: type: SHOWPARTITIONS +ds=A/hr=1/mn=10 +ds=A/hr=1/mn=20 +ds=A/hr=2/mn=10 +ds=A/hr=2/mn=20 +ds=B/hr=1/mn=10 +ds=B/hr=1/mn=20 +ds=B/hr=2/mn=10 +ds=B/hr=2/mn=20 +PREHOOK: query: SHOW PARTITIONS exchange_part_test2 +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: SHOW PARTITIONS exchange_part_test2 +POSTHOOK: type: SHOWPARTITIONS diff --git ql/src/test/results/clientpositive/exchange_partition_partial_match4.q.out ql/src/test/results/clientpositive/exchange_partition_partial_match4.q.out new file mode 100644 index 0000000..2629c29 --- /dev/null +++ ql/src/test/results/clientpositive/exchange_partition_partial_match4.q.out @@ -0,0 +1,90 @@ +PREHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test1 (f1 string) PARTITIONED BY (ds STRING, hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test1 +PREHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +POSTHOOK: query: CREATE TABLE exchange_part_test2 (f1 string) PARTITIONED BY (hr STRING, mn STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exchange_part_test2 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='1', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=1/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test1 +POSTHOOK: query: ALTER TABLE exchange_part_test1 ADD PARTITION (ds='B', hr='2', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test1 +POSTHOOK: Output: default@exchange_part_test1@ds=B/hr=2/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@hr=1/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='1', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@hr=1/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='10') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='10') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@hr=2/mn=10 +PREHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='20') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@exchange_part_test2 +POSTHOOK: query: ALTER TABLE exchange_part_test2 ADD PARTITION (hr='2', mn='20') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@exchange_part_test2 +POSTHOOK: Output: default@exchange_part_test2@hr=2/mn=20 +PREHOOK: query: ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='1') WITH TABLE exchange_part_test2 +PREHOOK: type: null +POSTHOOK: query: ALTER TABLE exchange_part_test1 EXCHANGE PARTITION (ds='A', hr='1') WITH TABLE exchange_part_test2 +POSTHOOK: type: null +PREHOOK: query: SHOW PARTITIONS exchange_part_test1 +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: SHOW PARTITIONS exchange_part_test1 +POSTHOOK: type: SHOWPARTITIONS +ds=A/hr=1/mn=10 +ds=A/hr=1/mn=20 +ds=B/hr=1/mn=10 +ds=B/hr=1/mn=20 +ds=B/hr=2/mn=10 +ds=B/hr=2/mn=20 +PREHOOK: query: SHOW PARTITIONS exchange_part_test2 +PREHOOK: type: SHOWPARTITIONS +POSTHOOK: query: SHOW PARTITIONS exchange_part_test2 +POSTHOOK: type: SHOWPARTITIONS +hr=2/mn=10 +hr=2/mn=20