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/05/22 23:33:42 UTC
[hive] branch master updated: HIVE-23513 Fix Json output for SHOW
TABLES and SHOW MATERIALIZED VIEWS (Miklos Gergely,
reviewed by Zoltan Haindrich)
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 c641497 HIVE-23513 Fix Json output for SHOW TABLES and SHOW MATERIALIZED VIEWS (Miklos Gergely, reviewed by Zoltan Haindrich)
c641497 is described below
commit c64149747826e305dd5f9156ee9e6e8cf0c1e863
Author: miklosgergely <mg...@cloudera.com>
AuthorDate: Tue May 19 22:14:27 2020 +0200
HIVE-23513 Fix Json output for SHOW TABLES and SHOW MATERIALIZED VIEWS (Miklos Gergely, reviewed by Zoltan Haindrich)
---
.../test/resources/testconfiguration.properties | 3 +-
.../metadata/formatting/JsonMetaDataFormatter.java | 53 +++++------
.../test/queries/clientpositive/show_json_format.q | 25 ++++++
.../clientpositive/llap/show_json_format.q.out | 100 +++++++++++++++++++++
4 files changed, 150 insertions(+), 31 deletions(-)
diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties
index 0d06d02..38a8103 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -3025,7 +3025,8 @@ minillaplocal.query.files=\
windowing_range_multiorder.q,\
windowing_streaming.q,\
windowing_udaf.q,\
- windowing_windowspec3.q
+ windowing_windowspec3.q,\
+ show_json_format.q
encrypted.query.files=encryption_join_unencrypted_tbl.q,\
encryption_insert_partition_static.q,\
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
index a1611e3..00ddb1d 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/formatting/JsonMetaDataFormatter.java
@@ -35,6 +35,8 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.collect.ImmutableMap;
+
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
@@ -130,48 +132,38 @@ public class JsonMetaDataFormatter implements MetaDataFormatter {
* Show a list of tables including table types.
*/
@Override
- public void showTablesExtended(DataOutputStream out, List<Table> tables)
- throws HiveException {
+ public void showTablesExtended(DataOutputStream out, List<Table> tables) throws HiveException {
if (tables.isEmpty()) {
- // Nothing to do
return;
}
- MapBuilder builder = MapBuilder.create();
- ArrayList<Map<String, Object>> res = new ArrayList<Map<String, Object>>();
+ List<Map<String, Object>> tableDataList = new ArrayList<Map<String, Object>>();
for (Table table : tables) {
- final String tableName = table.getTableName();
- final String tableType = table.getTableType().toString();
- res.add(builder
- .put("Table Name", tableName)
- .put("Table Type", tableType)
- .build());
+ Map<String, Object> tableData = ImmutableMap.of(
+ "Table Name", table.getTableName(),
+ "Table Type", table.getTableType().toString());
+ tableDataList.add(tableData);
}
- asJson(out, builder.put("tables", res).build());
+ asJson(out, ImmutableMap.of("tables", tableDataList));
}
/**
* Show a list of materialized views.
*/
@Override
- public void showMaterializedViews(DataOutputStream out, List<Table> materializedViews)
- throws HiveException {
+ public void showMaterializedViews(DataOutputStream out, List<Table> materializedViews) throws HiveException {
if (materializedViews.isEmpty()) {
- // Nothing to do
return;
}
- MapBuilder builder = MapBuilder.create();
- ArrayList<Map<String, Object>> res = new ArrayList<Map<String, Object>>();
- for (Table mv : materializedViews) {
- final String mvName = mv.getTableName();
- final String rewriteEnabled = mv.isRewriteEnabled() ? "Yes" : "No";
+ List<Map<String, Object>> materializedViewDataList = new ArrayList<Map<String, Object>>();
+ for (Table materializedView : materializedViews) {
// Currently, we only support manual refresh
// TODO: Update whenever we have other modes
- final String refreshMode = "Manual refresh";
- final String timeWindowString = mv.getProperty(MATERIALIZED_VIEW_REWRITING_TIME_WINDOW);
- final String mode;
- if (!org.apache.commons.lang3.StringUtils.isEmpty(timeWindowString)) {
+ String refreshMode = "Manual refresh";
+ String timeWindowString = materializedView.getProperty(MATERIALIZED_VIEW_REWRITING_TIME_WINDOW);
+ String mode;
+ if (!StringUtils.isEmpty(timeWindowString)) {
long time = HiveConf.toTime(timeWindowString,
HiveConf.getDefaultTimeUnit(HiveConf.ConfVars.HIVE_MATERIALIZED_VIEW_REWRITING_TIME_WINDOW),
TimeUnit.MINUTES);
@@ -185,13 +177,14 @@ public class JsonMetaDataFormatter implements MetaDataFormatter {
} else {
mode = refreshMode;
}
- res.add(builder
- .put("MV Name", mvName)
- .put("Rewriting Enabled", rewriteEnabled)
- .put("Mode", mode)
- .build());
+
+ Map<String, Object> materializedViewData = ImmutableMap.of(
+ "MV Name", materializedView.getTableName(),
+ "Rewriting Enabled", materializedView.isRewriteEnabled() ? "Yes" : "No",
+ "Mode", mode);
+ materializedViewDataList.add(materializedViewData);
}
- asJson(out, builder.put("materialized views", res).build());
+ asJson(out, ImmutableMap.of("materialized views", materializedViewDataList));
}
/**
diff --git a/ql/src/test/queries/clientpositive/show_json_format.q b/ql/src/test/queries/clientpositive/show_json_format.q
new file mode 100644
index 0000000..82a9e0d
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/show_json_format.q
@@ -0,0 +1,25 @@
+--! qt:dataset::ONLY
+
+SET hive.ddl.output.format=json;
+SET hive.cli.errors.ignore=true;
+SET hive.test.authz.sstd.hs2.mode=true;
+
+SHOW DATABASES;
+DESC DATABASE default;
+
+CREATE TABLE t (i int);
+SHOW TABLES;
+SHOW EXTENDED TABLES;
+SHOW TABLE EXTENDED LIKE 't';
+DESC t;
+
+CREATE VIEW v AS SELECT * FROM t;
+SHOW VIEWS;
+
+CREATE MATERIALIZED VIEW mv DISABLE REWRITE AS SELECT * FROM t;
+SHOW MATERIALIZED VIEWS;
+
+CREATE RESOURCE PLAN rp;
+SHOW RESOURCE PLANS;
+SHOW RESOURCE PLAN rp;
+ALTER RESOURCE PLAN rp VALIDATE;
diff --git a/ql/src/test/results/clientpositive/llap/show_json_format.q.out b/ql/src/test/results/clientpositive/llap/show_json_format.q.out
new file mode 100644
index 0000000..b038a1d
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/show_json_format.q.out
@@ -0,0 +1,100 @@
+PREHOOK: query: SHOW DATABASES
+PREHOOK: type: SHOWDATABASES
+POSTHOOK: query: SHOW DATABASES
+POSTHOOK: type: SHOWDATABASES
+{"databases":["default"]}
+PREHOOK: query: DESC DATABASE default
+PREHOOK: type: DESCDATABASE
+PREHOOK: Input: database:default
+POSTHOOK: query: DESC DATABASE default
+POSTHOOK: type: DESCDATABASE
+POSTHOOK: Input: database:default
+#### A masked pattern was here ####
+PREHOOK: query: CREATE TABLE t (i int)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@t
+POSTHOOK: query: CREATE TABLE t (i int)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@t
+PREHOOK: query: SHOW TABLES
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:default
+POSTHOOK: query: SHOW TABLES
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:default
+{"tables":["t"]}
+PREHOOK: query: SHOW EXTENDED TABLES
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:default
+POSTHOOK: query: SHOW EXTENDED TABLES
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:default
+{"tables":[{"Table Name":"t","Table Type":"MANAGED_TABLE"}]}
+PREHOOK: query: SHOW TABLE EXTENDED LIKE 't'
+PREHOOK: type: SHOW_TABLESTATUS
+POSTHOOK: query: SHOW TABLE EXTENDED LIKE 't'
+POSTHOOK: type: SHOW_TABLESTATUS
+#### A masked pattern was here ####
+PREHOOK: query: DESC t
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@t
+POSTHOOK: query: DESC t
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@t
+{"columns":[{"name":"i","type":"int"}]}
+PREHOOK: query: CREATE VIEW v AS SELECT * FROM t
+PREHOOK: type: CREATEVIEW
+PREHOOK: Input: default@t
+PREHOOK: Output: database:default
+PREHOOK: Output: default@v
+POSTHOOK: query: CREATE VIEW v AS SELECT * FROM t
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Input: default@t
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@v
+POSTHOOK: Lineage: v.i SIMPLE [(t)t.FieldSchema(name:i, type:int, comment:null), ]
+PREHOOK: query: SHOW VIEWS
+PREHOOK: type: SHOWVIEWS
+POSTHOOK: query: SHOW VIEWS
+POSTHOOK: type: SHOWVIEWS
+{"tables":["v"]}
+PREHOOK: query: CREATE MATERIALIZED VIEW mv DISABLE REWRITE AS SELECT * FROM t
+PREHOOK: type: CREATE_MATERIALIZED_VIEW
+PREHOOK: Input: default@t
+PREHOOK: Output: database:default
+PREHOOK: Output: default@mv
+POSTHOOK: query: CREATE MATERIALIZED VIEW mv DISABLE REWRITE AS SELECT * FROM t
+POSTHOOK: type: CREATE_MATERIALIZED_VIEW
+POSTHOOK: Input: default@t
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@mv
+PREHOOK: query: SHOW MATERIALIZED VIEWS
+PREHOOK: type: SHOWMATERIALIZEDVIEWS
+POSTHOOK: query: SHOW MATERIALIZED VIEWS
+POSTHOOK: type: SHOWMATERIALIZEDVIEWS
+{"materialized views":[{"MV Name":"mv","Rewriting Enabled":"No","Mode":"Manual refresh"}]}
+PREHOOK: query: CREATE RESOURCE PLAN rp
+PREHOOK: type: CREATE RESOURCEPLAN
+PREHOOK: Output: dummyHostnameForTest
+POSTHOOK: query: CREATE RESOURCE PLAN rp
+POSTHOOK: type: CREATE RESOURCEPLAN
+PREHOOK: query: SHOW RESOURCE PLANS
+PREHOOK: type: SHOW RESOURCEPLAN
+PREHOOK: Output: dummyHostnameForTest
+POSTHOOK: query: SHOW RESOURCE PLANS
+POSTHOOK: type: SHOW RESOURCEPLAN
+[{"name":"rp","status":"DISABLED","defaultPoolPath":"default"}]
+PREHOOK: query: SHOW RESOURCE PLAN rp
+PREHOOK: type: SHOW RESOURCEPLAN
+PREHOOK: Output: dummyHostnameForTest
+POSTHOOK: query: SHOW RESOURCE PLAN rp
+POSTHOOK: type: SHOW RESOURCEPLAN
+{"name":"rp","status":"DISABLED","parallelism":null,"defaultPool":"default","pools":[{"name":"default","allocFraction":1.0,"schedulingPolicy":null,"parallelism":4,"triggers":[],"mappings":[{"type":"default","values":[]}],"pools":[]}]}
+PREHOOK: query: ALTER RESOURCE PLAN rp VALIDATE
+PREHOOK: type: ALTER RESOURCEPLAN
+PREHOOK: Output: dummyHostnameForTest
+POSTHOOK: query: ALTER RESOURCE PLAN rp VALIDATE
+POSTHOOK: type: ALTER RESOURCEPLAN
+{"errors":[],"warnings":[]}