2017-11-14 12 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; 
    } 
} 

が、それは/失敗したINSERTクエリの場合は0を返します。

次のクラスは、上記のクエリを実行します。

hive CLIから同じINSERTクエリを実行すると、期待どおりに動作し、ターゲットテーブルにデータが挿入されます。

答えて

0

は、接続文字列でキュー名を指定してください:

は、connection_string = "はjdbc:hive2://ホスト:ポート/デシベル; principal=principal=hive/[email protected]? mapreduce.job.queuename = prod ";

+0

エディタで書式設定した後にコードを投稿しようとしました。 – Darshan

+0

例外は、パーティションパラメータ、ハイブプロパティパーティション、およびパーティション.modeが動的に生成されたINSERTクエリに追加されたためです。実際のクエリが問題を解決する前にそれらを実行することによって。 –

関連する問題