You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ke...@apache.org on 2012/03/09 18:31:16 UTC
svn commit: r1298936 - in /hive/trunk:
common/src/java/org/apache/hadoop/hive/conf/
ql/src/java/org/apache/hadoop/hive/ql/parse/
ql/src/test/queries/clientnegative/ ql/src/test/results/clientnegative/
Author: kevinwilfong
Date: Fri Mar 9 17:31:16 2012
New Revision: 1298936
URL: http://svn.apache.org/viewvc?rev=1298936&view=rev
Log:
HIVE-2837. insert into external tables should not be allowed. (namit via kevinwilfong)
Added:
hive/trunk/ql/src/test/queries/clientnegative/insertexternal1.q
hive/trunk/ql/src/test/results/clientnegative/insertexternal1.q.out
Modified:
hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Modified: hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java?rev=1298936&r1=1298935&r2=1298936&view=diff
==============================================================================
--- hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (original)
+++ hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java Fri Mar 9 17:31:16 2012
@@ -572,6 +572,9 @@ public class HiveConf extends Configurat
HIVE_DEFAULT_REGION_NAME("hive.default.region.name", ""),
HIVE_REGION_PROPERTIES("hive.region.properties", ""),
+ // whether insert into external tables is allowed
+ HIVE_INSERT_INTO_EXTERNAL_TABLES("hive.insert.into.external.tables", true),
+
;
public final String varname;
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java?rev=1298936&r1=1298935&r2=1298936&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ErrorMsg.java Fri Mar 9 17:31:16 2012
@@ -119,6 +119,7 @@ public enum ErrorMsg {
+ "table"),
CTAS_MULTI_LOADFILE("CREATE-TABLE-AS-SELECT results in multiple file load"),
CTAS_EXTTBL_COEXISTENCE("CREATE-TABLE-AS-SELECT cannot create external table"),
+ INSERT_EXTERNAL_TABLE("Inserting into a external table is not allowed"),
DATABASE_NOT_EXISTS("Database does not exist:"),
TABLE_ALREADY_EXISTS("Table already exists:", "42S02"),
COLUMN_ALIAS_ALREADY_EXISTS("Column alias already exists:", "42S02"),
@@ -170,10 +171,10 @@ public enum ErrorMsg {
ARCHIVE_ON_TABLE("ARCHIVE can only be run on partitions"),
RESERVED_PART_VAL("Partition value contains a reserved substring"),
HOLD_DDLTIME_ON_NONEXIST_PARTITIONS("HOLD_DDLTIME hint cannot be applied to dynamic " +
- "partitions or non-existent partitions"),
+ "partitions or non-existent partitions"),
OFFLINE_TABLE_OR_PARTITION("Query against an offline table or partition"),
OUTERJOIN_USES_FILTERS("The query results could be wrong. " +
- "Turn on hive.outerjoin.supports.filters"),
+ "Turn on hive.outerjoin.supports.filters"),
NEED_PARTITION_SPECIFICATION("Table is partitioned and partition specification is needed"),
INVALID_METADATA("The metadata file could not be parsed "),
NEED_TABLE_SPECIFICATION("Table name could be determined; It should be specified "),
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1298936&r1=1298935&r2=1298936&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Fri Mar 9 17:31:16 2012
@@ -172,6 +172,7 @@ import org.apache.hadoop.hive.serde2.typ
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
import org.apache.hadoop.mapred.InputFormat;
+import org.apache.hadoop.hive.metastore.TableType;
/**
* Implementation of the semantic analyzer.
@@ -3980,6 +3981,13 @@ public class SemanticAnalyzer extends Ba
dest_tab = qbm.getDestTableForAlias(dest);
+ // Is the user trying to insert into a external tables
+ if ((!conf.getBoolVar(HiveConf.ConfVars.HIVE_INSERT_INTO_EXTERNAL_TABLES)) &&
+ (dest_tab.getTableType().equals(TableType.EXTERNAL_TABLE))) {
+ throw new SemanticException(
+ ErrorMsg.INSERT_EXTERNAL_TABLE.getMsg(dest_tab.getTableName()));
+ }
+
Map<String, String> partSpec = qbm.getPartSpecForAlias(dest);
dest_path = dest_tab.getPath();
@@ -4106,6 +4114,12 @@ public class SemanticAnalyzer extends Ba
dest_part = qbm.getDestPartitionForAlias(dest);
dest_tab = dest_part.getTable();
+ if ((!conf.getBoolVar(HiveConf.ConfVars.HIVE_INSERT_INTO_EXTERNAL_TABLES)) &&
+ dest_tab.getTableType().equals(TableType.EXTERNAL_TABLE)) {
+ throw new SemanticException(
+ ErrorMsg.INSERT_EXTERNAL_TABLE.getMsg(dest_tab.getTableName()));
+ }
+
Path tabPath = dest_tab.getPath();
Path partPath = dest_part.getPartitionPath();
Added: hive/trunk/ql/src/test/queries/clientnegative/insertexternal1.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/insertexternal1.q?rev=1298936&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/insertexternal1.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/insertexternal1.q Fri Mar 9 17:31:16 2012
@@ -0,0 +1,8 @@
+set hive.insert.into.external.tables=false;
+
+
+create external table texternal(key string, val string) partitioned by (insertdate string);
+
+alter table texternal add partition (insertdate='2008-01-01') location 'pfile://${system:test.tmp.dir}/texternal/2008-01-01';
+from src insert overwrite table texternal partition (insertdate='2008-01-01') select *;
+
Added: hive/trunk/ql/src/test/results/clientnegative/insertexternal1.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/insertexternal1.q.out?rev=1298936&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/insertexternal1.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/insertexternal1.q.out Fri Mar 9 17:31:16 2012
@@ -0,0 +1,13 @@
+PREHOOK: query: create external table texternal(key string, val string) partitioned by (insertdate string)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: create external table texternal(key string, val string) partitioned by (insertdate string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@texternal
+#### A masked pattern was here ####
+PREHOOK: type: ALTERTABLE_ADDPARTS
+PREHOOK: Input: default@texternal
+#### A masked pattern was here ####
+POSTHOOK: type: ALTERTABLE_ADDPARTS
+POSTHOOK: Input: default@texternal
+POSTHOOK: Output: default@texternal@insertdate=2008-01-01
+FAILED: Error in semantic analysis: Inserting into a external table is not allowed texternal