[C03] /admin/analyze は 1 ファイルが非 UTF-8 だと analyze 全体を中断し、他の正常 UTF-8 ファイルも無視してしまう
再現条件
- 同一プレフィックスに UTF-8 ファイルと非 UTF-8 ファイル(例: CP932 / Shift_JIS)が混在
- Admin UI で
/admin/analyze 実行
観測された挙動
_group_csv_by_header でグルーピングされた代表ファイルが非 UTF-8 だった場合(たまたま先頭に来た CP932 ファイルなど)、_detect_encoding が UnicodeDecodeError を上げて処理全体が return
- Admin UI には次のエラーが表示される:
CSV分析エラー: UTF-8 以外のエンコーディングが検出されました:
testcase/C03-realestate-bom-cp932/properties_cp932.csv。CSV は UTF-8 で保存してください。
- 他の正常な UTF-8 ファイル(
properties_utf8.csv や properties_utf8_bom.csv 等)はまったく analyze されず、利用者側はどのファイルが問題だったかを 1 ファイル分しか知ることができない
原因
lambda/adminwebbackend/app.py の analyze 本体:
for idx, group in enumerate(groups, 1):
...
info = _analyze_csv_file(CSV_BUCKET_NAME, representative_key)
if "error" in info:
error_msg = info["error"]
if "UTF-8 以外" in error_msg:
logger.error("analyze: エンコーディングエラー %s: %s", representative_key, error_msg)
yield _sse("error", {"message": error_msg})
return # ← ここで全 group の処理を打ち切る
errors.append(...)
continue # ← 他のエラー種別は continue で他グループを続ける
- 他のエラー(CSV 読み取り失敗 等)は
continue で別グループを処理するのに、UTF-8 エラーだけは return で即全停止
_detect_encoding は各グループの 代表 1 ファイルしか見ないため、グループ内の他ファイルが非 UTF-8 でもそちらは検出できず、COPY 段階で Invalid UTF8 character 系のエラーになる(= 代表の運によって挙動が変わる)
期待される挙動
- 1 ファイルの encoding エラーで analyze 全体を止めない。他のグループは処理を続けて、結果にまとめて「このファイルは非 UTF-8 のため除外した」と報告する
- Admin UI の analyze プレビュー画面で、非 UTF-8 ファイルだけを除外した状態でテーブル定義を提示し、利用者が「このファイルを再アップロードしますか」「除外したまま進めますか」を選べるようにする
- 代表 1 ファイルだけでなく、グループ内の他ファイルにも簡易的な encoding チェックをかける(または少なくとも「このグループの他ファイルは未検証」と警告する)
再現手順
- 同一スキーマの CSV を 3 ファイル用意
properties_cp932.csv(CP932 エンコード)
properties_utf8.csv(UTF-8)
properties_utf8_bom.csv(BOM 付き UTF-8)
- 同一 S3 プレフィックスに配置
- Admin UI で analyze を実行
_detect_encoding が CP932 ファイルを検出して analyze 全体が中断し、残り 2 ファイルは無視されることを観測
参考情報
- 対象スタック:
arn:aws:cloudformation:ap-northeast-1:411521242467:stack/stagingDwhAgentStack/6d94b460-4105-11f1-a522-0e470ca459d5
- 関連ファイル:
lambda/adminwebbackend/app.py の analyze generator, _detect_encoding, _analyze_csv_file
[C03]
/admin/analyzeは 1 ファイルが非 UTF-8 だと analyze 全体を中断し、他の正常 UTF-8 ファイルも無視してしまう再現条件
/admin/analyze実行観測された挙動
_group_csv_by_headerでグルーピングされた代表ファイルが非 UTF-8 だった場合(たまたま先頭に来た CP932 ファイルなど)、_detect_encodingがUnicodeDecodeErrorを上げて処理全体がreturnproperties_utf8.csvやproperties_utf8_bom.csv等)はまったく analyze されず、利用者側はどのファイルが問題だったかを 1 ファイル分しか知ることができない原因
lambda/adminwebbackend/app.pyの analyze 本体:continueで別グループを処理するのに、UTF-8 エラーだけはreturnで即全停止_detect_encodingは各グループの 代表 1 ファイルしか見ないため、グループ内の他ファイルが非 UTF-8 でもそちらは検出できず、COPY 段階でInvalid UTF8 character系のエラーになる(= 代表の運によって挙動が変わる)期待される挙動
再現手順
properties_cp932.csv(CP932 エンコード)properties_utf8.csv(UTF-8)properties_utf8_bom.csv(BOM 付き UTF-8)_detect_encodingが CP932 ファイルを検出して analyze 全体が中断し、残り 2 ファイルは無視されることを観測参考情報
arn:aws:cloudformation:ap-northeast-1:411521242467:stack/stagingDwhAgentStack/6d94b460-4105-11f1-a522-0e470ca459d5lambda/adminwebbackend/app.pyの analyze generator,_detect_encoding,_analyze_csv_file