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 <mgerg...@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 ####