|
|
|
@ -126,11 +126,25 @@ public class S3BatchToMySQLHandler implements RequestHandler<Map<String, Object> |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 按文件名排序(确保 00000001.csv, 00000002.csv 顺序处理)
|
|
|
|
Collections.sort(keys); |
|
|
|
logger.info("[{}][{}] found {} files to process", DB_SCHEMA, table, keys.size()); |
|
|
|
// 3. 过滤掉 marker 文件
|
|
|
|
List<String> csvKeys = new ArrayList<>(); |
|
|
|
for (String key : keys) { |
|
|
|
String fileName = extractFileName(key); |
|
|
|
if (!fileName.startsWith(".")) { // 跳过隐藏文件(如 .sync_to_db_processed)
|
|
|
|
csvKeys.add(key); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (csvKeys.isEmpty()) { |
|
|
|
logger.warn("[{}][{}] no CSV files found for prefix: {}", DB_SCHEMA, table, prefix); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 4. 按文件名排序(确保 00000001.csv, 00000002.csv 顺序处理)
|
|
|
|
Collections.sort(csvKeys); |
|
|
|
logger.info("[{}][{}] found {} CSV files to process", DB_SCHEMA, table, csvKeys.size()); |
|
|
|
|
|
|
|
// 4. 删除旧数据(只在第一次处理时执行)
|
|
|
|
// 5. 删除旧数据(只在第一次处理时执行)
|
|
|
|
if (processedFiles.isEmpty()) { |
|
|
|
int deleted = mysqlService.deleteBeforeDate(DB_SCHEMA, table, fileDate); |
|
|
|
logger.info("[{}][{}] deleted {} records before {}", DB_SCHEMA, table, deleted, fileDate); |
|
|
|
@ -142,8 +156,8 @@ public class S3BatchToMySQLHandler implements RequestHandler<Map<String, Object> |
|
|
|
Map<String, Integer> progressThisTime = new HashMap<>(processedFiles); |
|
|
|
boolean allProcessed = true; |
|
|
|
|
|
|
|
// 5. 依次处理每个CSV文件
|
|
|
|
for (String s3Key : keys) { |
|
|
|
// 6. 依次处理每个CSV文件
|
|
|
|
for (String s3Key : csvKeys) { |
|
|
|
// 处理文件前检查超时
|
|
|
|
long elapsed = System.currentTimeMillis() - overallStartTime; |
|
|
|
if (elapsed >= timeoutThresholdMs) { |
|
|
|
@ -171,7 +185,7 @@ public class S3BatchToMySQLHandler implements RequestHandler<Map<String, Object> |
|
|
|
logger.info("[{}][{}] file {} progress: {}/{} rows", DB_SCHEMA, table, fileName, newProcessedRows, newProcessedRows); |
|
|
|
} |
|
|
|
|
|
|
|
// 6. 记录处理结果
|
|
|
|
// 7. 记录处理结果
|
|
|
|
if (allProcessed) { |
|
|
|
logger.info("[{}][{}] date processing completed", DB_SCHEMA, table); |
|
|
|
} else { |
|
|
|
|