From b70974b28fe511c35f844eedd7b467f89f147e7b Mon Sep 17 00:00:00 2001 From: yono Date: Sat, 21 Jun 2025 01:44:57 +0900 Subject: [PATCH] =?UTF-8?q?fix:=E6=9D=A1=E4=BB=B6=E9=A0=85=E7=9B=AE?= =?UTF-8?q?=E3=81=8C=E6=96=87=E5=AD=97=E5=88=97=E5=9E=8B8=E6=A1=81,6?= =?UTF-8?q?=E6=A1=81,=E6=97=A5=E4=BB=98=E5=9E=8B=E3=81=A7=E6=9D=A5?= =?UTF-8?q?=E3=82=89=E3=82=8C=E3=81=A6=E3=82=82=E5=A4=A7=E4=B8=88=E5=A4=AB?= =?UTF-8?q?=E3=81=AA=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/batch/archive_jsk_data.py | 10 ++++- .../src/batch/jskult_archive_manager.py | 41 ++++++++++++++++--- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/ecs/jskult-batch-archive-jsk-data/src/batch/archive_jsk_data.py b/ecs/jskult-batch-archive-jsk-data/src/batch/archive_jsk_data.py index 3db4804b..655074ff 100644 --- a/ecs/jskult-batch-archive-jsk-data/src/batch/archive_jsk_data.py +++ b/ecs/jskult-batch-archive-jsk-data/src/batch/archive_jsk_data.py @@ -23,7 +23,11 @@ def exec(): for jskult_archive_manage_data in jskult_archive_manage_data_list: # 対象テーブルで条件項目が条件年月以前のデータを取得 archive_data = jskult_archive_manager.get_archive_data( - jskult_archive_manage_data["target_table"], jskult_archive_manage_data["filter_column"], jskult_archive_manage_data["filter_date"]) + jskult_archive_manage_data["target_table"], + jskult_archive_manage_data["filter_column_name"], + jskult_archive_manage_data["filter_column_type"], + jskult_archive_manage_data["filter_column_digit"], + jskult_archive_manage_data["filter_date"]) # 取得データが0件の場合、スキップする if not archive_data: logger.info( @@ -60,7 +64,9 @@ def exec(): # アーカイブしたデータをDBから削除 jskult_archive_manager.delete_archive_data( jskult_archive_manage_data["target_table"], - jskult_archive_manage_data["filter_column"], + jskult_archive_manage_data["filter_column_name"], + jskult_archive_manage_data["filter_column_type"], + jskult_archive_manage_data["filter_column_digit"], jskult_archive_manage_data["filter_date"]) logger.info( f"アーカイブしたデータのDBから削除に成功しました。対象テーブル:{jskult_archive_manage_data['target_table']} 条件年月:{jskult_archive_manage_data['filter_date']}") diff --git a/ecs/jskult-batch-archive-jsk-data/src/batch/jskult_archive_manager.py b/ecs/jskult-batch-archive-jsk-data/src/batch/jskult_archive_manager.py index 9bb25341..57941413 100644 --- a/ecs/jskult-batch-archive-jsk-data/src/batch/jskult_archive_manager.py +++ b/ecs/jskult-batch-archive-jsk-data/src/batch/jskult_archive_manager.py @@ -17,7 +17,9 @@ class JskultArchiveManager: sql = """ select target_table - , filter_column + , filter_column_name + , filter_column_type + , filter_column_digit , filter_date , run_interval_months , prev_filter_date @@ -34,18 +36,44 @@ class JskultArchiveManager: raise finally: self._db.disconnect() + + def _filter_column_to_date(self,filter_column_name:str , filter_column_type:str, filter_column_digit:int): + """ filter_columnを日付型へ変換""" + try: + logger.info("処理開始:_filter_column_to_date") + if filter_column_type == 'date': + filter_column = filter_column_name - def get_archive_data(self,target_table:str, filter_column:str, filter_date:str): + elif filter_column_type == 'varchar' and filter_column_digit == 8: + filter_column = f"str_to_date({filter_column_name},'%Y%m%d')" + + elif filter_column_type == 'varchar' and filter_column_digit == 6: + filter_column = f"str_to_date(concat({filter_column_name} , '01'),'%Y%m%d')" + + else: + raise Exception("条件項目データ型もしくは条件項目桁数が不正です。") + + logger.info("処理終了:_filter_column_to_date") + return filter_column + + except Exception as e: + logger.info("異常終了:_filter_column_to_date") + raise + + def get_archive_data(self,target_table:str, filter_column_name:str, filter_column_type:str, filter_column_digit:int, filter_date:str): """アーカイブするデータを取得""" try: logger.info("処理開始:get_archive_data") + + filter_column = self._filter_column_to_date(filter_column_name, filter_column_type, filter_column_digit) + sql = f""" select * from src07.{target_table} where - str_to_date({filter_column},'%Y%m%d') <= :filter_date; + {filter_column} <= :filter_date; """ self._db.connect() parameter_dict = {'filter_date' : filter_date} @@ -58,15 +86,18 @@ class JskultArchiveManager: finally: self._db.disconnect() - def delete_archive_data(self, target_table:str, filter_column:str, filter_date:str): + def delete_archive_data(self, target_table:str, filter_column_name:str, filter_column_type:str, filter_column_digit:int, filter_date:str): """アーカイブしたデータを削除""" try: logger.info("処理開始:delete_archive_data") + + filter_column = self._filter_column_to_date(filter_column_name, filter_column_type, filter_column_digit) + sql = f""" delete from src07.{target_table} where - str_to_date({filter_column},'%Y%m%d') <= :filter_date; + {filter_column} <= :filter_date; """ self._db.connect() self._db.begin()