简体   繁体   中英

Hive statement not inserting data into the table using java class

I am trying to insert data into hive tables from other tables in java class using hive statement instance, both, source tables and target table, are present in same hive database.

All source tables does contain data.

Following class executes the above query:

@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;
    }
}

When executed a SELECT query it does bring data but it fails/returns 0 for insert query.

When executed the same INSERT query from hive CLI it works as expected, inserts the data into target table.

Try to specify queue name in connection string:

CONNECTION_STRING="jdbc:hive2://host:port/db;principal=principal=hive/HiveServer2Host@YOUR-REALM.COM?mapreduce.job.queuename=prod";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM