不使用java类将数据插入表的配置单元语句
我试图使用配置单元语句实例将java类中其他表的数据插入到配置单元表中,源表和目标表都存在于同一配置单元数据库中 所有源表都包含数据 以下类执行上述查询:不使用java类将数据插入表的配置单元语句,java,hadoop,hive,spring-jdbc,Java,Hadoop,Hive,Spring Jdbc,我试图使用配置单元语句实例将java类中其他表的数据插入到配置单元表中,源表和目标表都存在于同一配置单元数据库中 所有源表都包含数据 以下类执行上述查询: @Component public class HiveExecutor implements IExecutor{ static final Logger logger = Logger.getLogger(HiveExecutor.class); @Autowired ConnectionFactory co
@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;
}
}
执行SELECT查询时,它确实会带来数据,但insert查询失败/返回0
当从配置单元CLI执行相同的插入查询时,它会按预期工作,将数据插入目标表
尝试在连接字符串中指定队列名称:
CONNECTION_STRING=“jdbc:hive2://host:port/db;principal=principal=hive/HiveServer2Host@YOUR-REALM.COM?mapreduce.job.queuename=prod” 异常是由于分区参数、配置单元属性partition和partition.mode被追加到动态生成的插入查询中。通过在实际查询解决问题之前执行它们。