Repository: hive
Updated Branches:
  refs/heads/master 723768513 -> aef22bf4e


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/aef22bf4
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/aef22bf4
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/aef22bf4

Branch: refs/heads/master
Commit: aef22bf4eb4336ba25b1505dd37c92e5a20dfb83
Parents: 7237685
Author: Eugene Koifman <ekoif...@hortonworks.com>
Authored: Tue Jul 11 10:01:47 2017 -0700
Committer: Eugene Koifman <ekoif...@hortonworks.com>
Committed: Tue Jul 11 10:01:47 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/aef22bf4/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 226ba18..2de4c7a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
@@ -382,7 +382,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/aef22bf4/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/aef22bf4/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/aef22bf4/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.

Reply via email to