From 277950ba8dc1d98dd21de989043c3631d117bbc8 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 11 Jun 2025 19:23:56 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E5=87=A6=E7=90=86=E4=BB=B6=E6=95=B0?= =?UTF-8?q?=E3=81=A8=E6=AD=A3=E5=B8=B8=E7=B5=82=E4=BA=86=E4=BB=B6=E6=95=B0?= =?UTF-8?q?=E3=82=92=E5=80=8B=E5=88=A5=E3=81=A7=E5=8F=96=E5=BE=97=E3=80=82?= =?UTF-8?q?=E4=BB=B6=E6=95=B0=E3=81=AB=E5=B7=AE=E3=81=8C=E3=81=82=E3=82=8B?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AF=E9=87=8D=E8=A4=87=E3=83=AC=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=8C=E3=81=82=E3=82=8B=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E6=80=A7=E3=81=8C=E3=81=82=E3=82=8B=E3=81=A8=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=83=8B=E3=83=B3=E3=82=B0=E3=82=92=E5=87=BA=E5=8A=9B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/main.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/ecs/dataimport/dataimport/main.py b/ecs/dataimport/dataimport/main.py index 13cdbfa1..c6f456aa 100644 --- a/ecs/dataimport/dataimport/main.py +++ b/ecs/dataimport/dataimport/main.py @@ -430,6 +430,8 @@ def import_data_with_bulk( process_count = 0 # 処理件数カウンタ normal_count = 0 # 正常終了件数カウンタ + warning_count = 0 # ワーニング終了件数カウンター + warning_info = '' # ワーニング情報 load_schema_name = settings_list[SETTINGS_ITEM["loadSchemaName"]] has_header = settings_list[SETTINGS_ITEM["headerFlag"]] or int( @@ -448,7 +450,7 @@ def import_data_with_bulk( LOAD DATA LOCAL INFILE %s - REPLACE + IGNORE INTO TABLE {load_schema_name} CHARACTER SET {MYSQL_CHARSET_CODE[settings_list[SETTINGS_ITEM["charCode"]]]} @@ -482,24 +484,33 @@ def import_data_with_bulk( # ロードスキーマのトランザクション開始 with conn.cursor() as cur: cur.execute(sql, [LOCAL_TEMPORARY_FILE_PATH, target_file_name]) - # 一括登録モードの場合、LOAD文の成功行数を取得してprocess_countにする + # 処理件数と成功件数を取得する cur.execute("SELECT ROW_COUNT()") - process_count = cur.fetchone()[0] + normal_count = cur.fetchone()[0] + cur.execute("SELECT @file_row_cnt") + file_row_cnt = cur.fetchone()[0] + # ファイル行番号はヘッダがある時は-1して、データ行の行数と合わせる。 + process_count = file_row_cnt - 1 if has_header else file_row_cnt + conn.commit() except Exception as e: print( f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {ERROR} E-MAIN-02 - 一括登録モードのSQL実行に失敗しました。エラー内容: {e}') error(bucket_name, target_data_source, target_file_name, log_info) - # 一括登録の場合、クエリ実行に成功したら、処理件数と成功件数は同じにする - normal_count = process_count + # 処理件数 - 登録件数をワーニング件数とする + warning_count = process_count - normal_count + # ワーニングが1件でもある場合、一部登録ができていないため、ワーニング情報を登録する + if warning_count > 0: + warning_info = f'一部レコードの登録に失敗しています。行が重複している可能性があります。 投入データ件数:{process_count}, 正常終了件数:{normal_count}' + return { "counts": { "process": process_count, "normal": normal_count, - "warning": 0 # 一括登録時はワーニングにならずエラーになるため、必ず0件 + "warning": warning_count }, - "warning_info": '' # 一括登録時はワーニングにならずエラーになるため、空文字を返却 + "warning_info": warning_info } From 11c6945473de77a00a314f032bfd58b4b92432d0 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 11 Jun 2025 21:13:41 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=201=E8=A1=8C=E3=82=B3=E3=83=9F?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=83=A2=E3=83=BC=E3=83=89=E3=81=AE=E3=83=87?= =?UTF-8?q?=E3=82=B0=E3=83=AC=E4=BF=AE=E6=AD=A3=E3=80=82=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=83=87=E3=83=B3=E3=83=88=E3=81=8C=E3=82=BA=E3=83=AC=E3=81=A6?= =?UTF-8?q?=E3=81=8A=E3=82=8A=E3=80=81=E3=83=AB=E3=83=BC=E3=83=97=E3=81=AE?= =?UTF-8?q?1=E5=9B=9E=E7=9B=AE=E3=81=A7=E7=B5=90=E6=9E=9C=E3=82=92?= =?UTF-8?q?=E8=BF=94=E3=81=99=E3=82=88=E3=81=86=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=97=E3=81=BE=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/dataimport/dataimport/main.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ecs/dataimport/dataimport/main.py b/ecs/dataimport/dataimport/main.py index c6f456aa..d51a6759 100644 --- a/ecs/dataimport/dataimport/main.py +++ b/ecs/dataimport/dataimport/main.py @@ -382,14 +382,14 @@ def import_data_with_commit_per_row( print( f'{datetime.now():%Y-%m-%d %H:%M:%S} {log_info} {WARNING} W-MAIN-01 {index} ロードスキーマ登録時にエラーが発生しました {line} {e}') - return { - "counts": { - "process": process_count, - "normal": normal_count, - "warning": warning_count - }, - "warning_info": warning_info - } + return { + "counts": { + "process": process_count, + "normal": normal_count, + "warning": warning_count + }, + "warning_info": warning_info + } def import_data_with_bulk(