|
9 | 9 | from snowflake.connector.network import ReauthenticationRequest, RetryRequest |
10 | 10 |
|
11 | 11 | from batch_worker import LoadingBatchWorkerClient |
12 | | -from constants import DEFAULT_MAX_DATE, DEFAULT_PARTITION |
13 | 12 | from constants import ( |
14 | 13 | CLAIM_INSTITUTIONAL_ITEM_SS_TABLE, |
15 | 14 | CLAIM_INSTITUTIONAL_SS_TABLE, |
16 | 15 | CLAIM_PROFESSIONAL_ITEM_SS_TABLE, |
17 | 16 | CLAIM_PROFESSIONAL_SS_TABLE, |
| 17 | + DEFAULT_MAX_DATE, |
18 | 18 | DEFAULT_PARTITION, |
19 | | - FISS_CLM_SOURCE, |
20 | 19 | IDR_CLAIM_TABLE, |
21 | | - MCS_CLM_SOURCE, |
22 | 20 | PART_D_CLAIM_TYPE_CODES, |
23 | 21 | PHASE_1_CUTOFF, |
24 | | - PHASE_1_SS_MAX, |
25 | | - PHASE_1_SS_MIN, |
26 | | - VMS_CLM_SOURCE, |
27 | 22 | ) |
28 | 23 | from extractor import PostgresExtractor, SnowflakeExtractor, Source |
29 | 24 | from load_partition import LoadPartition |
30 | 25 | from loader import LoadType, PostgresLoader, get_connection_string, should_track_load_progress |
31 | 26 | from model.base_model import ( |
32 | 27 | LoadMode, |
33 | 28 | T, |
| 29 | + stale_phase_1_claims_query, |
34 | 30 | ) |
35 | 31 | from model.idr_beneficiary_low_income_subsidy_cmbnd import IdrBeneficiaryLowIncomeSubsidyCmbnd |
36 | 32 | from model.load_progress import LoadProgress |
37 | | -from settings import BENEFICIARY_PRUNE_BATCH_LIMIT |
38 | | -from settings import PRUNE_BATCH_MAX_SIZE |
| 33 | +from settings import BENEFICIARY_PRUNE_BATCH_LIMIT, PRUNE_BATCH_MAX_SIZE |
39 | 34 |
|
40 | 35 |
|
41 | 36 | def get_progress( |
@@ -138,7 +133,7 @@ def _prune_table_in_batches( |
138 | 133 | delete_query: str, |
139 | 134 | params: tuple[Any, ...] | None = None, |
140 | 135 | ) -> None: |
141 | | - # Run a batched DELETE until no matching rows remain. |
| 136 | + """Run a batched DELETE until no matching rows remain.""" |
142 | 137 | total_rows_pruned = 0 |
143 | 138 |
|
144 | 139 | while True: |
@@ -174,50 +169,27 @@ def prune_phase_1_ss_claims( |
174 | 169 | prune_cutoff_date = job_start - timedelta(days=PHASE_1_CUTOFF) |
175 | 170 | part_d_codes = ",".join(str(code) for code in PART_D_CLAIM_TYPE_CODES) |
176 | 171 |
|
177 | | - phase_1_claim_filter = f""" |
178 | | - clm.clm_type_cd BETWEEN {PHASE_1_SS_MIN} AND {PHASE_1_SS_MAX} |
179 | | - AND clm.clm_src_id IN |
180 | | - ('{FISS_CLM_SOURCE}', '{MCS_CLM_SOURCE}', '{VMS_CLM_SOURCE}') |
181 | | - AND clm.clm_idr_ld_dt < %s |
182 | | - """ |
183 | | - non_latest_non_part_d_claim_filter = f""" |
184 | | - clm.clm_ltst_clm_ind = 'N' |
185 | | - AND clm.clm_type_cd NOT IN ({part_d_codes}) |
186 | | - AND clm.clm_idr_ld_dt < %s |
187 | | - """ |
188 | | - |
189 | 172 | logger.info("pruning phase 1 ss claims older than {}", prune_cutoff_date) |
190 | 173 |
|
| 174 | + prune_query, params = stale_phase_1_claims_query(claim_table, item_table, prune_cutoff_date) |
| 175 | + |
191 | 176 | with psycopg.connect(get_connection_string(load_mode)) as conn: |
192 | | - _prune_table_in_batches( |
193 | | - conn, |
194 | | - item_table, |
195 | | - f""" |
196 | | - DELETE FROM {item_table} |
197 | | - WHERE (clm_uniq_id, bfd_row_id) IN ( |
198 | | - SELECT item.clm_uniq_id, item.bfd_row_id |
199 | | - FROM {item_table} item |
200 | | - JOIN {claim_table} clm ON clm.clm_uniq_id = item.clm_uniq_id |
201 | | - WHERE {phase_1_claim_filter} |
202 | | - LIMIT {PRUNE_BATCH_MAX_SIZE} |
203 | | - ) |
| 177 | + for target_table in [item_table, claim_table]: |
| 178 | + _prune_table_in_batches( |
| 179 | + conn, |
| 180 | + target_table, |
| 181 | + f""" |
| 182 | + DELETE FROM {target_table} |
| 183 | + WHERE clm_uniq_id IN ({prune_query}) |
204 | 184 | """, |
205 | | - (prune_cutoff_date,), |
206 | | - ) |
| 185 | + params, |
| 186 | + ) |
207 | 187 |
|
208 | | - _prune_table_in_batches( |
209 | | - conn, |
210 | | - claim_table, |
211 | | - f""" |
212 | | - DELETE FROM {claim_table} |
213 | | - WHERE clm_uniq_id IN ( |
214 | | - SELECT clm.clm_uniq_id FROM {claim_table} clm |
215 | | - WHERE {phase_1_claim_filter} |
216 | | - LIMIT {PRUNE_BATCH_MAX_SIZE} |
217 | | - ) |
218 | | - """, |
219 | | - (prune_cutoff_date,), |
220 | | - ) |
| 188 | + non_latest_non_part_d_claim_filter = f""" |
| 189 | + clm.clm_ltst_clm_ind = 'N' |
| 190 | + AND clm.clm_type_cd NOT IN ({part_d_codes}) |
| 191 | + AND clm.clm_idr_ld_dt < %s |
| 192 | + """ |
221 | 193 |
|
222 | 194 | logger.info("pruning non-latest non-Part-D ss claims older than {}", prune_cutoff_date) |
223 | 195 |
|
|
0 commit comments