You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by mg...@apache.org on 2020/06/16 07:47:33 UTC

[hive] branch master updated: HIVE-21952 : Allow unsetting of serde properties (Miklos Gergely, reviewed by David Mollitor)

This is an automated email from the ASF dual-hosted git repository.

mgergely pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 8208df9  HIVE-21952 : Allow unsetting of serde properties (Miklos Gergely, reviewed by David Mollitor)
8208df9 is described below

commit 8208df93b465bfa829052fd042a43d89bab86c31
Author: Miklos Gergely <mg...@cloudera.com>
AuthorDate: Tue Jun 16 09:45:33 2020 +0200

    HIVE-21952 : Allow unsetting of serde properties (Miklos Gergely, reviewed by David Mollitor)
---
 .../cli/SemanticAnalysis/HCatSemanticAnalyzer.java |   6 +-
 .../org/apache/hadoop/hive/ql/parse/HiveParser.g   |  15 ++-
 .../serde/AlterTableSetSerdePropsAnalyzer.java     |   2 +-
 ...java => AlterTableUnsetSerdePropsAnalyzer.java} |  10 +-
 .../serde/AlterTableUnsetSerdePropsDesc.java       |  46 +++++++
 .../serde/AlterTableUnsetSerdePropsOperation.java  |  43 +++++++
 .../apache/hadoop/hive/ql/plan/HiveOperation.java  |   6 +-
 ql/src/test/queries/clientpositive/table_storage.q |  14 +++
 .../clientpositive/llap/table_storage.q.out        | 137 +++++++++++++++++++++
 9 files changed, 264 insertions(+), 15 deletions(-)

diff --git a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/SemanticAnalysis/HCatSemanticAnalyzer.java b/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/SemanticAnalysis/HCatSemanticAnalyzer.java
index cd54e28..941f6b8 100644
--- a/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/SemanticAnalysis/HCatSemanticAnalyzer.java
+++ b/hcatalog/core/src/main/java/org/apache/hive/hcatalog/cli/SemanticAnalysis/HCatSemanticAnalyzer.java
@@ -127,7 +127,8 @@ public class HCatSemanticAnalyzer extends HCatSemanticAnalyzerBase {
     case HiveParser.TOK_ALTERTABLE_ADDPARTS:
     case HiveParser.TOK_ALTERTABLE_ADDCOLS:
     case HiveParser.TOK_ALTERTABLE_CHANGECOL_AFTER_POSITION:
-    case HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES:
+    case HiveParser.TOK_ALTERTABLE_SETSERDEPROPERTIES:
+    case HiveParser.TOK_ALTERTABLE_UNSETSERDEPROPERTIES:
     case HiveParser.TOK_ALTERTABLE_CLUSTER_SORT:
     case HiveParser.TOK_ALTERTABLE_DROPPARTS:
     case HiveParser.TOK_ALTERTABLE_PROPERTIES:
@@ -212,7 +213,8 @@ public class HCatSemanticAnalyzer extends HCatSemanticAnalyzerBase {
           case HiveParser.TOK_ALTERTABLE_ADDPARTS:
           case HiveParser.TOK_ALTERTABLE_ADDCOLS:
           case HiveParser.TOK_ALTERTABLE_CHANGECOL_AFTER_POSITION:
-          case HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES:
+          case HiveParser.TOK_ALTERTABLE_SETSERDEPROPERTIES:
+          case HiveParser.TOK_ALTERTABLE_UNSETSERDEPROPERTIES:
           case HiveParser.TOK_ALTERTABLE_CLUSTER_SORT:
           case HiveParser.TOK_ALTERTABLE_DROPPARTS:
           case HiveParser.TOK_ALTERTABLE_PROPERTIES:
diff --git a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
index 768a3a1..0f9caae 100644
--- a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
@@ -172,8 +172,10 @@ TOK_ALTERPARTITION_MERGEFILES;
 TOK_ALTERTABLE_TOUCH;
 TOK_ALTERTABLE_ARCHIVE;
 TOK_ALTERTABLE_UNARCHIVE;
-TOK_ALTERTABLE_SERDEPROPERTIES;
-TOK_ALTERPARTITION_SERDEPROPERTIES;
+TOK_ALTERTABLE_SETSERDEPROPERTIES;
+TOK_ALTERPARTITION_SETSERDEPROPERTIES;
+TOK_ALTERTABLE_UNSETSERDEPROPERTIES;
+TOK_ALTERPARTITION_UNSETSERDEPROPERTIES;
 TOK_ALTERTABLE_SERIALIZER;
 TOK_ALTERPARTITION_SERIALIZER;
 TOK_ALTERTABLE_UPDATECOLSTATS;
@@ -1452,14 +1454,17 @@ alterViewSuffixProperties
     ;
 
 alterStatementSuffixSerdeProperties[boolean partition]
-@init { pushMsg("alter serdes statement", state); }
+@init { pushMsg("alter serde statement", state); }
 @after { popMsg(state); }
     : KW_SET KW_SERDE serdeName=StringLiteral (KW_WITH KW_SERDEPROPERTIES tableProperties)?
     -> {partition}? ^(TOK_ALTERPARTITION_SERIALIZER $serdeName tableProperties?)
     ->              ^(TOK_ALTERTABLE_SERIALIZER $serdeName tableProperties?)
     | KW_SET KW_SERDEPROPERTIES tableProperties
-    -> {partition}? ^(TOK_ALTERPARTITION_SERDEPROPERTIES tableProperties)
-    ->              ^(TOK_ALTERTABLE_SERDEPROPERTIES tableProperties)
+    -> {partition}? ^(TOK_ALTERPARTITION_SETSERDEPROPERTIES tableProperties)
+    ->              ^(TOK_ALTERTABLE_SETSERDEPROPERTIES tableProperties)
+    | KW_UNSET KW_SERDEPROPERTIES tableProperties
+    -> {partition}? ^(TOK_ALTERPARTITION_UNSETSERDEPROPERTIES tableProperties)
+    ->              ^(TOK_ALTERTABLE_UNSETSERDEPROPERTIES tableProperties)
     ;
 
 tablePartitionPrefix
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableSetSerdePropsAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableSetSerdePropsAnalyzer.java
index 2be5dc6..16453e1 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableSetSerdePropsAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableSetSerdePropsAnalyzer.java
@@ -34,7 +34,7 @@ import org.apache.hadoop.hive.ql.parse.SemanticException;
 /**
  * Analyzer for set serde properties commands.
  */
-@DDLType(types = {HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES, HiveParser.TOK_ALTERPARTITION_SERDEPROPERTIES})
+@DDLType(types = {HiveParser.TOK_ALTERTABLE_SETSERDEPROPERTIES, HiveParser.TOK_ALTERPARTITION_SETSERDEPROPERTIES})
 public class AlterTableSetSerdePropsAnalyzer extends AbstractAlterTableAnalyzer {
   public AlterTableSetSerdePropsAnalyzer(QueryState queryState) throws SemanticException {
     super(queryState);
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableSetSerdePropsAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsAnalyzer.java
similarity index 80%
copy from ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableSetSerdePropsAnalyzer.java
copy to ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsAnalyzer.java
index 2be5dc6..d4071db 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableSetSerdePropsAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsAnalyzer.java
@@ -32,11 +32,11 @@ import org.apache.hadoop.hive.ql.parse.HiveParser;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
 
 /**
- * Analyzer for set serde properties commands.
+ * Analyzer for unset serde properties commands.
  */
-@DDLType(types = {HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES, HiveParser.TOK_ALTERPARTITION_SERDEPROPERTIES})
-public class AlterTableSetSerdePropsAnalyzer extends AbstractAlterTableAnalyzer {
-  public AlterTableSetSerdePropsAnalyzer(QueryState queryState) throws SemanticException {
+@DDLType(types = {HiveParser.TOK_ALTERTABLE_UNSETSERDEPROPERTIES, HiveParser.TOK_ALTERPARTITION_UNSETSERDEPROPERTIES})
+public class AlterTableUnsetSerdePropsAnalyzer extends AbstractAlterTableAnalyzer {
+  public AlterTableUnsetSerdePropsAnalyzer(QueryState queryState) throws SemanticException {
     super(queryState);
   }
 
@@ -45,7 +45,7 @@ public class AlterTableSetSerdePropsAnalyzer extends AbstractAlterTableAnalyzer
       throws SemanticException {
     Map<String, String> props = getProps((ASTNode) (command.getChild(0)).getChild(0));
 
-    AlterTableSetSerdePropsDesc desc = new AlterTableSetSerdePropsDesc(tableName, partitionSpec, props);
+    AlterTableUnsetSerdePropsDesc desc = new AlterTableUnsetSerdePropsDesc(tableName, partitionSpec, props);
     addInputsOutputsAlterTable(tableName, partitionSpec, desc, AlterTableType.SET_SERDE_PROPS, false);
     rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), desc)));
   }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsDesc.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsDesc.java
new file mode 100644
index 0000000..6eb4418
--- /dev/null
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsDesc.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.ddl.table.storage.serde;
+
+import java.util.Map;
+
+import org.apache.hadoop.hive.common.TableName;
+import org.apache.hadoop.hive.ql.ddl.table.AbstractAlterTableDesc;
+import org.apache.hadoop.hive.ql.ddl.table.AlterTableType;
+import org.apache.hadoop.hive.ql.parse.SemanticException;
+import org.apache.hadoop.hive.ql.plan.Explain;
+import org.apache.hadoop.hive.ql.plan.Explain.Level;
+
+/**
+ * DDL task description for ALTER TABLE ... UNSET SERDEPROPERTIES ... commands.
+ */
+@Explain(displayName = "Unset Serde Props", explainLevels = { Level.USER, Level.DEFAULT, Level.EXTENDED })
+public class AlterTableUnsetSerdePropsDesc extends AbstractAlterTableDesc {
+  private static final long serialVersionUID = 1L;
+
+  public AlterTableUnsetSerdePropsDesc(TableName tableName, Map<String, String> partitionSpec,
+      Map<String, String> props) throws SemanticException {
+    super(AlterTableType.SET_SERDE_PROPS, tableName, partitionSpec, null, false, false, props);
+  }
+
+  @Override
+  public boolean mayNeedWriteId() {
+    return false;
+  }
+}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsOperation.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsOperation.java
new file mode 100644
index 0000000..aa6775f
--- /dev/null
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/serde/AlterTableUnsetSerdePropsOperation.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.ddl.table.storage.serde;
+
+import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
+import org.apache.hadoop.hive.ql.ddl.DDLOperationContext;
+import org.apache.hadoop.hive.ql.ddl.table.AbstractAlterTableOperation;
+import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.metadata.Partition;
+import org.apache.hadoop.hive.ql.metadata.Table;
+
+/**
+ * Operation process of unsetting serde properties.
+ */
+public class AlterTableUnsetSerdePropsOperation extends AbstractAlterTableOperation<AlterTableUnsetSerdePropsDesc> {
+  public AlterTableUnsetSerdePropsOperation(DDLOperationContext context, AlterTableUnsetSerdePropsDesc desc) {
+    super(context, desc);
+  }
+
+  @Override
+  protected void doAlteration(Table table, Partition partition) throws HiveException {
+    StorageDescriptor sd = getStorageDescriptor(table, partition);
+    for (String key : desc.getProps().keySet()) {
+      sd.getSerdeInfo().getParameters().remove(key);
+    }
+  }
+}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java b/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java
index c75829c..503f731 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java
@@ -77,9 +77,11 @@ public enum HiveOperation {
       new Privilege[]{Privilege.ALTER_METADATA}, null),
   ALTERPARTITION_SERIALIZER("ALTERPARTITION_SERIALIZER", HiveParser.TOK_ALTERPARTITION_SERIALIZER,
       new Privilege[]{Privilege.ALTER_METADATA}, null),
-  ALTERTABLE_SERDEPROPERTIES("ALTERTABLE_SERDEPROPERTIES", HiveParser.TOK_ALTERTABLE_SERDEPROPERTIES,
+  ALTERTABLE_SERDEPROPERTIES("ALTERTABLE_SERDEPROPERTIES",
+      new int[] {HiveParser.TOK_ALTERTABLE_SETSERDEPROPERTIES, HiveParser.TOK_ALTERTABLE_UNSETSERDEPROPERTIES},
       new Privilege[]{Privilege.ALTER_METADATA}, null),
-  ALTERPARTITION_SERDEPROPERTIES("ALTERPARTITION_SERDEPROPERTIES", HiveParser.TOK_ALTERPARTITION_SERDEPROPERTIES,
+  ALTERPARTITION_SERDEPROPERTIES("ALTERPARTITION_SERDEPROPERTIES",
+      new int[] {HiveParser.TOK_ALTERPARTITION_SETSERDEPROPERTIES, HiveParser.TOK_ALTERPARTITION_UNSETSERDEPROPERTIES},
       new Privilege[]{Privilege.ALTER_METADATA}, null),
   ALTERTABLE_CLUSTER_SORT("ALTERTABLE_CLUSTER_SORT", HiveParser.TOK_ALTERTABLE_CLUSTER_SORT,
       new Privilege[]{Privilege.ALTER_METADATA}, null),
diff --git a/ql/src/test/queries/clientpositive/table_storage.q b/ql/src/test/queries/clientpositive/table_storage.q
index a043b7a..98df9b0 100644
--- a/ql/src/test/queries/clientpositive/table_storage.q
+++ b/ql/src/test/queries/clientpositive/table_storage.q
@@ -45,4 +45,18 @@ EXPLAIN ALTER TABLE t SET SERDEPROPERTIES('property1'='value1', 'property2'='val
 ALTER TABLE t SET SERDEPROPERTIES('property1'='value1', 'property2'='value2');
 SHOW CREATE TABLE t;
 
+EXPLAIN ALTER TABLE t UNSET SERDEPROPERTIES('property1');
+ALTER TABLE t UNSET SERDEPROPERTIES('property1');
+SHOW CREATE TABLE t;
+
+-- it is valid to unset a non-existing property
+ALTER TABLE t UNSET SERDEPROPERTIES('property1');
+SHOW CREATE TABLE t;
 
+-- a removed property can be set again
+ALTER TABLE t SET SERDEPROPERTIES('property1'='value1');
+SHOW CREATE TABLE t;
+
+-- remove all serde properties
+ALTER TABLE t UNSET SERDEPROPERTIES('property1', 'property2');
+SHOW CREATE TABLE t;
diff --git a/ql/src/test/results/clientpositive/llap/table_storage.q.out b/ql/src/test/results/clientpositive/llap/table_storage.q.out
index 9837d30..76441ba 100644
--- a/ql/src/test/results/clientpositive/llap/table_storage.q.out
+++ b/ql/src/test/results/clientpositive/llap/table_storage.q.out
@@ -547,3 +547,140 @@ LOCATION
 TBLPROPERTIES (
   'bucketing_version'='2', 
 #### A masked pattern was here ####
+PREHOOK: query: EXPLAIN ALTER TABLE t UNSET SERDEPROPERTIES('property1')
+PREHOOK: type: ALTERTABLE_SERDEPROPERTIES
+PREHOOK: Input: default@t
+PREHOOK: Output: default@t
+POSTHOOK: query: EXPLAIN ALTER TABLE t UNSET SERDEPROPERTIES('property1')
+POSTHOOK: type: ALTERTABLE_SERDEPROPERTIES
+POSTHOOK: Input: default@t
+POSTHOOK: Output: default@t
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Unset Serde Props
+      table name: default.t
+      properties:
+        property1 
+
+PREHOOK: query: ALTER TABLE t UNSET SERDEPROPERTIES('property1')
+PREHOOK: type: ALTERTABLE_SERDEPROPERTIES
+PREHOOK: Input: default@t
+PREHOOK: Output: default@t
+POSTHOOK: query: ALTER TABLE t UNSET SERDEPROPERTIES('property1')
+POSTHOOK: type: ALTERTABLE_SERDEPROPERTIES
+POSTHOOK: Input: default@t
+POSTHOOK: Output: default@t
+PREHOOK: query: SHOW CREATE TABLE t
+PREHOOK: type: SHOW_CREATETABLE
+PREHOOK: Input: default@t
+POSTHOOK: query: SHOW CREATE TABLE t
+POSTHOOK: type: SHOW_CREATETABLE
+POSTHOOK: Input: default@t
+CREATE TABLE `t`(
+  `key` string, 
+  `val` string)
+ROW FORMAT SERDE 
+  'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' 
+WITH SERDEPROPERTIES ( 
+  'property2'='value2') 
+STORED AS INPUTFORMAT 
+  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
+OUTPUTFORMAT 
+  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
+LOCATION
+#### A masked pattern was here ####
+TBLPROPERTIES (
+  'bucketing_version'='2', 
+#### A masked pattern was here ####
+PREHOOK: query: ALTER TABLE t UNSET SERDEPROPERTIES('property1')
+PREHOOK: type: ALTERTABLE_SERDEPROPERTIES
+PREHOOK: Input: default@t
+PREHOOK: Output: default@t
+POSTHOOK: query: ALTER TABLE t UNSET SERDEPROPERTIES('property1')
+POSTHOOK: type: ALTERTABLE_SERDEPROPERTIES
+POSTHOOK: Input: default@t
+POSTHOOK: Output: default@t
+PREHOOK: query: SHOW CREATE TABLE t
+PREHOOK: type: SHOW_CREATETABLE
+PREHOOK: Input: default@t
+POSTHOOK: query: SHOW CREATE TABLE t
+POSTHOOK: type: SHOW_CREATETABLE
+POSTHOOK: Input: default@t
+CREATE TABLE `t`(
+  `key` string, 
+  `val` string)
+ROW FORMAT SERDE 
+  'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' 
+WITH SERDEPROPERTIES ( 
+  'property2'='value2') 
+STORED AS INPUTFORMAT 
+  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
+OUTPUTFORMAT 
+  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
+LOCATION
+#### A masked pattern was here ####
+TBLPROPERTIES (
+  'bucketing_version'='2', 
+#### A masked pattern was here ####
+PREHOOK: query: ALTER TABLE t SET SERDEPROPERTIES('property1'='value1')
+PREHOOK: type: ALTERTABLE_SERDEPROPERTIES
+PREHOOK: Input: default@t
+PREHOOK: Output: default@t
+POSTHOOK: query: ALTER TABLE t SET SERDEPROPERTIES('property1'='value1')
+POSTHOOK: type: ALTERTABLE_SERDEPROPERTIES
+POSTHOOK: Input: default@t
+POSTHOOK: Output: default@t
+PREHOOK: query: SHOW CREATE TABLE t
+PREHOOK: type: SHOW_CREATETABLE
+PREHOOK: Input: default@t
+POSTHOOK: query: SHOW CREATE TABLE t
+POSTHOOK: type: SHOW_CREATETABLE
+POSTHOOK: Input: default@t
+CREATE TABLE `t`(
+  `key` string, 
+  `val` string)
+ROW FORMAT SERDE 
+  'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' 
+WITH SERDEPROPERTIES ( 
+  'property1'='value1', 
+  'property2'='value2') 
+STORED AS INPUTFORMAT 
+  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
+OUTPUTFORMAT 
+  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
+LOCATION
+#### A masked pattern was here ####
+TBLPROPERTIES (
+  'bucketing_version'='2', 
+#### A masked pattern was here ####
+PREHOOK: query: ALTER TABLE t UNSET SERDEPROPERTIES('property1', 'property2')
+PREHOOK: type: ALTERTABLE_SERDEPROPERTIES
+PREHOOK: Input: default@t
+PREHOOK: Output: default@t
+POSTHOOK: query: ALTER TABLE t UNSET SERDEPROPERTIES('property1', 'property2')
+POSTHOOK: type: ALTERTABLE_SERDEPROPERTIES
+POSTHOOK: Input: default@t
+POSTHOOK: Output: default@t
+PREHOOK: query: SHOW CREATE TABLE t
+PREHOOK: type: SHOW_CREATETABLE
+PREHOOK: Input: default@t
+POSTHOOK: query: SHOW CREATE TABLE t
+POSTHOOK: type: SHOW_CREATETABLE
+POSTHOOK: Input: default@t
+CREATE TABLE `t`(
+  `key` string, 
+  `val` string)
+ROW FORMAT SERDE 
+  'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' 
+STORED AS INPUTFORMAT 
+  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
+OUTPUTFORMAT 
+  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
+LOCATION
+#### A masked pattern was here ####
+TBLPROPERTIES (
+  'bucketing_version'='2', 
+#### A masked pattern was here ####