diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java index 58c3ae1..7520417 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java @@ -5153,7 +5153,7 @@ private int createView(Hive db, CreateViewDesc crtView) throws HiveException { } } - if (!crtView.isReplace()) { + if (!crtView.isReplace() && !crtView.getIfNotExists()) { // View already exists, thus we should be replacing throw new HiveException(ErrorMsg.TABLE_ALREADY_EXISTS.getMsg(crtView.getViewName())); } diff --git a/ql/src/test/queries/clientpositive/create_view.q b/ql/src/test/queries/clientpositive/create_view.q index dce2866..3fe14f4 100644 --- a/ql/src/test/queries/clientpositive/create_view.q +++ b/ql/src/test/queries/clientpositive/create_view.q @@ -237,6 +237,8 @@ select * from view17; create view view18 as select v+1 from (select 1 as v) t; select * from view18; +-- create view if not exists +create view if not exists view18 as select v+1 from (select 1 as v) t; DROP VIEW view1; DROP VIEW view2; diff --git a/ql/src/test/results/clientpositive/create_view.q.out b/ql/src/test/results/clientpositive/create_view.q.out index d2c516f..99d1543 100644 --- a/ql/src/test/results/clientpositive/create_view.q.out +++ b/ql/src/test/results/clientpositive/create_view.q.out @@ -1604,6 +1604,16 @@ POSTHOOK: Input: _dummy_database@_dummy_table POSTHOOK: Input: default@view18 #### A masked pattern was here #### 2 +PREHOOK: query: create view if not exists view18 as select v+1 from (select 1 as v) t +PREHOOK: type: CREATEVIEW +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: database:default +PREHOOK: Output: default@view18 +POSTHOOK: query: create view if not exists view18 as select v+1 from (select 1 as v) t +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: database:default +POSTHOOK: Output: default@view18 PREHOOK: query: DROP VIEW view1 PREHOOK: type: DROPVIEW PREHOOK: Input: default@view1