@@ -232,13 +232,25 @@ def analyze_target_partition(self, target_date: str, connection=None) -> int:
232232 partition_table = f"{ PARSED_TABLE } _1_prt_p{ target_date .replace ('-' , '' )} "
233233 return self .db .execute (f"ANALYZE { partition_table } " , connection = connection )
234234
235- def upsert_die_yield_daily_summary (self , target_date : date | str , connection = None ) -> int :
235+ def replace_die_yield_daily_summary (self , target_date : date | str ) -> None :
236+ self .delete_die_yield_daily_summary (target_date )
237+ self .insert_die_yield_daily_summary (target_date )
238+
239+ def delete_die_yield_daily_summary (self , target_date : date | str ) -> None :
240+ if isinstance (target_date , str ):
241+ target_date = datetime .strptime (target_date , "%Y-%m-%d" ).date ()
242+ delete_query = """
243+ delete from prism_common.de_trend_die_yield_daily
244+ where occur_date = :target_date
245+ """
246+ self .db .execute (delete_query , params = {"target_date" : target_date })
247+
248+ def insert_die_yield_daily_summary (self , target_date : date | str ) -> None :
236249 if isinstance (target_date , str ):
237250 target_date = datetime .strptime (target_date , "%Y-%m-%d" ).date ()
238251 start_time = datetime .combine (target_date , datetime .min .time ())
239252 end_time = start_time + timedelta (days = 1 )
240-
241- query = f"""
253+ insert_query = f"""
242254 insert into prism_common.de_trend_die_yield_daily (
243255 occur_date,
244256 eq_name,
@@ -307,26 +319,29 @@ def upsert_die_yield_daily_summary(self, target_date: date | str, connection=Non
307319 sum(case when valid_wafer_yn = 1 then reject_yn else 0 end) as reject_wafer,
308320 now() as created_at
309321 from wafer_code_data
310- group by occur_date, eq_name
311- on conflict (occur_date, eq_name)
312- do update set
313- total_die = excluded.total_die,
314- reject_shot = excluded.reject_shot,
315- to_repair_die = excluded.to_repair_die,
316- repair_nok = excluded.repair_nok,
317- total_wafer = excluded.total_wafer,
318- reject_wafer = excluded.reject_wafer,
319- created_at = now();
322+ group by occur_date, eq_name;
320323 """
321- return self .db .execute (query , params = {"start_time" : start_time , "end_time" : end_time }, connection = connection )
324+ self .db .execute (insert_query , params = {"start_time" : start_time , "end_time" : end_time })
322325
323- def upsert_root_cause_daily_summary (self , target_date : date | str , connection = None ) -> int :
326+ def replace_root_cause_daily_summary (self , target_date : date | str ) -> None :
327+ self .delete_root_cause_daily_summary (target_date )
328+ self .insert_root_cause_daily_summary (target_date )
329+
330+ def delete_root_cause_daily_summary (self , target_date : date | str ) -> None :
331+ if isinstance (target_date , str ):
332+ target_date = datetime .strptime (target_date , "%Y-%m-%d" ).date ()
333+ delete_query = """
334+ delete from prism_common.de_trend_root_cause_daily
335+ where occur_date = :target_date
336+ """
337+ self .db .execute (delete_query , params = {"target_date" : target_date })
338+
339+ def insert_root_cause_daily_summary (self , target_date : date | str ) -> None :
324340 if isinstance (target_date , str ):
325341 target_date = datetime .strptime (target_date , "%Y-%m-%d" ).date ()
326342 start_time = datetime .combine (target_date , datetime .min .time ())
327343 end_time = start_time + timedelta (days = 1 )
328-
329- query = """
344+ insert_query = """
330345 insert into prism_common.de_trend_root_cause_daily (
331346 occur_date,
332347 eq_name,
@@ -345,13 +360,9 @@ def upsert_root_cause_daily_summary(self, target_date: date | str, connection=No
345360 and p.code_occur_time < :end_time
346361 and p.eq_name is not null
347362 and p.root_cause is not null
348- group by p.code_occur_time::date, p.eq_name, p.root_cause
349- on conflict (occur_date, eq_name, root_cause)
350- do update set
351- frequency = excluded.frequency,
352- created_at = now();
363+ group by p.code_occur_time::date, p.eq_name, p.root_cause;
353364 """
354- return self .db .execute (query , params = {"start_time" : start_time , "end_time" : end_time }, connection = connection )
365+ self .db .execute (insert_query , params = {"start_time" : start_time , "end_time" : end_time })
355366
356367 def transaction (self ):
357368 return self .db .transaction ()
0 commit comments