如果我们需要保留已经处理的数据,我们需要自己创建一个map用来存储已经处理的数据
/**
* @desc 保存Oracle元数据信息到Mysql
*/
public void saveOracleMetaData() throws SQLException {
log.info("start to save oracle metadata");
ArrayList<OracleMetaDataInfo> oracleMetaDataInfos = oracleMetaDataETLMapper.selectOracleMetaData();
if (oracleMetaDataInfos == null || oracleMetaDataInfos.size() == 0){
return;
}
// 存储表的大小的的map
HashMap<String, Integer> tableLengthMap = new HashMap<>();
// 存储处理好的元数据信息
ArrayList<NewOracleMetaDataInfo> newOracleMetaDataInfos = new ArrayList<>();
oracleMetaDataInfos.forEach(new Consumer<OracleMetaDataInfo>() {
@Override
public void accept(OracleMetaDataInfo oracleMetaDataInfo) {
// 把databaseName与tableName进行拼接作为map的key
String db_tb_name = oracleMetaDataInfo.getTablespace_name()+"-"+oracleMetaDataInfo.getSegment_name();
// 获取原始map存储的值
Integer original_bytes_value = tableLengthMap.get(db_tb_name) == null ? 0:tableLengthMap.get(db_tb_name);
// 获取传进来的oracleMetaDataInfo的bytes
Integer come_bytes_value = oracleMetaDataInfo.getBytes() == null ? 0:oracleMetaDataInfo.getBytes();
// 如果表存在,则不需要重新new NewOracleMetaDataInfo,否则数据会冗余
if(tableLengthMap.containsKey(db_tb_name)){
tableLengthMap.put(db_tb_name, original_bytes_value + come_bytes_value);
}else {
NewOracleMetaDataInfo newOracleMetaDataInfo = new NewOracleMetaDataInfo();
newOracleMetaDataInfo.setDatabases_name(oracleMetaDataInfo.getTablespace_name());
newOracleMetaDataInfo.setTable_name(oracleMetaDataInfo.getSegment_name());
newOracleMetaDataInfo.setSource("ORACLE");
newOracleMetaDataInfos.add(newOracleMetaDataInfo);
tableLengthMap.put(db_tb_name, original_bytes_value + come_bytes_value);
}
}
});
// 把表的大小存放到list中
newOracleMetaDataInfos.forEach(new Consumer<NewOracleMetaDataInfo>() {
@Override
public void accept(NewOracleMetaDataInfo newOracleMetaDataInfo) {
String dbTbName = newOracleMetaDataInfo.getDatabases_name()+"-"+newOracleMetaDataInfo.getTable_name();
if (tableLengthMap.containsKey(dbTbName)){
newOracleMetaDataInfo.setTable_length(tableLengthMap.get(dbTbName));
}else {
log.info("can not find the String of the database and the table : "+dbTbName+" in the Map ");
}
}
});
saveOracleMetaDataToMysqlMapper.insertOracleMetaData(newOracleMetaDataInfos);
}