yumeng преди 1 месец
родител
ревизия
f78141672f

+ 6 - 4
ADX_REPORT_BACKFILL.md

@@ -75,18 +75,20 @@ adx:
 - 汇总源数据来自三张热表,不直接扫月历史表
 - 统计窗口不包含当天数据,只统计到昨天 24:00 为止
 - 每次任务都会重算 lookback 窗口内的数据,再通过 upsert 覆盖旧值
-- 所以近 30 个自然日如果有补写、重复清理、延迟写入,daily stats 会被自动修正
+- 默认只回算近 7 个自然日,这样不会和“30 天前数据归档”窗口重叠
+- 即使配置误设得过大,代码也会自动限制为 `retentionDays - 1`,避免边界日期统计失真
+- 所以近 7 个自然日如果有补写、重复清理、延迟写入,daily stats 会被自动修正
 
 默认值:
 
 ```yaml
 adx:
-  ad-bid-report-stats-lookback-days: 30
+  ad-bid-report-stats-lookback-days: 7
 ```
 
 这意味着:
 
-- 最近 30 天统计会自动修正
+- 最近 7 天统计会自动修正
 - 更久远的老历史不会自动全量重刷 daily stats
 
 如果需要补很久以前的 daily stats,建议单独执行离线 SQL 按月回灌。
@@ -111,5 +113,5 @@ adx:
   ad-bid-report-retention-days: 30
   ad-bid-report-archive-batch-size: 5000
   ad-bid-report-archive-max-batches-per-run: 20
-  ad-bid-report-stats-lookback-days: 30
+  ad-bid-report-stats-lookback-days: 7
 ```

+ 1 - 1
src/main/java/com/adx/tencent/config/AppProperties.java

@@ -105,7 +105,7 @@ public class AppProperties {
     private int adBidReportRetentionDays = 30;
     private int adBidReportArchiveBatchSize = 5000;
     private int adBidReportArchiveMaxBatchesPerRun = 20;
-    private int adBidReportStatsLookbackDays = 30;
+    private int adBidReportStatsLookbackDays = 7;
 
     // Task Lock
     private Duration taskLockTtl = Duration.ofSeconds(120);

+ 2 - 1
src/main/java/com/adx/tencent/report/AdBidReportStore.java

@@ -160,7 +160,8 @@ public class AdBidReportStore {
 
     private long rollupStats(Connection conn, MediaTable media) throws Exception {
         LocalDate endExclusiveDate = LocalDate.now(ZONE);
-        LocalDate startDate = endExclusiveDate.minusDays(statsLookbackDays);
+        int effectiveLookbackDays = Math.min(statsLookbackDays, Math.max(retentionDays - 1, 1));
+        LocalDate startDate = endExclusiveDate.minusDays(effectiveLookbackDays);
         Timestamp start = Timestamp.valueOf(startDate.atStartOfDay());
         Timestamp end = Timestamp.valueOf(endExclusiveDate.atStartOfDay());
         String sql = "INSERT INTO `" + reportSchema + "`.`" + media.statsTable + "` " +

+ 1 - 1
src/main/resources/application-dev.yml

@@ -67,7 +67,7 @@ adx:
   ad-bid-report-retention-days: 30
   ad-bid-report-archive-batch-size: 5000
   ad-bid-report-archive-max-batches-per-run: 20
-  ad-bid-report-stats-lookback-days: 30
+  ad-bid-report-stats-lookback-days: 7
 
   # --- Task ---
   skip-leader-election: false

+ 1 - 1
src/main/resources/application-prod.yml

@@ -69,7 +69,7 @@ adx:
   ad-bid-report-retention-days: 30
   ad-bid-report-archive-batch-size: 5000
   ad-bid-report-archive-max-batches-per-run: 20
-  ad-bid-report-stats-lookback-days: 30
+  ad-bid-report-stats-lookback-days: 7
 
   # --- Task ---
   skip-leader-election: false

+ 1 - 1
src/main/resources/application-test.yml

@@ -68,7 +68,7 @@ adx:
   ad-bid-report-retention-days: 30
   ad-bid-report-archive-batch-size: 5000
   ad-bid-report-archive-max-batches-per-run: 20
-  ad-bid-report-stats-lookback-days: 30
+  ad-bid-report-stats-lookback-days: 7
 
   # --- Task ---
   skip-leader-election: false