Hive UDF включает в себя оператор запроса

Я сталкиваюсь с проблемой при написании некоторых UDF, я искал похожие посты на сайте, но боюсь, у меня пока нет полезных идей. Вопрос в следующем: я собираюсь выполнить инструкцию SQL в UDF, а затем распечатать результат запроса. Вот мой код:

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>

Любые идеи будут высоко оценены! Заранее спасибо!

0 ответов

Другие вопросы по тегам