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 <[email protected]>
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://<host>:<port>/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/)