2017-11-14 11 views
0

하이브 문 인스턴스를 사용하여 Java 클래스의 다른 테이블에서 하이브 테이블에 데이터를 삽입하려고합니다. 소스 테이블과 대상 테이블이 모두 동일한 하이브 데이터베이스에 있습니다.하이브 문이 Java 클래스를 사용하여 테이블에 데이터를 삽입하지 않습니다.

모든 원본 테이블에는 데이터가 포함되어 있습니다. 이 데이터를 가지고 수행하는 SELECT 쿼리를 실행하면

@Component 
public class HiveExecutor implements IExecutor{ 

    static final Logger logger = Logger.getLogger(HiveExecutor.class); 

    @Autowired 
    ConnectionFactory connectionFactory; 

    @Override 
    public ResultSetHolder executeSql(String sql) throws IOException { 
     logger.info(" Inside hive executor for SQL : " + sql); 
     ResultSetHolder rsHolder = new ResultSetHolder(); 
     IConnector connector = connectionFactory.getConnector("hive"); 
     ConnectionHolder conHolder = connector.getConnection(); 
     Object obj = conHolder.getConObject(); 
     if(obj instanceof Statement) { 
      Statement stmt = (Statement) obj; 
      ResultSet rs=null; 
      try { 
       if(sql.toUpperCase().contains("INSERT")) { 
        int result = stmt.executeUpdate(sql); 
        if(result != 0) 
         logger.info("Successfull insertion operation. Number of rows changed: "+result); 
        else 
         logger.info("Unsuccessfull insertion operation."); 
       } 
       else 
        rs = stmt.executeQuery(sql); 
       rsHolder.setResultSet(rs); 
       rsHolder.setType(ResultType.resultset); 
      } catch (SQLException e) {    
       e.printStackTrace(); 
      } 
     }  
     return rsHolder; 
    } 

    @Override 
    public Boolean registerTempTable(DataFrame df, String tableName) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

하지만/실패 삽입 쿼리에 대해 0 반환

다음 클래스는 위의 쿼리를 실행합니다.

하이브 CLI에서 동일한 INSERT 쿼리를 실행하면 예상대로 작동하고 데이터를 대상 테이블에 삽입합니다.

답변

0

한번에 연결 문자열에서 큐의 이름을 지정합니다 :

CONNECTION_STRING = "JDBC : hive2을 : // 호스트 : 포트/DB; principal=principal=hive/[email protected]를? mapreduce.job.queuename = prod ";

+0

편집기에서 서식을 지정한 후 코드를 게시하려고합니다. – Darshan

+0

동적으로 생성 된 INSERT 쿼리에 파티션 매개 변수로 인해 하이브 속성 partition 및 partition.mode가 추가되었습니다. 실제 쿼리가 실행되기 전에 실행하여 문제를 해결했습니다. –