You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by jo...@apache.org on 2022/07/13 16:08:04 UTC

[zeppelin] branch master updated: [ZEPPELIN-5723] Remove Kylin interpreter (#4406)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new f24a43f415 [ZEPPELIN-5723] Remove Kylin interpreter (#4406)
f24a43f415 is described below

commit f24a43f415696f859fc67fe8c167c66f1e796121
Author: yaini <80...@users.noreply.github.com>
AuthorDate: Thu Jul 14 01:07:59 2022 +0900

    [ZEPPELIN-5723] Remove Kylin interpreter (#4406)
---
 .github/workflows/core.yml                         |   2 +-
 .github/workflows/frontend.yml                     |   2 +-
 Dockerfile                                         |   2 +-
 conf/interpreter-list                              |   1 -
 dev/create_release.sh                              |   2 +-
 docs/_includes/themes/zeppelin/_navigation.html    |   1 -
 docs/index.md                                      |   1 -
 docs/interpreter/kylin.md                          |  82 ------
 docs/interpreter/submarine.md                      |   2 +-
 docs/quickstart/sql_with_zeppelin.md               |   1 -
 docs/usage/interpreter/installation.md             |   5 -
 docs/usage/other_features/zeppelin_context.md      |   2 +-
 kylin/pom.xml                                      |  79 ------
 .../apache/zeppelin/kylin/KylinErrorResponse.java  |  62 -----
 .../apache/zeppelin/kylin/KylinInterpreter.java    | 237 -----------------
 kylin/src/main/resources/interpreter-setting.json  |  63 -----
 .../zeppelin/kylin/KylinInterpreterTest.java       | 295 ---------------------
 pom.xml                                            |   1 -
 zeppelin-distribution/src/bin_license/LICENSE      |   1 -
 19 files changed, 6 insertions(+), 835 deletions(-)

diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
index aceaf9fa11..4b3e42a369 100644
--- a/.github/workflows/core.yml
+++ b/.github/workflows/core.yml
@@ -82,7 +82,7 @@ jobs:
   interpreter-test-non-core:
     runs-on: ubuntu-20.04
     env:
-      INTERPRETERS: 'beam,hbase,pig,jdbc,file,flink-cmd,ignite,kylin,cassandra,elasticsearch,bigquery,alluxio,scio,livy,groovy,sap,java,geode,neo4j,hazelcastjet,submarine,sparql,mongodb,influxdb,ksql,scalding'
+      INTERPRETERS: 'beam,hbase,pig,jdbc,file,flink-cmd,ignite,cassandra,elasticsearch,bigquery,alluxio,scio,livy,groovy,sap,java,geode,neo4j,hazelcastjet,submarine,sparql,mongodb,influxdb,ksql,scalding'
     steps:
       - name: Checkout
         uses: actions/checkout@v2
diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml
index 34cdef2b0f..11624c66b9 100644
--- a/.github/workflows/frontend.yml
+++ b/.github/workflows/frontend.yml
@@ -19,7 +19,7 @@ env:
   SPARK_PRINT_LAUNCH_COMMAND: "true"
   SPARK_LOCAL_IP: 127.0.0.1
   ZEPPELIN_LOCAL_IP: 127.0.0.1
-  INTERPRETERS: '!beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!kylin,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb'
+  INTERPRETERS: '!beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb'
 
 jobs:
   run-e2e-tests-in-zeppelin-web:
diff --git a/Dockerfile b/Dockerfile
index 431b89c8cb..2aef45aa86 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -23,7 +23,7 @@ RUN echo "unsafe-perm=true" > ~/.npmrc && \
     echo '{ "allow_root": true }' > ~/.bowerrc && \
     ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2 -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular && \
     # Example with doesn't compile all interpreters
-    # ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2 -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular -pl '!groovy,!submarine,!livy,!hbase,!pig,!file,!flink,!ignite,!kylin' && \
+    # ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2 -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular -pl '!groovy,!submarine,!livy,!hbase,!pig,!file,!flink,!ignite' && \
     mv /workspace/zeppelin/zeppelin-distribution/target/zeppelin-*/zeppelin-* /opt/zeppelin/ && \
     # Removing stuff saves time, because docker creates a temporary layer
     rm -rf ~/.m2 && \
diff --git a/conf/interpreter-list b/conf/interpreter-list
index c5e1dd8045..76584969c0 100644
--- a/conf/interpreter-list
+++ b/conf/interpreter-list
@@ -33,7 +33,6 @@ ignite          org.apache.zeppelin:zeppelin-ignite:0.10.0               Ignite
 java            org.apache.zeppelin:zeppelin-java:0.10.0                 Java interpreter
 jdbc            org.apache.zeppelin:zeppelin-jdbc:0.10.0                 Jdbc interpreter
 kotlin          org.apache.zeppelin:zeppelin-kotlin:0.10.0               Kotlin interpreter
-kylin           org.apache.zeppelin:zeppelin-kylin:0.10.0                Kylin interpreter
 livy            org.apache.zeppelin:zeppelin-livy:0.10.0                 Livy interpreter
 md              org.apache.zeppelin:zeppelin-markdown:0.10.0             Markdown support
 neo4j           org.apache.zeppelin:zeppelin-neo4j:0.10.0                Neo4j interpreter
diff --git a/dev/create_release.sh b/dev/create_release.sh
index 1f0c7ba6d9..a3bef0d1d5 100755
--- a/dev/create_release.sh
+++ b/dev/create_release.sh
@@ -97,7 +97,7 @@ function make_binary_release() {
 
 git_clone
 make_source_package
-make_binary_release netinst "-Pweb-angular -Phadoop-2.6 -pl !beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!kylin,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb,!ksql,!scalding -am"
+make_binary_release netinst "-Pweb-angular -Phadoop-2.6 -pl !beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb,!ksql,!scalding -am"
 make_binary_release all "-Pweb-angular -Phadoop-2.6"
 
 # remove non release files and dirs
diff --git a/docs/_includes/themes/zeppelin/_navigation.html b/docs/_includes/themes/zeppelin/_navigation.html
index f7d8e08ae8..205e8fc7fc 100644
--- a/docs/_includes/themes/zeppelin/_navigation.html
+++ b/docs/_includes/themes/zeppelin/_navigation.html
@@ -155,7 +155,6 @@
                 <li><a href="{{BASE_PATH}}/interpreter/jupyter.html">Jupyter</a></li>
                 <li><a href="{{BASE_PATH}}/interpreter/kotlin.html">Kotlin</a></li>
                 <li><a href="{{BASE_PATH}}/interpreter/ksql.html">KSQL</a></li>
-                <li><a href="{{BASE_PATH}}/interpreter/kylin.html">Kylin</a></li>
                 <li><a href="{{BASE_PATH}}/interpreter/livy.html">Livy</a></li>
                 <li><a href="{{BASE_PATH}}/interpreter/mahout.html">Mahout</a></li>
                 <li><a href="{{BASE_PATH}}/interpreter/markdown.html">Markdown</a></li>
diff --git a/docs/index.md b/docs/index.md
index 0b0cb8f41b..d955496160 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -153,7 +153,6 @@ limitations under the License.
   * [Jupyter](./interpreter/jupyter.html)
   * [Kotlin](./interpreter/kotlin.html)
   * [KSQL](./interpreter/ksql.html)
-  * [Kylin](./interpreter/kylin.html)
   * [Livy](./interpreter/livy.html)
   * [Mahout](./interpreter/mahout.html)
   * [Markdown](./interpreter/markdown.html)
diff --git a/docs/interpreter/kylin.md b/docs/interpreter/kylin.md
deleted file mode 100644
index 1f2b0f3ab4..0000000000
--- a/docs/interpreter/kylin.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-layout: page
-title: "Apache Kylin Interpreter for Apache Zeppelin"
-description: "Apache Kylin™ is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Hadoop supporting extremely large datasets, original contributed from eBay Inc.
-."
-group: interpreter
----
-<!--
-Licensed 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.
--->
-{% include JB/setup %}
-
-# Apache Kylin Interpreter for Apache Zeppelin
-
-<div id="toc"></div>
-
-## Overview
-[Apache Kylin](https://kylin.apache.org/) is an open source Distributed Analytics Engine designed to provide SQL interface and multi-dimensional analysis (OLAP) on Hadoop supporting extremely large datasets, original contributed from eBay Inc. The interpreter assumes that Apache Kylin has been installed and you can connect to Apache Kylin from the machine Apache Zeppelin is installed.  
-To get start with Apache Kylin, please see [Apache Kylin Quickstart](https://kylin.apache.org/docs15/index.html).
-
-## Configuration
-<table class="table-configuration">
-  <tr>
-    <th>Name</th>
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>kylin.api.url </td>
-    <td>http://localhost:7070/kylin/api/query</td>
-    <td>kylin query POST API <br/> The format can be like http://&lt;host&gt;:&lt;port&gt;/kylin/api/query</td>
-  </tr>
-  <tr>
-    <td>kylin.api.user</td>
-    <td>ADMIN</td>
-    <td>kylin user</td>
-  </tr>
-  <tr>
-    <td>kylin.api.password</td>
-    <td>KYLIN</td>
-    <td>kylin password</td>
-  </tr>
-  <tr>
-    <td>kylin.query.project</td>
-    <td>learn_kylin</td>
-    <td>String, Project to perform query. Could update at notebook level</td>
-  </tr>
-  <tr>
-    <td>kylin.query.ispartial</td>
-    <td>true</td>
-    <td>true|false <br/> (@Deprecated since Apache Kylin V1.5) <br/> Whether accept a partial result or not, default be “false”. Set to “false” for production use.</td>
-  </tr>
-  <tr>
-    <td>kylin.query.limit</td>
-    <td>5000</td>
-    <td>int, Query limit <br/> If limit is set in sql, perPage will be ignored.</td>
-  </tr>
-  <tr>
-    <td>kylin.query.offset</td>
-    <td>0</td>
-    <td>int, Query offset <br/> If offset is set in sql, curIndex will be ignored.</td>
-  </tr>
-</table>
-
-## Using the Apache Kylin Interpreter
-In a paragraph, use `%kylin(project_name)` to select the **kylin** interpreter, **project name** and then input **sql**. If no project name defined, will use the default project name from the above configuration.
-
-```sql
-%kylin(learn_project)
-select count(*) from kylin_sales group by part_dt
-```
-
diff --git a/docs/interpreter/submarine.md b/docs/interpreter/submarine.md
index 97be1bb7e0..cfad6255fc 100644
--- a/docs/interpreter/submarine.md
+++ b/docs/interpreter/submarine.md
@@ -27,7 +27,7 @@ limitations under the License.
 
 A deep learning algorithm project requires data acquisition, data processing, data cleaning, interactive visual programming adjustment parameters, algorithm testing, algorithm publishing, algorithm job scheduling, offline model training, model online services and many other processes and processes. Zeppelin is a web-based notebook that supports interactive data analysis. You can use SQL, Scala, Python, etc. to make data-driven, interactive, collaborative documents.
 
-You can use the more than 20 interpreters in zeppelin (for example: spark, hive, Cassandra, Elasticsearch, Kylin, HBase, etc.) to collect data, clean data, feature extraction, etc. in the data in Hadoop before completing the machine learning model training. The data preprocessing process.
+You can use the more than 20 interpreters in zeppelin (for example: spark, hive, Cassandra, Elasticsearch, HBase, etc.) to collect data, clean data, feature extraction, etc. in the data in Hadoop before completing the machine learning model training. The data preprocessing process.
 
 By integrating submarine in zeppelin, we use zeppelin's data discovery, data analysis and data visualization and collaboration capabilities to visualize the results of algorithm development and parameter adjustment during machine learning model training.
 
diff --git a/docs/quickstart/sql_with_zeppelin.md b/docs/quickstart/sql_with_zeppelin.md
index da709d5b94..39d57291a3 100644
--- a/docs/quickstart/sql_with_zeppelin.md
+++ b/docs/quickstart/sql_with_zeppelin.md
@@ -63,7 +63,6 @@ For the further information about SQL support in Zeppelin, please check
 - [Flink Interpreter](../interpreter/flink.html)
 - [Python Interpreter](../interpreter/python.html)
 - [IgniteSQL Interpreter](../interpreter/ignite.html#ignite-sql-interpreter) for [Apache Ignite](https://ignite.apache.org/)
-- [Kylin Interpreter](../interpreter/kylin.html) for [Apache Kylin](http://kylin.apache.org/)
 
 
 
diff --git a/docs/usage/interpreter/installation.md b/docs/usage/interpreter/installation.md
index 3aec553c17..2e26b19896 100644
--- a/docs/usage/interpreter/installation.md
+++ b/docs/usage/interpreter/installation.md
@@ -193,11 +193,6 @@ You can also find the below community managed interpreter list in `conf/interpre
     <td>org.apache.zeppelin:zeppelin-kotlin:0.7.0</td>
     <td>Kotlin interpreter</td>
   </tr>
-  <tr>
-    <td>kylin</td>
-    <td>org.apache.zeppelin:zeppelin-kylin:0.10.0</td>
-    <td>Kylin interpreter</td>
-  </tr>
   <tr>
     <td>livy</td>
     <td>org.apache.zeppelin:zeppelin-livy:0.10.0</td>
diff --git a/docs/usage/other_features/zeppelin_context.md b/docs/usage/other_features/zeppelin_context.md
index 7b251719c3..784e1f34b8 100644
--- a/docs/usage/other_features/zeppelin_context.md
+++ b/docs/usage/other_features/zeppelin_context.md
@@ -235,7 +235,7 @@ dynamic-forms and object-interpolation as described below.
 
 |             Interpreters that use Embedded Commands               |
 |-------------------------------------------------------------------|
-|spark.sql (\*), bigquery, cassandra, elasticsearch, file, hbase, ignite, jdbc (\*), kylin, livy, markdown, neo4j, pig, python, shell (\*), zengine |
+|spark.sql (\*), bigquery, cassandra, elasticsearch, file, hbase, ignite, jdbc (\*), livy, markdown, neo4j, pig, python, shell (\*), zengine |
 
 Dynamic forms are available in all of the interpreters in the table above, 
 but object interpolation is only available in a small, but growing, list of interpreters 
diff --git a/kylin/pom.xml b/kylin/pom.xml
deleted file mode 100644
index e21a6892ed..0000000000
--- a/kylin/pom.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  -->
-
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>zeppelin-interpreter-parent</artifactId>
-        <groupId>org.apache.zeppelin</groupId>
-        <version>0.11.0-SNAPSHOT</version>
-        <relativePath>../zeppelin-interpreter-parent/pom.xml</relativePath>
-    </parent>
-
-    <artifactId>zeppelin-kylin</artifactId>
-    <packaging>jar</packaging>
-    <name>Zeppelin: Kylin interpreter</name>
-
-    <properties>
-        <interpreter.name>kylin</interpreter.name>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-enforcer-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <artifactId>maven-shade-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-checkstyle-plugin</artifactId>
-                <configuration>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java b/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java
deleted file mode 100644
index 04d04797cc..0000000000
--- a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.zeppelin.kylin;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonSyntaxException;
-import org.apache.zeppelin.common.JsonSerializable;
-
-/**
- * class for Kylin Error Response.
- */
-class KylinErrorResponse implements JsonSerializable {
-  private static final Gson gson = new Gson();
-
-  private String stacktrace;
-  private String exception;
-  private String url;
-  private String code;
-  private Object data;
-  private String msg;
-
-  KylinErrorResponse(String stacktrace, String exception, String url,
-      String code, Object data, String msg) {
-    this.stacktrace = stacktrace;
-    this.exception = exception;
-    this.url = url;
-    this.code = code;
-    this.data = data;
-    this.msg = msg;
-  }
-
-  public String getException() {
-    return exception;
-  }
-
-  public String toJson() {
-    return gson.toJson(this);
-  }
-
-  public static KylinErrorResponse fromJson(String json) {
-    try {
-      return gson.fromJson(json, KylinErrorResponse.class);
-    } catch (JsonSyntaxException ex) {
-      return null;
-    }
-  }
-}
diff --git a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java b/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java
deleted file mode 100755
index 444f5cbc28..0000000000
--- a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * 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.zeppelin.kylin;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.io.IOUtils;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.zeppelin.interpreter.Interpreter;
-import org.apache.zeppelin.interpreter.InterpreterContext;
-import org.apache.zeppelin.interpreter.InterpreterResult;
-import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion;
-
-/**
- * Kylin interpreter for Zeppelin. (http://kylin.apache.org)
- */
-public class KylinInterpreter extends Interpreter {
-  Logger logger = LoggerFactory.getLogger(KylinInterpreter.class);
-
-  static final String KYLIN_QUERY_API_URL = "kylin.api.url";
-  static final String KYLIN_USERNAME = "kylin.api.user";
-  static final String KYLIN_PASSWORD = "kylin.api.password";
-  static final String KYLIN_QUERY_PROJECT = "kylin.query.project";
-  static final String KYLIN_QUERY_OFFSET = "kylin.query.offset";
-  static final String KYLIN_QUERY_LIMIT = "kylin.query.limit";
-  static final String KYLIN_QUERY_ACCEPT_PARTIAL = "kylin.query.ispartial";
-  static final Pattern KYLIN_TABLE_FORMAT_REGEX_LABEL = Pattern.compile("\"label\":\"(.*?)\"");
-  static final Pattern KYLIN_TABLE_FORMAT_REGEX_RESULTS =
-          Pattern.compile("\"results\":\\[\\[(.*?)]]");
-
-  public KylinInterpreter(Properties property) {
-    super(property);
-  }
-
-  @Override
-  public void open() {
-
-  }
-
-  @Override
-  public void close() {
-
-  }
-
-  @Override
-  public InterpreterResult interpret(String st, InterpreterContext context) {
-    try {
-      return executeQuery(st);
-    } catch (IOException e) {
-      logger.error("failed to query data in kylin ", e);
-      return new InterpreterResult(InterpreterResult.Code.ERROR, e.getMessage());
-    }
-  }
-
-  @Override
-  public void cancel(InterpreterContext context) {
-
-  }
-
-  @Override
-  public FormType getFormType() {
-    return FormType.SIMPLE;
-  }
-
-  @Override
-  public int getProgress(InterpreterContext context) {
-    return 0;
-  }
-
-  @Override
-  public List<InterpreterCompletion> completion(String buf, int cursor,
-      InterpreterContext interpreterContext) {
-    return null;
-  }
-
-  public HttpResponse prepareRequest(String sql) throws IOException {
-    String kylinProject = getProject(sql);
-    String kylinSql = getSQL(sql);
-
-    logger.info("project:" + kylinProject);
-    logger.info("sql:" + kylinSql);
-    logger.info("acceptPartial:" + getProperty(KYLIN_QUERY_ACCEPT_PARTIAL));
-    logger.info("limit:" + getProperty(KYLIN_QUERY_LIMIT));
-    logger.info("offset:" + getProperty(KYLIN_QUERY_OFFSET));
-    byte[] encodeBytes = Base64.encodeBase64(new String(getProperty(KYLIN_USERNAME)
-        + ":" + getProperty(KYLIN_PASSWORD)).getBytes("UTF-8"));
-
-    String postContent = new String("{\"project\":" + "\"" + kylinProject + "\""
-        + "," + "\"sql\":" + "\"" + kylinSql + "\""
-        + "," + "\"acceptPartial\":" + "\"" + getProperty(KYLIN_QUERY_ACCEPT_PARTIAL) + "\""
-        + "," + "\"offset\":" + "\"" + getProperty(KYLIN_QUERY_OFFSET) + "\""
-        + "," + "\"limit\":" + "\"" + getProperty(KYLIN_QUERY_LIMIT) + "\"" + "}");
-    logger.info("post:" + postContent);
-    postContent = postContent.replaceAll("[\u0000-\u001f]", " ");
-    StringEntity entity = new StringEntity(postContent, "UTF-8");
-    entity.setContentType("application/json; charset=UTF-8");
-
-    logger.info("post url:" + getProperty(KYLIN_QUERY_API_URL));
-
-    HttpPost postRequest = new HttpPost(getProperty(KYLIN_QUERY_API_URL));
-    postRequest.setEntity(entity);
-    postRequest.addHeader("Authorization", "Basic " + new String(encodeBytes));
-    postRequest.addHeader("Accept-Encoding", "UTF-8");
-
-    HttpClient httpClient = HttpClientBuilder.create().build();
-    return httpClient.execute(postRequest);
-  }
-
-  public String getProject(String cmd) {
-    boolean isFirstLineProject = cmd.startsWith("(");
-
-    if (isFirstLineProject) {
-      int projectStartIndex = cmd.indexOf("(");
-      int projectEndIndex = cmd.indexOf(")");
-      if (projectStartIndex != -1 && projectEndIndex != -1) {
-        return cmd.substring(projectStartIndex + 1, projectEndIndex);
-      } else {
-        return getProperty(KYLIN_QUERY_PROJECT);
-      }
-    } else {
-      return getProperty(KYLIN_QUERY_PROJECT);
-    }
-  }
-
-  public String getSQL(String cmd) {
-    boolean isFirstLineProject = cmd.startsWith("(");
-
-    if (isFirstLineProject) {
-      int projectStartIndex = cmd.indexOf("(");
-      int projectEndIndex = cmd.indexOf(")");
-      if (projectStartIndex != -1 && projectEndIndex != -1) {
-        return cmd.substring(projectEndIndex + 1);
-      } else {
-        return cmd;
-      }
-    } else {
-      return cmd;
-    }
-  }
-
-  private InterpreterResult executeQuery(String sql) throws IOException {
-    HttpResponse response = prepareRequest(sql);
-    String result;
-
-    try {
-      int code = response.getStatusLine().getStatusCode();
-      result = IOUtils.toString(response.getEntity().getContent(), "UTF-8");
-
-      if (code != 200) {
-        StringBuilder errorMessage = new StringBuilder("Failed : HTTP error code " + code + " .");
-        logger.error("Failed to execute query: " + result);
-
-        KylinErrorResponse kylinErrorResponse = KylinErrorResponse.fromJson(result);
-        if (kylinErrorResponse == null) {
-          logger.error("Cannot get json from string: " + result);
-          // when code is 401, the response is html, not json
-          if (code == 401) {
-            errorMessage.append(" Error message: Unauthorized. This request requires "
-                + "HTTP authentication. Please make sure your have set your credentials "
-                + "correctly.");
-          } else {
-            errorMessage.append(" Error message: " + result + " .");
-          }
-        } else {
-          String exception = kylinErrorResponse.getException();
-          logger.error("The exception is " + exception);
-          errorMessage.append(" Error message: " + exception + " .");
-        }
-
-        return new InterpreterResult(InterpreterResult.Code.ERROR, errorMessage.toString());
-      }
-    } catch (NullPointerException | IOException e) {
-      throw new IOException(e);
-    }
-
-    return new InterpreterResult(InterpreterResult.Code.SUCCESS,
-        formatResult(result));
-  }
-
-  String formatResult(String msg) {
-    StringBuilder res = new StringBuilder("%table ");
-    
-    Matcher ml = KYLIN_TABLE_FORMAT_REGEX_LABEL.matcher(msg);
-    while (!ml.hitEnd() && ml.find()) {
-      res.append(ml.group(1) + " \t");
-    } 
-    res.append(" \n");
-    
-    Matcher mr = KYLIN_TABLE_FORMAT_REGEX_RESULTS.matcher(msg);
-    String table = null;
-    while (!mr.hitEnd() && mr.find()) {
-      table = mr.group(1);
-    }
-
-    if (table != null && !table.isEmpty()) {
-      String[] row = table.split("],\\[");
-      for (int i = 0; i < row.length; i++) {
-        String[] col = row[i].split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1);
-        for (int j = 0; j < col.length; j++) {
-          if (col[j] != null) {
-            col[j] = col[j].replaceAll("^\"|\"$", "");
-          }
-          res.append(col[j] + " \t");
-        }
-        res.append(" \n");
-      }
-    }
-    return res.toString();
-  }
-}
diff --git a/kylin/src/main/resources/interpreter-setting.json b/kylin/src/main/resources/interpreter-setting.json
deleted file mode 100644
index 88cf369692..0000000000
--- a/kylin/src/main/resources/interpreter-setting.json
+++ /dev/null
@@ -1,63 +0,0 @@
-[
-  {
-    "group": "kylin",
-    "name": "kylin",
-    "className": "org.apache.zeppelin.kylin.KylinInterpreter",
-    "properties": {
-      "kylin.api.url": {
-        "envName": null,
-        "propertyName": "kylin.api.url",
-        "defaultValue": "http://localhost:7070/kylin/api/query",
-        "description": "Kylin API",
-        "type": "url"
-      },
-      "kylin.api.user": {
-        "envName": null,
-        "propertyName": "kylin.api.user",
-        "defaultValue": "ADMIN",
-        "description": "Kylin username",
-        "type": "string"
-      },
-      "kylin.api.password": {
-        "envName": null,
-        "propertyName": "kylin.api.password",
-        "defaultValue": "KYLIN",
-        "description": "Kylin password",
-        "type": "password"
-      },
-      "kylin.query.project": {
-        "envName": null,
-        "propertyName": "kylin.query.project",
-        "defaultValue": "learn_kylin",
-        "description": "Default Kylin project name",
-        "type": "textarea"
-      },
-      "kylin.query.offset": {
-        "envName": null,
-        "propertyName": "kylin.query.offset",
-        "defaultValue": "0",
-        "description": "Kylin query offset",
-        "type": "number"
-      },
-      "kylin.query.limit": {
-        "envName": null,
-        "propertyName": "kylin.query.limit",
-        "defaultValue": "5000",
-        "description": "Kylin query limit",
-        "type": "number"
-      },
-      "kylin.query.ispartial": {
-        "envName": null,
-        "propertyName": "kylin.query.ispartial",
-        "defaultValue": true,
-        "description": "Kylin query partial flag, deprecated",
-        "type": "checkbox"
-      }
-    },
-    "editor": {
-      "language": "sql",
-      "editOnDblClick": false,
-      "completionSupport": true
-    }
-  }
-]
diff --git a/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java b/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java
deleted file mode 100755
index 66b6f9afb3..0000000000
--- a/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * 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.zeppelin.kylin;
-
-import static org.junit.Assert.assertEquals;
-
-import org.apache.http.Header;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.StatusLine;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.message.AbstractHttpMessage;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Locale;
-import java.util.Properties;
-
-import org.apache.zeppelin.interpreter.InterpreterResult;
-
-public class KylinInterpreterTest {
-  static final Properties KYLIN_PROPERTIES = new Properties();
-
-  @BeforeClass
-  public static void setUpClass() {
-    KYLIN_PROPERTIES.put("kylin.api.url", "http://localhost:7070/kylin/api/query");
-    KYLIN_PROPERTIES.put("kylin.api.user", "ADMIN");
-    KYLIN_PROPERTIES.put("kylin.api.password", "KYLIN");
-    KYLIN_PROPERTIES.put("kylin.query.project", "default");
-    KYLIN_PROPERTIES.put("kylin.query.offset", "0");
-    KYLIN_PROPERTIES.put("kylin.query.limit", "5000");
-    KYLIN_PROPERTIES.put("kylin.query.ispartial", "true");
-  }
-
-  @Test
-  public void testWithDefault() {
-    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
-    InterpreterResult result = t.interpret(
-        "select a.date,sum(b.measure) as measure from kylin_fact_table a " +
-            "inner join kylin_lookup_table b on a.date=b.date group by a.date", null);
-    assertEquals("default", t.getProject("select a.date,sum(b.measure) as measure "
-            + "from kylin_fact_table a inner join kylin_lookup_table b on a.date=b.date "
-            + "group by a.date"));
-    assertEquals(InterpreterResult.Type.TABLE, result.message().get(0).getType());
-  }
-
-  @Test
-  public void testWithProject() {
-    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
-    assertEquals("project2", t.getProject("(project2)\n select a.date,sum(b.measure) "
-            + "as measure from kylin_fact_table a inner join kylin_lookup_table b on "
-            + "a.date=b.date group by a.date"));
-    assertEquals("", t.getProject("()\n select a.date,sum(b.measure) as measure "
-            + "from kylin_fact_table a inner join kylin_lookup_table b on a.date=b.date "
-            + "group by a.date"));
-    assertEquals("\n select a.date,sum(b.measure) as measure from kylin_fact_table a "
-            + "inner join kylin_lookup_table b on a.date=b.date group by a.date",
-            t.getSQL("(project2)\n select a.date,sum(b.measure) as measure "
-                    + "from kylin_fact_table a inner join kylin_lookup_table b on a.date=b.date "
-                    + "group by a.date"));
-    assertEquals("\n select a.date,sum(b.measure) as measure from kylin_fact_table a "
-            + "inner join kylin_lookup_table b on a.date=b.date group by a.date",
-            t.getSQL("()\n select a.date,sum(b.measure) as measure from kylin_fact_table a "
-                    + "inner join kylin_lookup_table b on a.date=b.date group by a.date"));
-  }
-
-  @Test
-  public void testParseResult() {
-    String msg = "{\"columnMetas\":[{\"isNullable\":1,\"displaySize\":256,\"label\":\"COUNTRY\","
-            + "\"name\":\"COUNTRY\",\"schemaName\":\"DEFAULT\",\"catelogName\":null,"
-            + "\"tableName\":\"SALES_TABLE\",\"precision\":256,\"scale\":0,\"columnType\":12,"
-            + "\"columnTypeName\":\"VARCHAR\",\"writable\":false,\"readOnly\":true,"
-            + "\"definitelyWritable\":false,\"autoIncrement\":false,\"caseSensitive\":true,"
-            + "\"searchable\":false,\"currency\":false,\"signed\":true},{\"isNullable\":1,"
-            + "\"displaySize\":256,\"label\":\"CURRENCY\",\"name\":\"CURRENCY\","
-            + "\"schemaName\":\"DEFAULT\",\"catelogName\":null,\"tableName\":\"SALES_TABLE\","
-            + "\"precision\":256,\"scale\":0,\"columnType\":12,\"columnTypeName\":\"VARCHAR\","
-            + "\"writable\":false,\"readOnly\":true,\"definitelyWritable\":false,"
-            + "\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":false,"
-            + "\"currency\":false,\"signed\":true},{\"isNullable\":0,\"displaySize\":19,"
-            + "\"label\":\"COUNT__\",\"name\":\"COUNT__\",\"schemaName\":\"DEFAULT\","
-            + "\"catelogName\":null,\"tableName\":\"SALES_TABLE\",\"precision\":19,\"scale\":0,"
-            + "\"columnType\":-5,\"columnTypeName\":\"BIGINT\",\"writable\":false,"
-            + "\"readOnly\":true,\"definitelyWritable\":false,\"autoIncrement\":false,"
-            + "\"caseSensitive\":true,\"searchable\":false,\"currency\":false,\"signed\":true}],"
-            + "\"results\":[[\"AMERICA\",\"USD\",null],[null,\"RMB\",0],[\"KOR\",null,100],"
-            + "[\"\\\"abc\\\"\",\"a,b,c\",-1]],\"cube\":\"Sample_Cube\",\"affectedRowCount\":0,"
-            + "\"isException\":false,\"exceptionMessage\":null,\"duration\":134,"
-            + "\"totalScanCount\":1,\"hitExceptionCache\":false,\"storageCacheUsed\":false,"
-            + "\"partial\":false}";
-    String expected = "%table COUNTRY \tCURRENCY \tCOUNT__ \t \n" +
-            "AMERICA \tUSD \tnull \t \n" +
-            "null \tRMB \t0 \t \n" +
-            "KOR \tnull \t100 \t \n" +
-            "\\\"abc\\\" \ta,b,c \t-1 \t \n";
-    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
-    String actual = t.formatResult(msg);
-    Assert.assertEquals(expected, actual);
-  }
-
-  @Test
-  public void testParseEmptyResult() {
-    String msg = "{\"columnMetas\":[{\"isNullable\":1,\"displaySize\":256,\"label\":\"COUNTRY\","
-            + "\"name\":\"COUNTRY\",\"schemaName\":\"DEFAULT\",\"catelogName\":null,"
-            + "\"tableName\":\"SALES_TABLE\",\"precision\":256,\"scale\":0,\"columnType\":12,"
-            + "\"columnTypeName\":\"VARCHAR\",\"writable\":false,\"readOnly\":true,"
-            + "\"definitelyWritable\":false,\"autoIncrement\":false,\"caseSensitive\":true,"
-            + "\"searchable\":false,\"currency\":false,\"signed\":true},{\"isNullable\":1,"
-            + "\"displaySize\":256,\"label\":\"CURRENCY\",\"name\":\"CURRENCY\","
-            + "\"schemaName\":\"DEFAULT\",\"catelogName\":null,\"tableName\":\"SALES_TABLE\","
-            + "\"precision\":256,\"scale\":0,\"columnType\":12,\"columnTypeName\":\"VARCHAR\","
-            + "\"writable\":false,\"readOnly\":true,\"definitelyWritable\":false,"
-            + "\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":false,"
-            + "\"currency\":false,\"signed\":true},{\"isNullable\":0,\"displaySize\":19,"
-            + "\"label\":\"COUNT__\",\"name\":\"COUNT__\",\"schemaName\":\"DEFAULT\","
-            + "\"catelogName\":null,\"tableName\":\"SALES_TABLE\",\"precision\":19,\"scale\":0,"
-            + "\"columnType\":-5,\"columnTypeName\":\"BIGINT\",\"writable\":false,"
-            + "\"readOnly\":true,\"definitelyWritable\":false,\"autoIncrement\":false,"
-            + "\"caseSensitive\":true,\"searchable\":false,\"currency\":false,\"signed\":true}],"
-            + "\"results\":[]," + "\"cube\":\"Sample_Cube\",\"affectedRowCount\":0,"
-            + "\"isException\":false,\"exceptionMessage\":null,\"duration\":134,"
-            + "\"totalScanCount\":1,\"hitExceptionCache\":false,\"storageCacheUsed\":false,"
-            + "\"partial\":false}";
-    String expected = "%table COUNTRY \tCURRENCY \tCOUNT__ \t \n";
-    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
-    String actual = t.formatResult(msg);
-    Assert.assertEquals(expected, actual);
-  }
-
-  private Properties getDefaultProperties() {
-    Properties prop = new Properties();
-    prop.put("kylin.api.username", "ADMIN");
-    prop.put("kylin.api.password", "KYLIN");
-    prop.put("kylin.api.url", "http://<host>:<port>/kylin/api/query");
-    prop.put("kylin.query.project", "default");
-    prop.put("kylin.query.offset", "0");
-    prop.put("kylin.query.limit", "5000");
-    prop.put("kylin.query.ispartial", "true");
-    return prop;
-  }
-}
-
-class MockKylinInterpreter extends KylinInterpreter {
-  MockKylinInterpreter(Properties property) {
-    super(property);
-  }
-
-  @Override
-  public HttpResponse prepareRequest(String sql) throws IOException {
-    MockHttpClient client = new MockHttpClient();
-    return client.execute(new HttpPost());
-  }
-}
-
-class MockHttpClient{
-  public MockHttpResponse execute(HttpPost post){
-    return new MockHttpResponse();
-  }
-}
-
-class MockHttpResponse extends AbstractHttpMessage implements HttpResponse{
-  @Override
-  public StatusLine getStatusLine() {
-    return new MockStatusLine();
-  }
-
-  @Override
-  public void setStatusLine(StatusLine statusLine) {
-  }
-
-  @Override
-  public void setStatusLine(ProtocolVersion protocolVersion, int i) {
-  }
-
-  @Override
-  public void setStatusLine(ProtocolVersion protocolVersion, int i, String s) {
-  }
-
-  @Override
-  public void setStatusCode(int i) throws IllegalStateException {
-  }
-
-  @Override
-  public void setReasonPhrase(String s) throws IllegalStateException {
-  }
-
-  @Override
-  public HttpEntity getEntity() {
-    return new MockEntity();
-  }
-
-  @Override
-  public void setEntity(HttpEntity httpEntity) {
-  }
-
-  @Override
-  public Locale getLocale() {
-    return null;
-  }
-
-  @Override
-  public void setLocale(Locale locale) {
-  }
-
-  @Override
-  public ProtocolVersion getProtocolVersion() {
-    return null;
-  }
-}
-
-class MockStatusLine implements StatusLine{
-  @Override
-  public ProtocolVersion getProtocolVersion() {
-    return null;
-  }
-
-  @Override
-  public int getStatusCode() {
-    return 200;
-  }
-
-  @Override
-  public String getReasonPhrase() {
-    return null;
-  }
-}
-
-class MockEntity implements HttpEntity{
-  @Override
-  public boolean isRepeatable() {
-    return false;
-  }
-
-  @Override
-  public boolean isChunked() {
-    return false;
-  }
-
-  @Override
-  public long getContentLength() {
-    return 0;
-  }
-
-  @Override
-  public Header getContentType() {
-    return null;
-  }
-
-  @Override
-  public Header getContentEncoding() {
-    return null;
-  }
-
-  @Override
-  public InputStream getContent() throws IOException, IllegalStateException {
-    return new ByteArrayInputStream(("{\"columnMetas\":" +
-        "[{\"label\":\"PART_DT\"},{\"label\":\"measure\"}]," +
-        "\"results\":[[\"2012-01-03\",\"917.4138\"]," +
-        "[\"2012-05-06\",\"592.4823\"]]}").getBytes());
-  }
-
-  @Override
-  public void writeTo(OutputStream outputStream) throws IOException {
-  }
-
-  @Override
-  public boolean isStreaming() {
-    return false;
-  }
-
-  @Override
-  public void consumeContent() throws IOException {
-  }
-}
diff --git a/pom.xml b/pom.xml
index 78b011339c..da5b999307 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,7 +78,6 @@
     <module>flink-cmd</module>
     <module>ignite</module>
     <module>influxdb</module>
-    <module>kylin</module>
     <module>python</module>
     <module>cassandra</module>
     <module>elasticsearch</module>
diff --git a/zeppelin-distribution/src/bin_license/LICENSE b/zeppelin-distribution/src/bin_license/LICENSE
index 380b0a4349..a80dc4f4ea 100644
--- a/zeppelin-distribution/src/bin_license/LICENSE
+++ b/zeppelin-distribution/src/bin_license/LICENSE
@@ -34,7 +34,6 @@ The following components are provided under Apache License.
     (Apache 2.0) Apache Cassandra (http://cassandra.apache.org/)
     (Apache 2.0) Apache HBase (http://hbase.apache.org/)
     (Apache 2.0) Apache Ignite (http://ignite.apache.org/)
-    (Apache 2.0) Apache Kylin (http://kylin.apache.org/)
     (Apache 2.0) Apache Flink (http://flink.apache.org/)
     (Apache 2.0) Apache Jena (https://jena.apache.org/)
     (Apache 2.0) Apache Beam (http://beam.apache.org/)


Re: [zeppelin] branch master updated: [ZEPPELIN-5723] Remove Kylin interpreter (#4406)

Posted by emmanuel warreng <em...@gmail.com>.
Unsubscribe

On Wed, Jul 13, 2022, 18:08 <jo...@apache.org> wrote:

> This is an automated email from the ASF dual-hosted git repository.
>
> jongyoul pushed a commit to branch master
> in repository https://gitbox.apache.org/repos/asf/zeppelin.git
>
>
> The following commit(s) were added to refs/heads/master by this push:
>      new f24a43f415 [ZEPPELIN-5723] Remove Kylin interpreter (#4406)
> f24a43f415 is described below
>
> commit f24a43f415696f859fc67fe8c167c66f1e796121
> Author: yaini <80...@users.noreply.github.com>
> AuthorDate: Thu Jul 14 01:07:59 2022 +0900
>
>     [ZEPPELIN-5723] Remove Kylin interpreter (#4406)
> ---
>  .github/workflows/core.yml                         |   2 +-
>  .github/workflows/frontend.yml                     |   2 +-
>  Dockerfile                                         |   2 +-
>  conf/interpreter-list                              |   1 -
>  dev/create_release.sh                              |   2 +-
>  docs/_includes/themes/zeppelin/_navigation.html    |   1 -
>  docs/index.md                                      |   1 -
>  docs/interpreter/kylin.md                          |  82 ------
>  docs/interpreter/submarine.md                      |   2 +-
>  docs/quickstart/sql_with_zeppelin.md               |   1 -
>  docs/usage/interpreter/installation.md             |   5 -
>  docs/usage/other_features/zeppelin_context.md      |   2 +-
>  kylin/pom.xml                                      |  79 ------
>  .../apache/zeppelin/kylin/KylinErrorResponse.java  |  62 -----
>  .../apache/zeppelin/kylin/KylinInterpreter.java    | 237 -----------------
>  kylin/src/main/resources/interpreter-setting.json  |  63 -----
>  .../zeppelin/kylin/KylinInterpreterTest.java       | 295
> ---------------------
>  pom.xml                                            |   1 -
>  zeppelin-distribution/src/bin_license/LICENSE      |   1 -
>  19 files changed, 6 insertions(+), 835 deletions(-)
>
> diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
> index aceaf9fa11..4b3e42a369 100644
> --- a/.github/workflows/core.yml
> +++ b/.github/workflows/core.yml
> @@ -82,7 +82,7 @@ jobs:
>    interpreter-test-non-core:
>      runs-on: ubuntu-20.04
>      env:
> -      INTERPRETERS:
> 'beam,hbase,pig,jdbc,file,flink-cmd,ignite,kylin,cassandra,elasticsearch,bigquery,alluxio,scio,livy,groovy,sap,java,geode,neo4j,hazelcastjet,submarine,sparql,mongodb,influxdb,ksql,scalding'
> +      INTERPRETERS:
> 'beam,hbase,pig,jdbc,file,flink-cmd,ignite,cassandra,elasticsearch,bigquery,alluxio,scio,livy,groovy,sap,java,geode,neo4j,hazelcastjet,submarine,sparql,mongodb,influxdb,ksql,scalding'
>      steps:
>        - name: Checkout
>          uses: actions/checkout@v2
> diff --git a/.github/workflows/frontend.yml
> b/.github/workflows/frontend.yml
> index 34cdef2b0f..11624c66b9 100644
> --- a/.github/workflows/frontend.yml
> +++ b/.github/workflows/frontend.yml
> @@ -19,7 +19,7 @@ env:
>    SPARK_PRINT_LAUNCH_COMMAND: "true"
>    SPARK_LOCAL_IP: 127.0.0.1
>    ZEPPELIN_LOCAL_IP: 127.0.0.1
> -  INTERPRETERS:
> '!beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!kylin,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb'
> +  INTERPRETERS:
> '!beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb'
>
>  jobs:
>    run-e2e-tests-in-zeppelin-web:
> diff --git a/Dockerfile b/Dockerfile
> index 431b89c8cb..2aef45aa86 100644
> --- a/Dockerfile
> +++ b/Dockerfile
> @@ -23,7 +23,7 @@ RUN echo "unsafe-perm=true" > ~/.npmrc && \
>      echo '{ "allow_root": true }' > ~/.bowerrc && \
>      ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2
> -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular && \
>      # Example with doesn't compile all interpreters
> -    # ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2
> -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular -pl
> '!groovy,!submarine,!livy,!hbase,!pig,!file,!flink,!ignite,!kylin' && \
> +    # ./mvnw -B package -DskipTests -Pbuild-distr -Pspark-3.2
> -Pinclude-hadoop -Phadoop3 -Pspark-scala-2.12 -Pweb-angular -pl
> '!groovy,!submarine,!livy,!hbase,!pig,!file,!flink,!ignite' && \
>      mv
> /workspace/zeppelin/zeppelin-distribution/target/zeppelin-*/zeppelin-*
> /opt/zeppelin/ && \
>      # Removing stuff saves time, because docker creates a temporary layer
>      rm -rf ~/.m2 && \
> diff --git a/conf/interpreter-list b/conf/interpreter-list
> index c5e1dd8045..76584969c0 100644
> --- a/conf/interpreter-list
> +++ b/conf/interpreter-list
> @@ -33,7 +33,6 @@ ignite
> org.apache.zeppelin:zeppelin-ignite:0.10.0               Ignite
>  java            org.apache.zeppelin:zeppelin-java:0.10.0
>  Java interpreter
>  jdbc            org.apache.zeppelin:zeppelin-jdbc:0.10.0
>  Jdbc interpreter
>  kotlin          org.apache.zeppelin:zeppelin-kotlin:0.10.0
>  Kotlin interpreter
> -kylin           org.apache.zeppelin:zeppelin-kylin:0.10.0
> Kylin interpreter
>  livy            org.apache.zeppelin:zeppelin-livy:0.10.0
>  Livy interpreter
>  md              org.apache.zeppelin:zeppelin-markdown:0.10.0
>  Markdown support
>  neo4j           org.apache.zeppelin:zeppelin-neo4j:0.10.0
> Neo4j interpreter
> diff --git a/dev/create_release.sh b/dev/create_release.sh
> index 1f0c7ba6d9..a3bef0d1d5 100755
> --- a/dev/create_release.sh
> +++ b/dev/create_release.sh
> @@ -97,7 +97,7 @@ function make_binary_release() {
>
>  git_clone
>  make_source_package
> -make_binary_release netinst "-Pweb-angular -Phadoop-2.6 -pl
> !beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!kylin,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb,!ksql,!scalding
> -am"
> +make_binary_release netinst "-Pweb-angular -Phadoop-2.6 -pl
> !beam,!hbase,!pig,!jdbc,!file,!flink,!ignite,!cassandra,!elasticsearch,!bigquery,!alluxio,!scio,!livy,!groovy,!sap,!java,!geode,!neo4j,!hazelcastjet,!submarine,!sparql,!mongodb,!ksql,!scalding
> -am"
>  make_binary_release all "-Pweb-angular -Phadoop-2.6"
>
>  # remove non release files and dirs
> diff --git a/docs/_includes/themes/zeppelin/_navigation.html
> b/docs/_includes/themes/zeppelin/_navigation.html
> index f7d8e08ae8..205e8fc7fc 100644
> --- a/docs/_includes/themes/zeppelin/_navigation.html
> +++ b/docs/_includes/themes/zeppelin/_navigation.html
> @@ -155,7 +155,6 @@
>                  <li><a
> href="{{BASE_PATH}}/interpreter/jupyter.html">Jupyter</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/kotlin.html">Kotlin</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/ksql.html">KSQL</a></li>
> -                <li><a
> href="{{BASE_PATH}}/interpreter/kylin.html">Kylin</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/livy.html">Livy</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/mahout.html">Mahout</a></li>
>                  <li><a
> href="{{BASE_PATH}}/interpreter/markdown.html">Markdown</a></li>
> diff --git a/docs/index.md b/docs/index.md
> index 0b0cb8f41b..d955496160 100644
> --- a/docs/index.md
> +++ b/docs/index.md
> @@ -153,7 +153,6 @@ limitations under the License.
>    * [Jupyter](./interpreter/jupyter.html)
>    * [Kotlin](./interpreter/kotlin.html)
>    * [KSQL](./interpreter/ksql.html)
> -  * [Kylin](./interpreter/kylin.html)
>    * [Livy](./interpreter/livy.html)
>    * [Mahout](./interpreter/mahout.html)
>    * [Markdown](./interpreter/markdown.html)
> diff --git a/docs/interpreter/kylin.md b/docs/interpreter/kylin.md
> deleted file mode 100644
> index 1f2b0f3ab4..0000000000
> --- a/docs/interpreter/kylin.md
> +++ /dev/null
> @@ -1,82 +0,0 @@
> ----
> -layout: page
> -title: "Apache Kylin Interpreter for Apache Zeppelin"
> -description: "Apache Kylin™ is an open source Distributed Analytics
> Engine designed to provide SQL interface and multi-dimensional analysis
> (OLAP) on Hadoop supporting extremely large datasets, original contributed
> from eBay Inc.
> -."
> -group: interpreter
> ----
> -<!--
> -Licensed 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.
> --->
> -{% include JB/setup %}
> -
> -# Apache Kylin Interpreter for Apache Zeppelin
> -
> -<div id="toc"></div>
> -
> -## Overview
> -[Apache Kylin](https://kylin.apache.org/) is an open source Distributed
> Analytics Engine designed to provide SQL interface and multi-dimensional
> analysis (OLAP) on Hadoop supporting extremely large datasets, original
> contributed from eBay Inc. The interpreter assumes that Apache Kylin has
> been installed and you can connect to Apache Kylin from the machine Apache
> Zeppelin is installed.
> -To get start with Apache Kylin, please see [Apache Kylin Quickstart](
> https://kylin.apache.org/docs15/index.html).
> -
> -## Configuration
> -<table class="table-configuration">
> -  <tr>
> -    <th>Name</th>
> -    <th>Default</th>
> -    <th>Description</th>
> -  </tr>
> -  <tr>
> -    <td>kylin.api.url </td>
> -    <td>http://localhost:7070/kylin/api/query</td>
> -    <td>kylin query POST API <br/> The format can be like http://
> &lt;host&gt;:&lt;port&gt;/kylin/api/query</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.api.user</td>
> -    <td>ADMIN</td>
> -    <td>kylin user</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.api.password</td>
> -    <td>KYLIN</td>
> -    <td>kylin password</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.query.project</td>
> -    <td>learn_kylin</td>
> -    <td>String, Project to perform query. Could update at notebook
> level</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.query.ispartial</td>
> -    <td>true</td>
> -    <td>true|false <br/> (@Deprecated since Apache Kylin V1.5) <br/>
> Whether accept a partial result or not, default be “false”. Set to “false”
> for production use.</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.query.limit</td>
> -    <td>5000</td>
> -    <td>int, Query limit <br/> If limit is set in sql, perPage will be
> ignored.</td>
> -  </tr>
> -  <tr>
> -    <td>kylin.query.offset</td>
> -    <td>0</td>
> -    <td>int, Query offset <br/> If offset is set in sql, curIndex will be
> ignored.</td>
> -  </tr>
> -</table>
> -
> -## Using the Apache Kylin Interpreter
> -In a paragraph, use `%kylin(project_name)` to select the **kylin**
> interpreter, **project name** and then input **sql**. If no project name
> defined, will use the default project name from the above configuration.
> -
> -```sql
> -%kylin(learn_project)
> -select count(*) from kylin_sales group by part_dt
> -```
> -
> diff --git a/docs/interpreter/submarine.md b/docs/interpreter/submarine.md
> index 97be1bb7e0..cfad6255fc 100644
> --- a/docs/interpreter/submarine.md
> +++ b/docs/interpreter/submarine.md
> @@ -27,7 +27,7 @@ limitations under the License.
>
>  A deep learning algorithm project requires data acquisition, data
> processing, data cleaning, interactive visual programming adjustment
> parameters, algorithm testing, algorithm publishing, algorithm job
> scheduling, offline model training, model online services and many other
> processes and processes. Zeppelin is a web-based notebook that supports
> interactive data analysis. You can use SQL, Scala, Python, etc. to make
> data-driven, interactive, collaborative documents.
>
> -You can use the more than 20 interpreters in zeppelin (for example:
> spark, hive, Cassandra, Elasticsearch, Kylin, HBase, etc.) to collect data,
> clean data, feature extraction, etc. in the data in Hadoop before
> completing the machine learning model training. The data preprocessing
> process.
> +You can use the more than 20 interpreters in zeppelin (for example:
> spark, hive, Cassandra, Elasticsearch, HBase, etc.) to collect data, clean
> data, feature extraction, etc. in the data in Hadoop before completing the
> machine learning model training. The data preprocessing process.
>
>  By integrating submarine in zeppelin, we use zeppelin's data discovery,
> data analysis and data visualization and collaboration capabilities to
> visualize the results of algorithm development and parameter adjustment
> during machine learning model training.
>
> diff --git a/docs/quickstart/sql_with_zeppelin.md
> b/docs/quickstart/sql_with_zeppelin.md
> index da709d5b94..39d57291a3 100644
> --- a/docs/quickstart/sql_with_zeppelin.md
> +++ b/docs/quickstart/sql_with_zeppelin.md
> @@ -63,7 +63,6 @@ For the further information about SQL support in
> Zeppelin, please check
>  - [Flink Interpreter](../interpreter/flink.html)
>  - [Python Interpreter](../interpreter/python.html)
>  - [IgniteSQL
> Interpreter](../interpreter/ignite.html#ignite-sql-interpreter) for [Apache
> Ignite](https://ignite.apache.org/)
> -- [Kylin Interpreter](../interpreter/kylin.html) for [Apache Kylin](
> http://kylin.apache.org/)
>
>
>
> diff --git a/docs/usage/interpreter/installation.md
> b/docs/usage/interpreter/installation.md
> index 3aec553c17..2e26b19896 100644
> --- a/docs/usage/interpreter/installation.md
> +++ b/docs/usage/interpreter/installation.md
> @@ -193,11 +193,6 @@ You can also find the below community managed
> interpreter list in `conf/interpre
>      <td>org.apache.zeppelin:zeppelin-kotlin:0.7.0</td>
>      <td>Kotlin interpreter</td>
>    </tr>
> -  <tr>
> -    <td>kylin</td>
> -    <td>org.apache.zeppelin:zeppelin-kylin:0.10.0</td>
> -    <td>Kylin interpreter</td>
> -  </tr>
>    <tr>
>      <td>livy</td>
>      <td>org.apache.zeppelin:zeppelin-livy:0.10.0</td>
> diff --git a/docs/usage/other_features/zeppelin_context.md
> b/docs/usage/other_features/zeppelin_context.md
> index 7b251719c3..784e1f34b8 100644
> --- a/docs/usage/other_features/zeppelin_context.md
> +++ b/docs/usage/other_features/zeppelin_context.md
> @@ -235,7 +235,7 @@ dynamic-forms and object-interpolation as described
> below.
>
>  |             Interpreters that use Embedded Commands               |
>  |-------------------------------------------------------------------|
> -|spark.sql (\*), bigquery, cassandra, elasticsearch, file, hbase, ignite,
> jdbc (\*), kylin, livy, markdown, neo4j, pig, python, shell (\*), zengine |
> +|spark.sql (\*), bigquery, cassandra, elasticsearch, file, hbase, ignite,
> jdbc (\*), livy, markdown, neo4j, pig, python, shell (\*), zengine |
>
>  Dynamic forms are available in all of the interpreters in the table
> above,
>  but object interpolation is only available in a small, but growing, list
> of interpreters
> diff --git a/kylin/pom.xml b/kylin/pom.xml
> deleted file mode 100644
> index e21a6892ed..0000000000
> --- a/kylin/pom.xml
> +++ /dev/null
> @@ -1,79 +0,0 @@
> -<?xml version="1.0" encoding="UTF-8"?>
> -<!--
> -  ~ 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.
> -  -->
> -
> -
> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"
> -  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> https://maven.apache.org/xsd/maven-4.0.0.xsd">
> -    <modelVersion>4.0.0</modelVersion>
> -
> -    <parent>
> -        <artifactId>zeppelin-interpreter-parent</artifactId>
> -        <groupId>org.apache.zeppelin</groupId>
> -        <version>0.11.0-SNAPSHOT</version>
> -
> <relativePath>../zeppelin-interpreter-parent/pom.xml</relativePath>
> -    </parent>
> -
> -    <artifactId>zeppelin-kylin</artifactId>
> -    <packaging>jar</packaging>
> -    <name>Zeppelin: Kylin interpreter</name>
> -
> -    <properties>
> -        <interpreter.name>kylin</interpreter.name>
> -    </properties>
> -
> -    <dependencies>
> -        <dependency>
> -            <groupId>com.google.code.gson</groupId>
> -            <artifactId>gson</artifactId>
> -        </dependency>
> -
> -        <dependency>
> -            <groupId>org.apache.httpcomponents</groupId>
> -            <artifactId>httpclient</artifactId>
> -        </dependency>
> -        <dependency>
> -            <groupId>commons-codec</groupId>
> -            <artifactId>commons-codec</artifactId>
> -        </dependency>
> -        <dependency>
> -            <groupId>commons-io</groupId>
> -            <artifactId>commons-io</artifactId>
> -        </dependency>
> -    </dependencies>
> -
> -    <build>
> -        <plugins>
> -            <plugin>
> -                <artifactId>maven-enforcer-plugin</artifactId>
> -            </plugin>
> -            <plugin>
> -                <artifactId>maven-resources-plugin</artifactId>
> -            </plugin>
> -            <plugin>
> -                <artifactId>maven-shade-plugin</artifactId>
> -            </plugin>
> -            <plugin>
> -                <groupId>org.apache.maven.plugins</groupId>
> -                <artifactId>maven-checkstyle-plugin</artifactId>
> -                <configuration>
> -                    <skip>false</skip>
> -                </configuration>
> -            </plugin>
> -        </plugins>
> -    </build>
> -</project>
> diff --git
> a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java
> b/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java
> deleted file mode 100644
> index 04d04797cc..0000000000
> --- a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinErrorResponse.java
> +++ /dev/null
> @@ -1,62 +0,0 @@
> -/*
> - * 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.zeppelin.kylin;
> -
> -import com.google.gson.Gson;
> -import com.google.gson.JsonSyntaxException;
> -import org.apache.zeppelin.common.JsonSerializable;
> -
> -/**
> - * class for Kylin Error Response.
> - */
> -class KylinErrorResponse implements JsonSerializable {
> -  private static final Gson gson = new Gson();
> -
> -  private String stacktrace;
> -  private String exception;
> -  private String url;
> -  private String code;
> -  private Object data;
> -  private String msg;
> -
> -  KylinErrorResponse(String stacktrace, String exception, String url,
> -      String code, Object data, String msg) {
> -    this.stacktrace = stacktrace;
> -    this.exception = exception;
> -    this.url = url;
> -    this.code = code;
> -    this.data = data;
> -    this.msg = msg;
> -  }
> -
> -  public String getException() {
> -    return exception;
> -  }
> -
> -  public String toJson() {
> -    return gson.toJson(this);
> -  }
> -
> -  public static KylinErrorResponse fromJson(String json) {
> -    try {
> -      return gson.fromJson(json, KylinErrorResponse.class);
> -    } catch (JsonSyntaxException ex) {
> -      return null;
> -    }
> -  }
> -}
> diff --git
> a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java
> b/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java
> deleted file mode 100755
> index 444f5cbc28..0000000000
> --- a/kylin/src/main/java/org/apache/zeppelin/kylin/KylinInterpreter.java
> +++ /dev/null
> @@ -1,237 +0,0 @@
> -/*
> - * 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.zeppelin.kylin;
> -
> -import org.apache.commons.codec.binary.Base64;
> -import org.apache.commons.io.IOUtils;
> -import org.apache.http.HttpResponse;
> -import org.apache.http.client.HttpClient;
> -import org.apache.http.client.methods.HttpPost;
> -import org.apache.http.entity.StringEntity;
> -import org.apache.http.impl.client.HttpClientBuilder;
> -import org.slf4j.Logger;
> -import org.slf4j.LoggerFactory;
> -
> -import java.io.IOException;
> -import java.util.List;
> -import java.util.Properties;
> -import java.util.regex.Matcher;
> -import java.util.regex.Pattern;
> -
> -import org.apache.zeppelin.interpreter.Interpreter;
> -import org.apache.zeppelin.interpreter.InterpreterContext;
> -import org.apache.zeppelin.interpreter.InterpreterResult;
> -import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion;
> -
> -/**
> - * Kylin interpreter for Zeppelin. (http://kylin.apache.org)
> - */
> -public class KylinInterpreter extends Interpreter {
> -  Logger logger = LoggerFactory.getLogger(KylinInterpreter.class);
> -
> -  static final String KYLIN_QUERY_API_URL = "kylin.api.url";
> -  static final String KYLIN_USERNAME = "kylin.api.user";
> -  static final String KYLIN_PASSWORD = "kylin.api.password";
> -  static final String KYLIN_QUERY_PROJECT = "kylin.query.project";
> -  static final String KYLIN_QUERY_OFFSET = "kylin.query.offset";
> -  static final String KYLIN_QUERY_LIMIT = "kylin.query.limit";
> -  static final String KYLIN_QUERY_ACCEPT_PARTIAL =
> "kylin.query.ispartial";
> -  static final Pattern KYLIN_TABLE_FORMAT_REGEX_LABEL =
> Pattern.compile("\"label\":\"(.*?)\"");
> -  static final Pattern KYLIN_TABLE_FORMAT_REGEX_RESULTS =
> -          Pattern.compile("\"results\":\\[\\[(.*?)]]");
> -
> -  public KylinInterpreter(Properties property) {
> -    super(property);
> -  }
> -
> -  @Override
> -  public void open() {
> -
> -  }
> -
> -  @Override
> -  public void close() {
> -
> -  }
> -
> -  @Override
> -  public InterpreterResult interpret(String st, InterpreterContext
> context) {
> -    try {
> -      return executeQuery(st);
> -    } catch (IOException e) {
> -      logger.error("failed to query data in kylin ", e);
> -      return new InterpreterResult(InterpreterResult.Code.ERROR,
> e.getMessage());
> -    }
> -  }
> -
> -  @Override
> -  public void cancel(InterpreterContext context) {
> -
> -  }
> -
> -  @Override
> -  public FormType getFormType() {
> -    return FormType.SIMPLE;
> -  }
> -
> -  @Override
> -  public int getProgress(InterpreterContext context) {
> -    return 0;
> -  }
> -
> -  @Override
> -  public List<InterpreterCompletion> completion(String buf, int cursor,
> -      InterpreterContext interpreterContext) {
> -    return null;
> -  }
> -
> -  public HttpResponse prepareRequest(String sql) throws IOException {
> -    String kylinProject = getProject(sql);
> -    String kylinSql = getSQL(sql);
> -
> -    logger.info("project:" + kylinProject);
> -    logger.info("sql:" + kylinSql);
> -    logger.info("acceptPartial:" +
> getProperty(KYLIN_QUERY_ACCEPT_PARTIAL));
> -    logger.info("limit:" + getProperty(KYLIN_QUERY_LIMIT));
> -    logger.info("offset:" + getProperty(KYLIN_QUERY_OFFSET));
> -    byte[] encodeBytes = Base64.encodeBase64(new
> String(getProperty(KYLIN_USERNAME)
> -        + ":" + getProperty(KYLIN_PASSWORD)).getBytes("UTF-8"));
> -
> -    String postContent = new String("{\"project\":" + "\"" + kylinProject
> + "\""
> -        + "," + "\"sql\":" + "\"" + kylinSql + "\""
> -        + "," + "\"acceptPartial\":" + "\"" +
> getProperty(KYLIN_QUERY_ACCEPT_PARTIAL) + "\""
> -        + "," + "\"offset\":" + "\"" + getProperty(KYLIN_QUERY_OFFSET) +
> "\""
> -        + "," + "\"limit\":" + "\"" + getProperty(KYLIN_QUERY_LIMIT) +
> "\"" + "}");
> -    logger.info("post:" + postContent);
> -    postContent = postContent.replaceAll("[\u0000-\u001f]", " ");
> -    StringEntity entity = new StringEntity(postContent, "UTF-8");
> -    entity.setContentType("application/json; charset=UTF-8");
> -
> -    logger.info("post url:" + getProperty(KYLIN_QUERY_API_URL));
> -
> -    HttpPost postRequest = new HttpPost(getProperty(KYLIN_QUERY_API_URL));
> -    postRequest.setEntity(entity);
> -    postRequest.addHeader("Authorization", "Basic " + new
> String(encodeBytes));
> -    postRequest.addHeader("Accept-Encoding", "UTF-8");
> -
> -    HttpClient httpClient = HttpClientBuilder.create().build();
> -    return httpClient.execute(postRequest);
> -  }
> -
> -  public String getProject(String cmd) {
> -    boolean isFirstLineProject = cmd.startsWith("(");
> -
> -    if (isFirstLineProject) {
> -      int projectStartIndex = cmd.indexOf("(");
> -      int projectEndIndex = cmd.indexOf(")");
> -      if (projectStartIndex != -1 && projectEndIndex != -1) {
> -        return cmd.substring(projectStartIndex + 1, projectEndIndex);
> -      } else {
> -        return getProperty(KYLIN_QUERY_PROJECT);
> -      }
> -    } else {
> -      return getProperty(KYLIN_QUERY_PROJECT);
> -    }
> -  }
> -
> -  public String getSQL(String cmd) {
> -    boolean isFirstLineProject = cmd.startsWith("(");
> -
> -    if (isFirstLineProject) {
> -      int projectStartIndex = cmd.indexOf("(");
> -      int projectEndIndex = cmd.indexOf(")");
> -      if (projectStartIndex != -1 && projectEndIndex != -1) {
> -        return cmd.substring(projectEndIndex + 1);
> -      } else {
> -        return cmd;
> -      }
> -    } else {
> -      return cmd;
> -    }
> -  }
> -
> -  private InterpreterResult executeQuery(String sql) throws IOException {
> -    HttpResponse response = prepareRequest(sql);
> -    String result;
> -
> -    try {
> -      int code = response.getStatusLine().getStatusCode();
> -      result = IOUtils.toString(response.getEntity().getContent(),
> "UTF-8");
> -
> -      if (code != 200) {
> -        StringBuilder errorMessage = new StringBuilder("Failed : HTTP
> error code " + code + " .");
> -        logger.error("Failed to execute query: " + result);
> -
> -        KylinErrorResponse kylinErrorResponse =
> KylinErrorResponse.fromJson(result);
> -        if (kylinErrorResponse == null) {
> -          logger.error("Cannot get json from string: " + result);
> -          // when code is 401, the response is html, not json
> -          if (code == 401) {
> -            errorMessage.append(" Error message: Unauthorized. This
> request requires "
> -                + "HTTP authentication. Please make sure your have set
> your credentials "
> -                + "correctly.");
> -          } else {
> -            errorMessage.append(" Error message: " + result + " .");
> -          }
> -        } else {
> -          String exception = kylinErrorResponse.getException();
> -          logger.error("The exception is " + exception);
> -          errorMessage.append(" Error message: " + exception + " .");
> -        }
> -
> -        return new InterpreterResult(InterpreterResult.Code.ERROR,
> errorMessage.toString());
> -      }
> -    } catch (NullPointerException | IOException e) {
> -      throw new IOException(e);
> -    }
> -
> -    return new InterpreterResult(InterpreterResult.Code.SUCCESS,
> -        formatResult(result));
> -  }
> -
> -  String formatResult(String msg) {
> -    StringBuilder res = new StringBuilder("%table ");
> -
> -    Matcher ml = KYLIN_TABLE_FORMAT_REGEX_LABEL.matcher(msg);
> -    while (!ml.hitEnd() && ml.find()) {
> -      res.append(ml.group(1) + " \t");
> -    }
> -    res.append(" \n");
> -
> -    Matcher mr = KYLIN_TABLE_FORMAT_REGEX_RESULTS.matcher(msg);
> -    String table = null;
> -    while (!mr.hitEnd() && mr.find()) {
> -      table = mr.group(1);
> -    }
> -
> -    if (table != null && !table.isEmpty()) {
> -      String[] row = table.split("],\\[");
> -      for (int i = 0; i < row.length; i++) {
> -        String[] col = row[i].split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)",
> -1);
> -        for (int j = 0; j < col.length; j++) {
> -          if (col[j] != null) {
> -            col[j] = col[j].replaceAll("^\"|\"$", "");
> -          }
> -          res.append(col[j] + " \t");
> -        }
> -        res.append(" \n");
> -      }
> -    }
> -    return res.toString();
> -  }
> -}
> diff --git a/kylin/src/main/resources/interpreter-setting.json
> b/kylin/src/main/resources/interpreter-setting.json
> deleted file mode 100644
> index 88cf369692..0000000000
> --- a/kylin/src/main/resources/interpreter-setting.json
> +++ /dev/null
> @@ -1,63 +0,0 @@
> -[
> -  {
> -    "group": "kylin",
> -    "name": "kylin",
> -    "className": "org.apache.zeppelin.kylin.KylinInterpreter",
> -    "properties": {
> -      "kylin.api.url": {
> -        "envName": null,
> -        "propertyName": "kylin.api.url",
> -        "defaultValue": "http://localhost:7070/kylin/api/query",
> -        "description": "Kylin API",
> -        "type": "url"
> -      },
> -      "kylin.api.user": {
> -        "envName": null,
> -        "propertyName": "kylin.api.user",
> -        "defaultValue": "ADMIN",
> -        "description": "Kylin username",
> -        "type": "string"
> -      },
> -      "kylin.api.password": {
> -        "envName": null,
> -        "propertyName": "kylin.api.password",
> -        "defaultValue": "KYLIN",
> -        "description": "Kylin password",
> -        "type": "password"
> -      },
> -      "kylin.query.project": {
> -        "envName": null,
> -        "propertyName": "kylin.query.project",
> -        "defaultValue": "learn_kylin",
> -        "description": "Default Kylin project name",
> -        "type": "textarea"
> -      },
> -      "kylin.query.offset": {
> -        "envName": null,
> -        "propertyName": "kylin.query.offset",
> -        "defaultValue": "0",
> -        "description": "Kylin query offset",
> -        "type": "number"
> -      },
> -      "kylin.query.limit": {
> -        "envName": null,
> -        "propertyName": "kylin.query.limit",
> -        "defaultValue": "5000",
> -        "description": "Kylin query limit",
> -        "type": "number"
> -      },
> -      "kylin.query.ispartial": {
> -        "envName": null,
> -        "propertyName": "kylin.query.ispartial",
> -        "defaultValue": true,
> -        "description": "Kylin query partial flag, deprecated",
> -        "type": "checkbox"
> -      }
> -    },
> -    "editor": {
> -      "language": "sql",
> -      "editOnDblClick": false,
> -      "completionSupport": true
> -    }
> -  }
> -]
> diff --git
> a/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java
> b/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java
> deleted file mode 100755
> index 66b6f9afb3..0000000000
> ---
> a/kylin/src/test/java/org/apache/zeppelin/kylin/KylinInterpreterTest.java
> +++ /dev/null
> @@ -1,295 +0,0 @@
> -/*
> - * 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.zeppelin.kylin;
> -
> -import static org.junit.Assert.assertEquals;
> -
> -import org.apache.http.Header;
> -import org.apache.http.HttpEntity;
> -import org.apache.http.HttpResponse;
> -import org.apache.http.ProtocolVersion;
> -import org.apache.http.StatusLine;
> -import org.apache.http.client.methods.HttpPost;
> -import org.apache.http.message.AbstractHttpMessage;
> -import org.junit.Assert;
> -import org.junit.BeforeClass;
> -import org.junit.Test;
> -
> -import java.io.ByteArrayInputStream;
> -import java.io.IOException;
> -import java.io.InputStream;
> -import java.io.OutputStream;
> -import java.util.Locale;
> -import java.util.Properties;
> -
> -import org.apache.zeppelin.interpreter.InterpreterResult;
> -
> -public class KylinInterpreterTest {
> -  static final Properties KYLIN_PROPERTIES = new Properties();
> -
> -  @BeforeClass
> -  public static void setUpClass() {
> -    KYLIN_PROPERTIES.put("kylin.api.url", "
> http://localhost:7070/kylin/api/query");
> -    KYLIN_PROPERTIES.put("kylin.api.user", "ADMIN");
> -    KYLIN_PROPERTIES.put("kylin.api.password", "KYLIN");
> -    KYLIN_PROPERTIES.put("kylin.query.project", "default");
> -    KYLIN_PROPERTIES.put("kylin.query.offset", "0");
> -    KYLIN_PROPERTIES.put("kylin.query.limit", "5000");
> -    KYLIN_PROPERTIES.put("kylin.query.ispartial", "true");
> -  }
> -
> -  @Test
> -  public void testWithDefault() {
> -    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
> -    InterpreterResult result = t.interpret(
> -        "select a.date,sum(b.measure) as measure from kylin_fact_table a
> " +
> -            "inner join kylin_lookup_table b on a.date=b.date group by
> a.date", null);
> -    assertEquals("default", t.getProject("select a.date,sum(b.measure) as
> measure "
> -            + "from kylin_fact_table a inner join kylin_lookup_table b on
> a.date=b.date "
> -            + "group by a.date"));
> -    assertEquals(InterpreterResult.Type.TABLE,
> result.message().get(0).getType());
> -  }
> -
> -  @Test
> -  public void testWithProject() {
> -    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
> -    assertEquals("project2", t.getProject("(project2)\n select
> a.date,sum(b.measure) "
> -            + "as measure from kylin_fact_table a inner join
> kylin_lookup_table b on "
> -            + "a.date=b.date group by a.date"));
> -    assertEquals("", t.getProject("()\n select a.date,sum(b.measure) as
> measure "
> -            + "from kylin_fact_table a inner join kylin_lookup_table b on
> a.date=b.date "
> -            + "group by a.date"));
> -    assertEquals("\n select a.date,sum(b.measure) as measure from
> kylin_fact_table a "
> -            + "inner join kylin_lookup_table b on a.date=b.date group by
> a.date",
> -            t.getSQL("(project2)\n select a.date,sum(b.measure) as
> measure "
> -                    + "from kylin_fact_table a inner join
> kylin_lookup_table b on a.date=b.date "
> -                    + "group by a.date"));
> -    assertEquals("\n select a.date,sum(b.measure) as measure from
> kylin_fact_table a "
> -            + "inner join kylin_lookup_table b on a.date=b.date group by
> a.date",
> -            t.getSQL("()\n select a.date,sum(b.measure) as measure from
> kylin_fact_table a "
> -                    + "inner join kylin_lookup_table b on a.date=b.date
> group by a.date"));
> -  }
> -
> -  @Test
> -  public void testParseResult() {
> -    String msg =
> "{\"columnMetas\":[{\"isNullable\":1,\"displaySize\":256,\"label\":\"COUNTRY\","
> -            +
> "\"name\":\"COUNTRY\",\"schemaName\":\"DEFAULT\",\"catelogName\":null,"
> -            +
> "\"tableName\":\"SALES_TABLE\",\"precision\":256,\"scale\":0,\"columnType\":12,"
> -            +
> "\"columnTypeName\":\"VARCHAR\",\"writable\":false,\"readOnly\":true,"
> -            +
> "\"definitelyWritable\":false,\"autoIncrement\":false,\"caseSensitive\":true,"
> -            +
> "\"searchable\":false,\"currency\":false,\"signed\":true},{\"isNullable\":1,"
> -            +
> "\"displaySize\":256,\"label\":\"CURRENCY\",\"name\":\"CURRENCY\","
> -            +
> "\"schemaName\":\"DEFAULT\",\"catelogName\":null,\"tableName\":\"SALES_TABLE\","
> -            +
> "\"precision\":256,\"scale\":0,\"columnType\":12,\"columnTypeName\":\"VARCHAR\","
> -            +
> "\"writable\":false,\"readOnly\":true,\"definitelyWritable\":false,"
> -            +
> "\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":false,"
> -            +
> "\"currency\":false,\"signed\":true},{\"isNullable\":0,\"displaySize\":19,"
> -            +
> "\"label\":\"COUNT__\",\"name\":\"COUNT__\",\"schemaName\":\"DEFAULT\","
> -            +
> "\"catelogName\":null,\"tableName\":\"SALES_TABLE\",\"precision\":19,\"scale\":0,"
> -            +
> "\"columnType\":-5,\"columnTypeName\":\"BIGINT\",\"writable\":false,"
> -            +
> "\"readOnly\":true,\"definitelyWritable\":false,\"autoIncrement\":false,"
> -            +
> "\"caseSensitive\":true,\"searchable\":false,\"currency\":false,\"signed\":true}],"
> -            +
> "\"results\":[[\"AMERICA\",\"USD\",null],[null,\"RMB\",0],[\"KOR\",null,100],"
> -            +
> "[\"\\\"abc\\\"\",\"a,b,c\",-1]],\"cube\":\"Sample_Cube\",\"affectedRowCount\":0,"
> -            +
> "\"isException\":false,\"exceptionMessage\":null,\"duration\":134,"
> -            +
> "\"totalScanCount\":1,\"hitExceptionCache\":false,\"storageCacheUsed\":false,"
> -            + "\"partial\":false}";
> -    String expected = "%table COUNTRY \tCURRENCY \tCOUNT__ \t \n" +
> -            "AMERICA \tUSD \tnull \t \n" +
> -            "null \tRMB \t0 \t \n" +
> -            "KOR \tnull \t100 \t \n" +
> -            "\\\"abc\\\" \ta,b,c \t-1 \t \n";
> -    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
> -    String actual = t.formatResult(msg);
> -    Assert.assertEquals(expected, actual);
> -  }
> -
> -  @Test
> -  public void testParseEmptyResult() {
> -    String msg =
> "{\"columnMetas\":[{\"isNullable\":1,\"displaySize\":256,\"label\":\"COUNTRY\","
> -            +
> "\"name\":\"COUNTRY\",\"schemaName\":\"DEFAULT\",\"catelogName\":null,"
> -            +
> "\"tableName\":\"SALES_TABLE\",\"precision\":256,\"scale\":0,\"columnType\":12,"
> -            +
> "\"columnTypeName\":\"VARCHAR\",\"writable\":false,\"readOnly\":true,"
> -            +
> "\"definitelyWritable\":false,\"autoIncrement\":false,\"caseSensitive\":true,"
> -            +
> "\"searchable\":false,\"currency\":false,\"signed\":true},{\"isNullable\":1,"
> -            +
> "\"displaySize\":256,\"label\":\"CURRENCY\",\"name\":\"CURRENCY\","
> -            +
> "\"schemaName\":\"DEFAULT\",\"catelogName\":null,\"tableName\":\"SALES_TABLE\","
> -            +
> "\"precision\":256,\"scale\":0,\"columnType\":12,\"columnTypeName\":\"VARCHAR\","
> -            +
> "\"writable\":false,\"readOnly\":true,\"definitelyWritable\":false,"
> -            +
> "\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":false,"
> -            +
> "\"currency\":false,\"signed\":true},{\"isNullable\":0,\"displaySize\":19,"
> -            +
> "\"label\":\"COUNT__\",\"name\":\"COUNT__\",\"schemaName\":\"DEFAULT\","
> -            +
> "\"catelogName\":null,\"tableName\":\"SALES_TABLE\",\"precision\":19,\"scale\":0,"
> -            +
> "\"columnType\":-5,\"columnTypeName\":\"BIGINT\",\"writable\":false,"
> -            +
> "\"readOnly\":true,\"definitelyWritable\":false,\"autoIncrement\":false,"
> -            +
> "\"caseSensitive\":true,\"searchable\":false,\"currency\":false,\"signed\":true}],"
> -            + "\"results\":[]," +
> "\"cube\":\"Sample_Cube\",\"affectedRowCount\":0,"
> -            +
> "\"isException\":false,\"exceptionMessage\":null,\"duration\":134,"
> -            +
> "\"totalScanCount\":1,\"hitExceptionCache\":false,\"storageCacheUsed\":false,"
> -            + "\"partial\":false}";
> -    String expected = "%table COUNTRY \tCURRENCY \tCOUNT__ \t \n";
> -    KylinInterpreter t = new MockKylinInterpreter(getDefaultProperties());
> -    String actual = t.formatResult(msg);
> -    Assert.assertEquals(expected, actual);
> -  }
> -
> -  private Properties getDefaultProperties() {
> -    Properties prop = new Properties();
> -    prop.put("kylin.api.username", "ADMIN");
> -    prop.put("kylin.api.password", "KYLIN");
> -    prop.put("kylin.api.url", "http://<host>:<port>/kylin/api/query");
> -    prop.put("kylin.query.project", "default");
> -    prop.put("kylin.query.offset", "0");
> -    prop.put("kylin.query.limit", "5000");
> -    prop.put("kylin.query.ispartial", "true");
> -    return prop;
> -  }
> -}
> -
> -class MockKylinInterpreter extends KylinInterpreter {
> -  MockKylinInterpreter(Properties property) {
> -    super(property);
> -  }
> -
> -  @Override
> -  public HttpResponse prepareRequest(String sql) throws IOException {
> -    MockHttpClient client = new MockHttpClient();
> -    return client.execute(new HttpPost());
> -  }
> -}
> -
> -class MockHttpClient{
> -  public MockHttpResponse execute(HttpPost post){
> -    return new MockHttpResponse();
> -  }
> -}
> -
> -class MockHttpResponse extends AbstractHttpMessage implements
> HttpResponse{
> -  @Override
> -  public StatusLine getStatusLine() {
> -    return new MockStatusLine();
> -  }
> -
> -  @Override
> -  public void setStatusLine(StatusLine statusLine) {
> -  }
> -
> -  @Override
> -  public void setStatusLine(ProtocolVersion protocolVersion, int i) {
> -  }
> -
> -  @Override
> -  public void setStatusLine(ProtocolVersion protocolVersion, int i,
> String s) {
> -  }
> -
> -  @Override
> -  public void setStatusCode(int i) throws IllegalStateException {
> -  }
> -
> -  @Override
> -  public void setReasonPhrase(String s) throws IllegalStateException {
> -  }
> -
> -  @Override
> -  public HttpEntity getEntity() {
> -    return new MockEntity();
> -  }
> -
> -  @Override
> -  public void setEntity(HttpEntity httpEntity) {
> -  }
> -
> -  @Override
> -  public Locale getLocale() {
> -    return null;
> -  }
> -
> -  @Override
> -  public void setLocale(Locale locale) {
> -  }
> -
> -  @Override
> -  public ProtocolVersion getProtocolVersion() {
> -    return null;
> -  }
> -}
> -
> -class MockStatusLine implements StatusLine{
> -  @Override
> -  public ProtocolVersion getProtocolVersion() {
> -    return null;
> -  }
> -
> -  @Override
> -  public int getStatusCode() {
> -    return 200;
> -  }
> -
> -  @Override
> -  public String getReasonPhrase() {
> -    return null;
> -  }
> -}
> -
> -class MockEntity implements HttpEntity{
> -  @Override
> -  public boolean isRepeatable() {
> -    return false;
> -  }
> -
> -  @Override
> -  public boolean isChunked() {
> -    return false;
> -  }
> -
> -  @Override
> -  public long getContentLength() {
> -    return 0;
> -  }
> -
> -  @Override
> -  public Header getContentType() {
> -    return null;
> -  }
> -
> -  @Override
> -  public Header getContentEncoding() {
> -    return null;
> -  }
> -
> -  @Override
> -  public InputStream getContent() throws IOException,
> IllegalStateException {
> -    return new ByteArrayInputStream(("{\"columnMetas\":" +
> -        "[{\"label\":\"PART_DT\"},{\"label\":\"measure\"}]," +
> -        "\"results\":[[\"2012-01-03\",\"917.4138\"]," +
> -        "[\"2012-05-06\",\"592.4823\"]]}").getBytes());
> -  }
> -
> -  @Override
> -  public void writeTo(OutputStream outputStream) throws IOException {
> -  }
> -
> -  @Override
> -  public boolean isStreaming() {
> -    return false;
> -  }
> -
> -  @Override
> -  public void consumeContent() throws IOException {
> -  }
> -}
> diff --git a/pom.xml b/pom.xml
> index 78b011339c..da5b999307 100644
> --- a/pom.xml
> +++ b/pom.xml
> @@ -78,7 +78,6 @@
>      <module>flink-cmd</module>
>      <module>ignite</module>
>      <module>influxdb</module>
> -    <module>kylin</module>
>      <module>python</module>
>      <module>cassandra</module>
>      <module>elasticsearch</module>
> diff --git a/zeppelin-distribution/src/bin_license/LICENSE
> b/zeppelin-distribution/src/bin_license/LICENSE
> index 380b0a4349..a80dc4f4ea 100644
> --- a/zeppelin-distribution/src/bin_license/LICENSE
> +++ b/zeppelin-distribution/src/bin_license/LICENSE
> @@ -34,7 +34,6 @@ The following components are provided under Apache
> License.
>      (Apache 2.0) Apache Cassandra (http://cassandra.apache.org/)
>      (Apache 2.0) Apache HBase (http://hbase.apache.org/)
>      (Apache 2.0) Apache Ignite (http://ignite.apache.org/)
> -    (Apache 2.0) Apache Kylin (http://kylin.apache.org/)
>      (Apache 2.0) Apache Flink (http://flink.apache.org/)
>      (Apache 2.0) Apache Jena (https://jena.apache.org/)
>      (Apache 2.0) Apache Beam (http://beam.apache.org/)
>
>