[HADOOP] 하이브 "ANALYZE TABLE"자바에서 실행하는 방법
HADOOP하이브 "ANALYZE TABLE"자바에서 실행하는 방법
하이브 테이블의 행 수를 계산해야합니다. 쿼리를 사용하고 있습니다.
ANALYZE TABLE p_7 COMPUTE STATISTICS noscan
자바를 통해 결과를 가져오고 싶습니다. 아래에서 시도하고 있습니다. 코드와 운이 없다. 내가 얻는 오류는 :
Exception in thread "main" java.sql.SQLException: The query did not generate a result set!
at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:393)
at HiveJdbcClient.main(HiveJdbcClient.java:22)
내가 사용하는 코드는 다음과 같습니다.
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveJdbcClient {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
System.out.println("connected");
Statement statement = con.createStatement();
String query = "ANALYZE TABLE p_7 COMPUTE STATISTICS noscan";
ResultSet res = statement.executeQuery(query);
}
}
나 같은 쿼리를 실행하는 방법을 몰라 :
ANALYZE TABLE p_7 COMPUTE STATISTICS noscan
자바를 통해. 이것에 대한 도움은 나에게 큰 도움이 될 것입니다. 감사.
해결법
-
==============================
1.'NOSCAN'없이 ANALYZE TABLE 문을 사용하여 행 수를 계산하십시오. 주 :이 명령문은 resultSet 오브젝트를 생성하지 않습니다.
'NOSCAN'없이 ANALYZE TABLE 문을 사용하여 행 수를 계산하십시오. 주 :이 명령문은 resultSet 오브젝트를 생성하지 않습니다.
저장된 통계를 가져 오려면 다음 문을 사용하십시오.
DESCRIBE FORMATTED tableName
출력에서 행 수는 parameters 배열에 나열됩니다. regex를 사용하여 추출하십시오.
샘플 코드는 다음과 같습니다.
String analyzeQuery = "ANALYZE TABLE p_7 COMPUTE STATISTICS"; String describeQuery = "DESCRIBE FORMATTED p_7"; stmt.execute(analyzeQuery); StringBuilder sb = new StringBuilder(); try (ResultSet rs = stmt.executeQuery(describeQuery)) { while (rs.next()) { int count = rs.getMetaData().getColumnCount(); for (int j = 1; j <= count; j++) { sb.append(rs.getString(j)); } } } System.out.println("Output: "+ sb.toString());
표 및 파티션 통계에 대한 자세한 내용은 https://cwiki.apache.org/confluence/display/Hive/StatsDev를 참조하십시오.
-
==============================
2.표의 행 수를 얻으려면 아래 코드를 시도하십시오.
표의 행 수를 얻으려면 아래 코드를 시도하십시오.
public static Connection createConnection(String hive_ip) { String hive_url="jdbc:hive2://"+hive_ip; Connection con=null; try { Class.forName("org.apache.hive.jdbc.HiveDriver"); System.out.println(hive_url+"/"); con = DriverManager.getConnection( hive_url+"/", hive_username,hive_password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return con; } public static int getHiveColumnRowCount(String tablename,String db_name) { int count=0; Connection con=createConnection(); try { Statement st=con.createStatement(); int i=0; String count_query="show tblproperties "+db_name+"."+tablename; ResultSet rs=st.executeQuery(count_query); while(rs.next()) { i++; if(i==3) { count=Integer.parseInt(rs.getString(2)); } } System.out.println("COUNT:"+count); rs.close(); st.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return count; }
희망이 도움이 :)
from https://stackoverflow.com/questions/33552345/hive-analyze-table-how-to-execute-from-java by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 날짜 별 Java MapReduce 계산 (0) | 2019.07.02 |
---|---|
[HADOOP] spark - java 힙 공간 문제 - ExecutorLostFailure - 상태 143으로 종료 된 컨테이너 (0) | 2019.07.02 |
[HADOOP] Map 이클립스 2.4.1에 대한 클라이언트 jar 줄이기 (0) | 2019.07.02 |
[HADOOP] mongo 's out과 동등 : hadoop의 옵션 감소 (0) | 2019.07.02 |
[HADOOP] 아래 코드에서 객체가 어떻게 생성됩니까? (0) | 2019.07.02 |