[ https://issues.apache.org/jira/browse/ZEPPELIN-11?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14388032#comment-14388032 ]
ASF GitHub Bot commented on ZEPPELIN-11: ---------------------------------------- Github user felixcheung commented on a diff in the pull request: https://github.com/apache/incubator-zeppelin/pull/12#discussion_r27453966 --- Diff: hive/src/main/java/org/apache/zeppelin/hive/HiveInterpreter.java --- @@ -0,0 +1,203 @@ +/** + * 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.hive; + +import java.sql.*; +import java.util.List; +import java.util.Properties; + +import com.nflabs.zeppelin.interpreter.*; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.nflabs.zeppelin.interpreter.InterpreterResult.Code; +import com.nflabs.zeppelin.scheduler.Scheduler; +import com.nflabs.zeppelin.scheduler.SchedulerFactory; + +/** + * Hive interpreter for Zeppelin. + */ +public class HiveInterpreter extends Interpreter { + Logger logger = LoggerFactory.getLogger(HiveInterpreter.class); + int commandTimeOut = 600000; + + static final String HIVESERVER_URL = "hive.hiveserver2.url"; + static final String HIVESERVER_USER = "hive.hiveserver2.user"; + static final String HIVESERVER_PASSWORD = "hive.hiveserver2.password"; + + static { + Interpreter.register( + "hive", + "hive", + HiveInterpreter.class.getName(), + new InterpreterPropertyBuilder() + .add(HIVESERVER_URL, "jdbc:hive2://localhost:10000", "The URL for HiveServer2.") + .add(HIVESERVER_USER, "hive", "The hive user") + .add(HIVESERVER_PASSWORD, "", "The password for the hive user").build()); + } + + public HiveInterpreter(Properties property) { + super(property); + } + + Connection jdbcConnection; + Exception exceptionOnConnect; + + //Test only method + public Connection getJdbcConnection() + throws SQLException { + String url = getProperty(HIVESERVER_URL); + String user = getProperty(HIVESERVER_USER); + String password = getProperty(HIVESERVER_PASSWORD); + + return DriverManager.getConnection(url, user, password); + } + + @Override + public void open() { + logger.info("Jdbc open connection called!"); + try { + String driverName = "org.apache.hive.jdbc.HiveDriver"; + Class.forName(driverName); + } catch (ClassNotFoundException e) { + logger.error("Can not open connection", e); + exceptionOnConnect = e; + return; + } + try { + jdbcConnection = getJdbcConnection(); + exceptionOnConnect = null; + logger.info("Successfully created Jdbc connection"); + } + catch (SQLException e) { + logger.error("Cannot open connection", e); + exceptionOnConnect = e; + } + } + + @Override + public void close() { + try { + if (jdbcConnection != null) { + jdbcConnection.close(); + } + } + catch (SQLException e) { + logger.error("Cannot close connection", e); + } + finally { + jdbcConnection = null; + exceptionOnConnect = null; + } + } + + Statement currentStatement; + private InterpreterResult executeSql(String sql) { + try { + if (exceptionOnConnect != null) { + return new InterpreterResult(Code.ERROR, exceptionOnConnect.getMessage()); + } + currentStatement = jdbcConnection.createStatement(); + StringBuilder msg = null; + if (StringUtils.containsIgnoreCase(sql, "EXPLAIN ")) { --- End diff -- should this consider the case where EXPLAIN is in a comment or as a name of a column? > Add a HiveQL interpreter to zeppelin > ------------------------------------ > > Key: ZEPPELIN-11 > URL: https://issues.apache.org/jira/browse/ZEPPELIN-11 > Project: Zeppelin > Issue Type: New Feature > Reporter: Ram Venkatesh > > Add support for Hive and HiveQL to the zeppelin framework. > Users can use the %hive directive to submit HiveQL statements. -- This message was sent by Atlassian JIRA (v6.3.4#6332)