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 ####