Repository: hive Updated Branches: refs/heads/branch-2 0b7e72731 -> 089ff377b
HIVE-16732 Transactional tables should block LOAD DATA (Eugene Koifman, reviewed by Wei Zheng) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/089ff377 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/089ff377 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/089ff377 Branch: refs/heads/branch-2 Commit: 089ff377bb6888f15d14441bee3617c1bb2257ff Parents: 0b7e727 Author: Eugene Koifman <ekoif...@hortonworks.com> Authored: Wed Jul 12 13:57:13 2017 -0700 Committer: Eugene Koifman <ekoif...@hortonworks.com> Committed: Wed Jul 12 13:57:13 2017 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hive/ql/ErrorMsg.java | 2 +- .../hive/ql/parse/LoadSemanticAnalyzer.java | 5 +++ .../clientnegative/load_data_into_acid.q | 22 +++++++++++++ .../clientnegative/load_data_into_acid.q.out | 33 ++++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/089ff377/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java index 6a43385..7087022 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java @@ -381,7 +381,7 @@ public enum ErrorMsg { DBTXNMGR_REQUIRES_CONCURRENCY(10264, "To use DbTxnManager you must set hive.support.concurrency=true"), TXNMGR_NOT_ACID(10265, "This command is not allowed on an ACID table {0}.{1} with a non-ACID transaction manager", true), - + LOAD_DATA_ON_ACID_TABLE(10266, "LOAD DATA... statement is not supported on transactional table {0}.", true), LOCK_NO_SUCH_LOCK(10270, "No record of lock {0} could be found, " + "may have timed out", true), LOCK_REQUEST_UNSUPPORTED(10271, "Current transaction manager does not " + http://git-wip-us.apache.org/repos/asf/hive/blob/089ff377/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java index bda94ff..fa79700 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/LoadSemanticAnalyzer.java @@ -46,6 +46,7 @@ import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hadoop.hive.ql.exec.TaskFactory; import org.apache.hadoop.hive.ql.exec.Utilities; import org.apache.hadoop.hive.ql.hooks.WriteEntity; +import org.apache.hadoop.hive.ql.io.AcidUtils; import org.apache.hadoop.hive.ql.io.HiveFileFormatUtils; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.metadata.HiveException; @@ -56,6 +57,7 @@ import org.apache.hadoop.hive.ql.plan.StatsWork; import org.apache.hadoop.mapred.InputFormat; import com.google.common.collect.Lists; +import org.apache.orc.impl.OrcAcidUtils; /** * LoadSemanticAnalyzer. @@ -226,6 +228,9 @@ public class LoadSemanticAnalyzer extends BaseSemanticAnalyzer { + " and use 'insert... select' to allow Hive to enforce bucketing. " + error); } + if(AcidUtils.isAcidTable(ts.tableHandle)) { + throw new SemanticException(ErrorMsg.LOAD_DATA_ON_ACID_TABLE, ts.tableHandle.getCompleteName()); + } // make sure the arguments make sense List<FileStatus> files = applyConstraintsAndGetFiles(fromURI, fromTree, isLocal); http://git-wip-us.apache.org/repos/asf/hive/blob/089ff377/ql/src/test/queries/clientnegative/load_data_into_acid.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/load_data_into_acid.q b/ql/src/test/queries/clientnegative/load_data_into_acid.q new file mode 100644 index 0000000..fba1496 --- /dev/null +++ b/ql/src/test/queries/clientnegative/load_data_into_acid.q @@ -0,0 +1,22 @@ +set hive.strict.checks.bucketing=false; +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 acid_ivot( + ctinyint TINYINT, + csmallint SMALLINT, + cint INT, + cbigint BIGINT, + cfloat FLOAT, + cdouble DOUBLE, + cstring1 STRING, + cstring2 STRING, + ctimestamp1 TIMESTAMP, + ctimestamp2 TIMESTAMP, + cboolean1 BOOLEAN, + cboolean2 BOOLEAN) clustered by (cint) into 1 buckets stored as orc TBLPROPERTIES ('transactional'='true'); + +LOAD DATA LOCAL INPATH "../../data/files/alltypesorc" into table acid_ivot; + + http://git-wip-us.apache.org/repos/asf/hive/blob/089ff377/ql/src/test/results/clientnegative/load_data_into_acid.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/load_data_into_acid.q.out b/ql/src/test/results/clientnegative/load_data_into_acid.q.out new file mode 100644 index 0000000..cd829ba --- /dev/null +++ b/ql/src/test/results/clientnegative/load_data_into_acid.q.out @@ -0,0 +1,33 @@ +PREHOOK: query: create table acid_ivot( + ctinyint TINYINT, + csmallint SMALLINT, + cint INT, + cbigint BIGINT, + cfloat FLOAT, + cdouble DOUBLE, + cstring1 STRING, + cstring2 STRING, + ctimestamp1 TIMESTAMP, + ctimestamp2 TIMESTAMP, + cboolean1 BOOLEAN, + cboolean2 BOOLEAN) clustered by (cint) into 1 buckets stored as orc TBLPROPERTIES ('transactional'='true') +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@acid_ivot +POSTHOOK: query: create table acid_ivot( + ctinyint TINYINT, + csmallint SMALLINT, + cint INT, + cbigint BIGINT, + cfloat FLOAT, + cdouble DOUBLE, + cstring1 STRING, + cstring2 STRING, + ctimestamp1 TIMESTAMP, + ctimestamp2 TIMESTAMP, + cboolean1 BOOLEAN, + cboolean2 BOOLEAN) clustered by (cint) into 1 buckets stored as orc TBLPROPERTIES ('transactional'='true') +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@acid_ivot +FAILED: SemanticException [Error 10266]: LOAD DATA... statement is not supported on transactional table default@acid_ivot.