MTU lab

法人番号の一括ダウンロードと表へのインポート (1/3)

概要

本稿では国税庁から毎月リリースされている全国の法人番号を Oracle Database へロードし、更に毎日リリースされている差分データを使って最新版へ更新する方法について説明します。

全国に約 466 万件もある法人のデータは CSV データにすると 1ギガバイト以上に達するのでテーブルへ手際よく格納する為には、幾つかの工夫を組み合わせて対処する必要が有ります。

本稿では、作業順に内容を3編に分け、どのような工夫が有効なのか詳しく説明していきます。

記事 作業内容
1/3 データ提供サイトからの書庫ファイルのダウンロード及びCSVファイル抽出
2/3 オリジナルデータをロードし易い形式に整えるユーティリティ作成と変換
3/3 テーブル作成等、ロードに必要な資源の構築とロード

尚、記事の内容は1年以上のプログラミング経験と、1年以上の Oracle DB 管理者としての経験のある読者を対象としています。

本稿についてのお問い合わせは対応致しかねますので予めご了承ください。

準備

次に挙げたものを事前に準備して下さい。リンクをクリックすると別なサイトへ移動しますのでご了承願います。

用意するもの 入手先
Firefox ブラウザ mozilla のサイト
Python 3 言語処理系 python.org のサイト
Mozilla GeckoDriver Selenium WebDriver のサイト
弊社提供資源 書庫ファイル

※本稿で提供するソフトウエアの著作権は株式会社プラムシックスが所有します。このソフトウエアを取り扱う際は MIT License に定められた条項を遵守するものとします。

Firefox ブラウザ

  1. サイトからダウンロードしたインストールプログラムをウイザードの指示に従ってインストールして下さい。

Python 3 言語処理系

  1. サイトからダウンロードしたインストールプログラムをウイザードの指示に従ってインストールして下さい。
  2. python.exe が %LOCALAPPDATA%\Programs\Python\Python37 へインストールされるのでこのフォルダを環境変数 PATH へ含めて下さい。
  3. コマンドプロンプトを開き、次のコマンドを実行して下さい。
    pip install --upgrade pip
    pip install selenium
    

Mozilla GeckoDriver

  1. サイトからダウンロードした書庫ファイルを適当な場所へ解凍して下さい。geckodriver.exe という実行形式ファイルが保存されたフォルダを環境変数 PATH へ含めて下さい。

弊社提供資源

  1. リポジトリからからダウンロードした書庫ファイル(名前:houjin_bangou-master.zip)を適当な場所へ解凍して下さい。以下本稿に於きまして解凍した先のフォルダを『資源フォルダ』と呼ぶことにします。

実行

準備作業は色々手間が掛かるかと思いますが、準備が完了すると CSV ファイル抽出は python プログラムによって一気に進める事が出来ます。次の手順を実施して下さい。

  1. コマンドプロンプトを表示し、資源フォルダへカレントディレクトリを変更します。
    cd /d 資源フォルダ
  2. 次のコマンドを入力して python プログラムを実行します。
    python dl_houjin_code.py
  3. 下記の画面表示が全て表示されるまで待機して下さい。通常、数分掛かります。
    Downloading HOUJIN_BANGOU zenken files...
    Downloading HOUJIN_BANGOU sabun files...
    Unzipping HOUJIN_BANGOU files...
    Erasing HOUJIN_BANGOU files...
    Erasing PGP signature files...
    Completed successfully.
  4. 次のコマンドを入力して抽出されたCSVファイルを確認して下さい。
    dir *.csv
  5. 47都道府県+国外法人+当日までの差分データが取得されている事を確認して下さい。
    以下に実行例を示します。
     ドライブ C のボリューム ラベルがありません。
     ボリューム シリアル番号は 0CFD-95AA です
    
     c:\github\houjin_bangou のディレクトリ
    
    2018/10/10  15:51        39,254,293 01_hokkaido_all_20180928.csv
    2018/10/10  15:51         6,667,187 02_aomori_all_20180928.csv
    2018/10/10  15:51         5,816,444 03_iwate_all_20180928.csv
    2018/10/10  15:51        13,882,800 04_miyagi_all_20180928.csv
    2018/10/10  15:51         5,263,552 05_akita_all_20180928.csv
    2018/10/10  15:51         5,766,119 06_yamagata_all_20180928.csv
    2018/10/10  15:51        12,656,819 07_fukushima_all_20180928.csv
    2018/10/10  15:51        15,033,060 08_ibaraki_all_20180928.csv
    2018/10/10  15:51        12,348,677 09_tochigi_all_20180928.csv
    2018/10/10  15:51        12,533,447 10_gunma_all_20180928.csv
    2018/10/10  15:51        41,687,501 11_saitama_all_20180928.csv
    2018/10/10  15:51        35,625,731 12_chiba_all_20180928.csv
    2018/10/10  15:51       205,131,783 13_tokyo_all_20180928.csv
    2018/10/10  15:52        60,591,447 14_kanagawa_all_20180928.csv
    2018/10/10  15:52        12,820,351 15_niigata_all_20180928.csv
    2018/10/10  15:52         5,849,497 16_toyama_all_20180928.csv
    2018/10/10  15:52         7,120,432 17_ishikawa_all_20180928.csv
    2018/10/10  15:52         5,127,617 18_fukui_all_20180928.csv
    2018/10/10  15:52         5,743,096 19_yamanashi_all_20180928.csv
    2018/10/10  15:52        13,321,342 20_nagano_all_20180928.csv
    2018/10/10  15:52        11,815,109 21_gifu_all_20180928.csv
    2018/10/10  15:52        20,662,288 22_shizuoka_all_20180928.csv
    2018/10/10  15:52        45,279,481 23_aichi_all_20180928.csv
    2018/10/10  15:52         8,956,472 24_mie_all_20180928.csv
    2018/10/10  15:52         6,687,279 25_shiga_all_20180928.csv
    2018/10/10  15:52        18,667,061 26_kyoto_all_20180928.csv
    2018/10/10  15:52        74,620,707 27_osaka_all_20180928.csv
    2018/10/10  15:52        32,400,274 28_hyogo_all_20180928.csv
    2018/10/10  15:52         6,356,962 29_nara_all_20180928.csv
    2018/10/10  15:52         5,122,643 30_wakayama_all_20180928.csv
    2018/10/10  15:52         3,276,224 31_tottori_all_20180928.csv
    2018/10/10  15:52         3,803,937 32_shimane_all_20180928.csv
    2018/10/10  15:52        11,954,262 33_okayama_all_20180928.csv
    2018/10/10  15:52        18,749,250 34_hiroshima_all_20180928.csv
    2018/10/10  15:52         7,046,676 35_yamaguchi_all_20180928.csv
    2018/10/10  15:52         5,244,523 36_tokushima_all_20180928.csv
    2018/10/10  15:52         6,530,340 37_kagawa_all_20180928.csv
    2018/10/10  15:52         8,659,575 38_ehime_all_20180928.csv
    2018/10/10  15:52         4,300,604 39_kochi_all_20180928.csv
    2018/10/10  15:52        33,813,288 40_fukuoka_all_20180928.csv
    2018/10/10  15:52         4,038,123 41_saga_all_20180928.csv
    2018/10/10  15:52         6,924,889 42_nagasaki_all_20180928.csv
    2018/10/10  15:52        11,518,386 43_kumamoto_all_20180928.csv
    2018/10/10  15:52         7,815,583 44_oita_all_20180928.csv
    2018/10/10  15:52         6,389,928 45_miyazaki_all_20180928.csv
    2018/10/10  15:52         9,783,792 46_kagoshima_all_20180928.csv
    2018/10/10  15:52         9,203,517 47_okinawa_all_20180928.csv
    2018/10/10  15:52         2,901,278 99_kokugai_all_20180928.csv
    2018/10/10  15:52         1,015,174 diff_20181003.csv
    2018/10/10  15:52         1,190,133 diff_20181004.csv
    2018/10/10  15:52           956,361 diff_20181005.csv
    2018/10/10  15:52         1,065,040 diff_20181009.csv
    2018/10/10  15:52         1,304,358 diff_20181010.csv
                  53 個のファイル         920,294,712 バイト
                   0 個のディレクトリ  97,685,651,456 バイトの空き領域
    

まとめ

提供された python プログラム(ファイル名:dl_houjin_code.py)は次の操作をユーザに代わり実行してくれます。

上記までの作業により国税庁からリリースされているオリジナルのデータを最新版も含めて一括で入手することが出来ます。

但し、オリジナル・データはそのままでは Oracle Database のテーブルにインポートすることが出来ません。データの表現形式がインポートする為のユーティリティである、SQL*Loader のインターフェース仕様と互換性が無い為です。

そこでインターフェース仕様に適合させるための変換プログラムが必要となります。

法人番号の一括ダウンロードと表へのインポート (2/3)へ進む