복붙노트

[HADOOP] 하이브 쿼리는 jdbc를 통해 결과 집합을 생성 할 수 없습니다

HADOOP

하이브 쿼리는 jdbc를 통해 결과 집합을 생성 할 수 없습니다

저는 Hive와 Hadoop에서 처음입니다. 튜토리얼에서 테이블을 다음과 같이 만들고 싶습니다.

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveCreateDb {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";

public static void main(String[] args) {
    // Register driver and create driver instance

    try {
        Class.forName(driverName);

        // get connection

        Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/mydb", "root", "");
        Statement stmt = con.createStatement();


        stmt.executeQuery("CREATE TABLE IF NOT EXISTS " + " employee ( e_id int, name String, "
                + " salary String)" + " STORED AS TEXTFILE");

        System.out.println("Operation done successfully.");

        con.close();
    } catch (ClassNotFoundException e) {
        System.err.println("class not found!!!!");
        e.printStackTrace();
    } catch (SQLException e) {
        System.err.println("sql exception!!!");
        e.printStackTrace();
    }

 }
}

코드를 실행할 때이 오류가 발생합니다

sql exception!!! java.sql.SQLException: The query did not generate a result set! at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:393)
at tr.com.vedat.hive.HiveCreateDb.main(HiveCreateDb.java:25)

그래서 해결책을 찾지 못했습니다. 누구든지 내가 버그를 찾고 올바른 길로 인도하도록 도울 수 있습니까?

해결법

  1. ==============================

    1.시간이 지남에 따라 Hive 드라이버가 시간이 지남에 따라 더 제한적으로 변경되는 것처럼 보입니다. 이 Google 그룹 토론을 참조하십시오

    시간이 지남에 따라 Hive 드라이버가 시간이 지남에 따라 더 제한적으로 변경되는 것처럼 보입니다. 이 Google 그룹 토론을 참조하십시오

    새 테이블을 만드는 쿼리에는 stmt.execute ()를 사용하십시오. executeQuery executeQuery ()는 이제 선택 쿼리 (DML)에만 해당되고 execute는 아마도 DDL (데이터 정의)에 해당됩니다.

    다른 언어 (내 경우에는 Python 및 C #)에서 본 대부분의 드라이버는 실제로 데이터 구조를 변경할 수있는 메소드와 읽기 전용 동작을 분리하기 때문에 의미가 있습니다.

    이 페이지는 DDL에 대한 executeQuery () 사용법을 보여줍니다.

     ResultSet res = stmt.executeQuery("create table " + tableName + " (key int, value string)");
    

    여기서 실행 예제는 Python이므로 Java 예제의 모든 DDL은 executeQuery를 사용합니다.

  2. from https://stackoverflow.com/questions/31340332/hive-query-cant-generate-result-set-via-jdbc by cc-by-sa and MIT license