更新时间:2024-08-05 GMT+08:00
Impala开发示例
JDBC二次开发示例代码
以下示例代码主要功能如下。
- 普通(非Kerberos)模式下,使用用户名和密码进行登录,如不指定用户,则匿名登录;
- 在JDBC URL地址中提供登录Kerberos用户的principal,程序自动完成安全登录、建立Impala连接。
- 执行创建表、查询和删除三类Impala SQL语句。
package com.huawei.bigdata.impala.example; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; /** * Simple example for hive jdbc. */ public class JDBCExample { private static final String HIVE_DRIVER = "org.apache.hive.jdbc.HiveDriver"; private ClientInfo clientInfo; private boolean isSecurityMode; public JDBCExample(ClientInfo clientInfo, boolean isSecurityMode){ this.clientInfo = clientInfo; this.isSecurityMode = isSecurityMode; } /** * * @throws ClassNotFoundException * @throws SQLException */ public void run() throws ClassNotFoundException, SQLException { //Define hive sql, the sql can not include ";" String[] sqls = {"CREATE TABLE IF NOT EXISTS employees_info(id INT,name STRING)", "SELECT COUNT(*) FROM employees_info", "DROP TABLE employees_info"}; StringBuilder sBuilder = new StringBuilder( "jdbc:hive2://").append(clientInfo.getImpalaServer()).append("/"); if (isSecurityMode) { sBuilder.append(";auth=") .append(clientInfo.getAuth()) .append(";principal=") .append(clientInfo.getPrincipal()) .append(";"); } else { sBuilder.append(";auth=noSasl"); } String url = sBuilder.toString(); Class.forName(HIVE_DRIVER); Connection connection = null; try { /** * Get JDBC connection, If not use security mode, need input correct username, * otherwise, wil login as "anonymous" user */ //connection = DriverManager.getConnection(url, "", ""); connection = DriverManager.getConnection(url); /** * Run the create table sql, then can load the data if needed. eg. * "load data inpath '/tmp/employees.txt' overwrite into table employees_info;" */ execDDL(connection,sqls[0]); System.out.println("Create table success!"); execDML(connection,sqls[1]); execDDL(connection,sqls[2]); System.out.println("Delete table success!"); } finally { if (null != connection) { connection.close(); } } } public static void execDDL(Connection connection, String sql) throws SQLException { PreparedStatement statement = null; try { statement = connection.prepareStatement(sql); statement.execute(); } finally { if (null != statement) { statement.close(); } } } public static void execDML(Connection connection, String sql) throws SQLException { PreparedStatement statement = null; ResultSet resultSet = null; ResultSetMetaData resultMetaData = null; try { statement = connection.prepareStatement(sql); resultSet = statement.executeQuery(); /** * Print the column name to console */ resultMetaData = resultSet.getMetaData(); int columnCount = resultMetaData.getColumnCount(); for (int i = 1; i <= columnCount; i++) { System.out.print(resultMetaData.getColumnLabel(i) + '\t'); } System.out.println(); /** * Print the query result to console */ while (resultSet.next()) { for (int i = 1; i <= columnCount; i++) { System.out.print(resultSet.getString(i) + '\t'); } System.out.println(); } } finally { if (null != resultSet) { resultSet.close(); } if (null != statement) { statement.close(); } } } }
父主题: Impala开发规范