我在编写一些UDF时遇到了问题,我搜索了网站上的相关帖子,但我恐怕还没有任何有用的想法。 问题是: 我将在UDF中执行一条SQL语句,然后打印查询结果。这是我的代码:
public final class AnalyzeConstraints extends UDF {
private Connection connToHive = null;
public Connection getHiveConn() throws SQLException {
if (connToHive == null) {
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
} catch (ClassNotFoundException err) {
err.printStackTrace();
System.exit(1);
}
// hive cluster IP address
connToHive = DriverManager.getConnection(
"jdbc:hive://XXXXX:10004/default", "user", "passwd");
System.out.println("loggin");
}
return connToHive;
}
public void closeHiveConn() throws SQLException {
if (connToHive != null) {
connToHive.close();
}
}
//# end region
//# region HiveUtility
// query data
public ResultSet queryData(String sql) throws SQLException {
Connection conn = getHiveConn();
Statement stmt = conn.createStatement();
ResultSet res = stmt.executeQuery(sql);
return res;
}
//# end region
//# region UDF implement
public String evaluate(String table) throws SQLException {
StringBuffer result = new StringBuffer();
String schema = null;
String table_name = null;
if (table.length() > 0 && table.indexOf(".") > 0 && table.split("\\.").length == 2) {
schema = table.split("\\.")[0];
table_name = table.split("\\.")[1];
// For debug
System.out.println(schema + ":" + table_name);
}
else
result.append("ERROR: \'" + table + "\' is not a valid table in the current search_path\n");
//# region analyze PK
StringBuffer sqlPK = new StringBuffer();
sqlPK.append(String.format("select constraint_name, column_name from catalog.constraint_columns where table_schema = \'%s\' and Upper(table_name) = \'%s\' and constraint_type = \'p\';\n", schema, table_name.toUpperCase()));
// For debug
System.out.println(sqlPK.toString());
ResultSet resPK = queryData(sqlPK.toString());
// Print resultset here
}
以下是错误消息:
FAILED: SemanticException [Error 10014]: Line 1:8 Wrong arguments ''catalog.systables'': org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String AnalyzeConstraints.evaluate(java.lang.String) throws java.sql.SQLException on object AnalyzeConstraints@4f86c135 of class AnalyzeConstraints with arguments {catalog.systables:java.lang.String} of size 1
hive>
任何想法都将受到高度赞赏!提前谢谢!