From c470d13f9bf41850ebcb6041f1707366552d27d8 Mon Sep 17 00:00:00 2001 From: nareshpr Date: Fri, 10 Apr 2020 17:19:24 -0700 Subject: [PATCH] HIVE-23179 - Show create table is not showing SerDe Properties in unicode --- .../create/show/ShowCreateTableOperation.java | 4 +- .../show_create_table_delimited.q | 3 ++ .../show_create_table_delimited.q.out | 39 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/create/show/ShowCreateTableOperation.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/create/show/ShowCreateTableOperation.java index 51d9f10436..828e947f66 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/create/show/ShowCreateTableOperation.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/create/show/ShowCreateTableOperation.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hive.ql.ddl.table.create.show; +import org.apache.commons.lang3.StringEscapeUtils; import org.apache.hadoop.hive.ql.ddl.DDLOperationContext; import org.apache.hadoop.hive.ql.ddl.DDLUtils; import org.apache.hadoop.hive.ql.ddl.table.create.CreateTableOperation; @@ -322,9 +323,8 @@ public static void appendSerdeParams(StringBuilder builder, Map SortedMap sortedSerdeParams = new TreeMap(serdeParams); List serdeCols = new ArrayList(); for (Entry entry : sortedSerdeParams.entrySet()) { - serdeCols.add(" '" + entry.getKey() + "'='" + HiveStringUtils.escapeHiveCommand(entry.getValue()) + "'"); + serdeCols.add(" '" + entry.getKey() + "'='" + StringEscapeUtils.escapeJava(entry.getValue()) + "'"); } - builder .append("WITH SERDEPROPERTIES ( \n") .append(StringUtils.join(serdeCols, ", \n")) diff --git a/ql/src/test/queries/clientpositive/show_create_table_delimited.q b/ql/src/test/queries/clientpositive/show_create_table_delimited.q index 77229641f1..dfc0351f77 100644 --- a/ql/src/test/queries/clientpositive/show_create_table_delimited.q +++ b/ql/src/test/queries/clientpositive/show_create_table_delimited.q @@ -7,3 +7,6 @@ LOCATION 'file:${system:test.tmp.dir}/tmp_showcrt1'; SHOW CREATE TABLE tmp_showcrt1; DROP TABLE tmp_showcrt1; +create table esc_special_delimiter(age int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\u0001' stored as textfile; +show create table esc_special_delimiter; +drop table esc_special_delimiter; diff --git a/ql/src/test/results/clientpositive/show_create_table_delimited.q.out b/ql/src/test/results/clientpositive/show_create_table_delimited.q.out index ad58bf62d3..849ad44690 100644 --- a/ql/src/test/results/clientpositive/show_create_table_delimited.q.out +++ b/ql/src/test/results/clientpositive/show_create_table_delimited.q.out @@ -49,3 +49,42 @@ POSTHOOK: query: DROP TABLE tmp_showcrt1 POSTHOOK: type: DROPTABLE POSTHOOK: Input: default@tmp_showcrt1 POSTHOOK: Output: default@tmp_showcrt1 +PREHOOK: query: create table esc_special_delimiter(age int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\u0001' stored as textfile +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@esc_special_delimiter +POSTHOOK: query: create table esc_special_delimiter(age int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\u0001' stored as textfile +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@esc_special_delimiter +PREHOOK: query: show create table esc_special_delimiter +PREHOOK: type: SHOW_CREATETABLE +PREHOOK: Input: default@esc_special_delimiter +POSTHOOK: query: show create table esc_special_delimiter +POSTHOOK: type: SHOW_CREATETABLE +POSTHOOK: Input: default@esc_special_delimiter +CREATE TABLE `esc_special_delimiter`( + `age` int, + `name` string) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' +WITH SERDEPROPERTIES ( + 'field.delim'='\u0001', + 'serialization.format'='\u0001') +STORED AS INPUTFORMAT + 'org.apache.hadoop.mapred.TextInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' +LOCATION +#### A masked pattern was here #### +TBLPROPERTIES ( + 'bucketing_version'='2', +#### A masked pattern was here #### +PREHOOK: query: drop table esc_special_delimiter +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@esc_special_delimiter +PREHOOK: Output: default@esc_special_delimiter +POSTHOOK: query: drop table esc_special_delimiter +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@esc_special_delimiter +POSTHOOK: Output: default@esc_special_delimiter -- 2.20.1