diff --git ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java index f0cc3a2..f091f67 100644 --- ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java +++ ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java @@ -397,6 +397,7 @@ TOO_MANY_COMPACTION_PARTITIONS(10284, "Compaction can only be requested on one partition at a " + "time."), DISTINCT_NOT_SUPPORTED(10285, "Distinct keyword is not support in current context"), + NONACID_COMPACTION_NOT_SUPPORTED(10286, "Compaction is not allowed on non-ACID table {0}.{1}", true), UPDATEDELETE_PARSE_ERROR(10290, "Encountered parse error while parsing rewritten update or " + "delete query"), diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java index 70afe16..4dea701 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java @@ -1744,6 +1744,10 @@ private void msckAddPartitionsOneByOne(Hive db, Table table, private int compact(Hive db, AlterTableSimpleDesc desc) throws HiveException { Table tbl = db.getTable(desc.getTableName()); + if (!AcidUtils.isAcidTable(tbl)) { + throw new HiveException(ErrorMsg.NONACID_COMPACTION_NOT_SUPPORTED, tbl.getDbName(), + tbl.getTableName()); + } String partName = null; if (desc.getPartSpec() == null) { diff --git ql/src/test/queries/clientnegative/compact_non_acid_table.q ql/src/test/queries/clientnegative/compact_non_acid_table.q new file mode 100644 index 0000000..e9faa24 --- /dev/null +++ ql/src/test/queries/clientnegative/compact_non_acid_table.q @@ -0,0 +1,11 @@ +set hive.mapred.mode=nonstrict; +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; +set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; + + +create table not_an_acid_table (a int, b varchar(128)); + +alter table not_an_acid_table compact 'major'; + +drop table not_an_acid_table; \ No newline at end of file diff --git ql/src/test/results/clientnegative/compact_non_acid_table.q.out ql/src/test/results/clientnegative/compact_non_acid_table.q.out new file mode 100644 index 0000000..eab9e19 --- /dev/null +++ ql/src/test/results/clientnegative/compact_non_acid_table.q.out @@ -0,0 +1,11 @@ +PREHOOK: query: create table not_an_acid_table (a int, b varchar(128)) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@not_an_acid_table +POSTHOOK: query: create table not_an_acid_table (a int, b varchar(128)) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@not_an_acid_table +PREHOOK: query: alter table not_an_acid_table compact 'major' +PREHOOK: type: ALTERTABLE_COMPACT +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Compaction is not allowed on non-ACID table default.not_an_acid_table