Class: JpAddressComplement::Importers::CsvImporter
- Inherits:
-
Object
- Object
- JpAddressComplement::Importers::CsvImporter
- Includes:
- KenAll
- Defined in:
- lib/jp_address_complement/importers/csv_importer.rb
Overview
UTF-8 版 KEN_ALL(utf_ken_all.csv)を読み込み、jp_address_complement_postal_codes テーブルに upsert する UTF-8 形式の CSV を前提として処理する
Constant Summary collapse
- KEY_COLUMNS =
バッチ削除・ユニークキーとして使うカラム群
%i[postal_code pref_code city town kana_pref kana_city kana_town].freeze
- DELETE_CHUNK_SIZE =
SQLite のデフォルト式木深度制限(1000)対策。 reduce(:or) で N 件 OR 結合すると深さ ≈ N + 6 になるため、500 件に収める(深さ ≈ 506)。
500- BATCH_SIZE =
: Integer
1000
Constants included from KenAll
KenAll::COL_CITY, KenAll::COL_HAS_ALIAS, KenAll::COL_IS_LARGE_OFFICE, KenAll::COL_IS_PARTIAL, KenAll::COL_KANA_CITY, KenAll::COL_KANA_PREF, KenAll::COL_KANA_TOWN, KenAll::COL_POSTAL_CODE, KenAll::COL_PREF, KenAll::COL_PREF_CODE, KenAll::COL_TOWN
Instance Method Summary collapse
-
#import ⇒ ImportResult
CSV を読み込み、upsert 後に古いバージョンの行を一括削除する。戻り値は ImportResult。 バージョンは既存レコードの最大値+1 で、別テーブルでは管理しない。.
-
#initialize(csv_path) ⇒ CsvImporter
constructor
A new instance of CsvImporter.
Constructor Details
#initialize(csv_path) ⇒ CsvImporter
Returns a new instance of CsvImporter.
31 32 33 |
# File 'lib/jp_address_complement/importers/csv_importer.rb', line 31 def initialize(csv_path) @csv_path = csv_path end |
Instance Method Details
#import ⇒ ImportResult
CSV を読み込み、upsert 後に古いバージョンの行を一括削除する。戻り値は ImportResult。 バージョンは既存レコードの最大値+1 で、別テーブルでは管理しない。
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/jp_address_complement/importers/csv_importer.rb', line 39 def import raise ImportError, "CSV ファイルが見つかりません: #{@csv_path}" unless File.exist?(@csv_path) import_version = (PostalCode.maximum(:version) || 0) + 1 total_upserted, keys_in_csv = read_and_upsert(import_version) raise ImportError, '有効行が0件のためインポートを実行しません(空CSVは拒否します)' if keys_in_csv.empty? deleted = delete_obsolete(import_version) ImportResult.new(upserted: total_upserted, deleted: deleted) end |