インポート環境準備(load data LOCAL infile)・法人の基本3情報のデータ(法人番号)
国税庁が公開している「法人の基本3情報のデータ(法人番号)」データは膨大です。
レコードにして400万レコードを超えるデータで、
レンタルサーバーにWeb経由で取り込むのは地味に苦労しますが取込は可能です。
ここでは「load data LOCAL infile」を利用して取り込みを行う前の、
テーブル作成についてご紹介します。前準備です。
本記事は以下の一連作業の1コンテンツです。
目次
ダウンロードデータの取り込み先準備
ダウンロードしたファイルは.zip形式で保存されます。
ファイルの中はそれぞれのエンコード方式のテキストデータです。
以下仕様書に従って、データベースの作成を行います。
リソース定義書(PDF形式)(Ver.3.0) ダウンロード(PDF/261KB:k-resource-dl-ver3.pdf)
PDFの一覧の通りではありますが「項目の説明」列部分に、
「CSV形式で取得する場合は設定されない(XMLのみ)」といった記述がある項目は、
「ダウンロード」列に「〇」表記があってもCSVにその項目は含まれてきません。
ざっくりと私が取り込みを行った際のテーブル作成のSQLは以下のようにしています。
適宜、変更してご活用を。
Shift-JIS版のデータを取り込む場合
Shift-JIS版のデータを取り込む場合に悩んだのが、
MySQLで言うところの「sjis」なのか、sjis-for-windowsである「cp932」なのかです。
結論としては、どちらでも問題はありませんでしたが、
念のため、両方を記載いたします。
sjisエンコード利用
「sjis」を利用してデータを格納する場合、以下のテーブル定義で作業します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
CREATE TABLE `gov_nta_corpnum_sjis` ( `sequenceNumber` char(8) DEFAULT NULL COMMENT '都道府県コード+データシーケンス10桁、0埋め', `corporateNumber` char(13) NOT NULL, `process` varchar(2) DEFAULT NULL COMMENT '01 新規/11 商号又は名称の変更/12 国内所在地/13 国外所在地/21 登記記録/22 登記記録/71 吸収合併/72 吸収合併無効/81 商号の登記の抹消/99 削除', `correct` varchar(1) DEFAULT NULL COMMENT '-/0 訂正以外/1 訂正', `updateDate` varchar(10) DEFAULT NULL, `changeDate` varchar(10) DEFAULT NULL, `name` varchar(256) DEFAULT NULL, `nameImageId` varchar(8) DEFAULT NULL, `kind` char(3) DEFAULT NULL COMMENT '- -\n101 国の機関\n201 地方公共団体\n301 株式会社 値「301」は、株式会社の情報であることを意味する。\n302 有限会社 値「302」は、特例有限会社の情報であることを意味する。\n303 合名会社 値「303」は、合名会社の情報であることを意味する。\n304 合資会社\n305 合同会社\n399その他の設立登記法人\n401 外国会社等\n499 その他', `prefectureName` varchar(10) DEFAULT NULL, `cityName` varchar(20) DEFAULT NULL, `streetNumber` varchar(300) DEFAULT NULL, `addressImageId` varchar(8) DEFAULT NULL, `prefectureCode` char(2) DEFAULT NULL, `cityCode` char(3) DEFAULT NULL, `postCode` char(7) DEFAULT NULL, `addressOutside` varchar(300) DEFAULT NULL, `addressOutsideImageId` varchar(8) DEFAULT NULL, `closeDate` varchar(10) DEFAULT NULL, `closeCause` char(2) DEFAULT NULL, `successorCorporateNumber` char(13) DEFAULT NULL, `changeCause` varchar(500) DEFAULT NULL, `assignmentDate` varchar(10) DEFAULT NULL, `latest` char(1) DEFAULT NULL COMMENT '0 過去情報 値「0」は、過去の情報であることを意味する。\n1 最新情報', `enName` varchar(300) DEFAULT NULL, `enPrefectureName` varchar(9) DEFAULT NULL, `enCityName` varchar(600) DEFAULT NULL, `enAddressOutside` varchar(600) DEFAULT NULL, `furigana` varchar(500) DEFAULT NULL, `ext_notes` varchar(45) DEFAULT NULL, `ext_delflg` varchar(45) DEFAULT NULL, PRIMARY KEY (`corporateNumber`), KEY `pref` (`prefectureCode`) ) ENGINE=InnoDB DEFAULT CHARSET=sjis; |
cp932エンコード利用
「cp932」を利用してデータを格納する場合、以下のテーブル定義で作業します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
CREATE TABLE `gov_nta_corpnum_cp932` ( `sequenceNumber` char(8) DEFAULT NULL COMMENT '都道府県コード+データシーケンス10桁、0埋め', `corporateNumber` char(13) NOT NULL, `process` varchar(2) DEFAULT NULL COMMENT '01 新規/11 商号又は名称の変更/12 国内所在地/13 国外所在地/21 登記記録/22 登記記録/71 吸収合併/72 吸収合併無効/81 商号の登記の抹消/99 削除', `correct` varchar(1) DEFAULT NULL COMMENT '-/0 訂正以外/1 訂正', `updateDate` varchar(10) DEFAULT NULL, `changeDate` varchar(10) DEFAULT NULL, `name` varchar(256) DEFAULT NULL, `nameImageId` varchar(8) DEFAULT NULL, `kind` char(3) DEFAULT NULL COMMENT '- -\n101 国の機関\n201 地方公共団体\n301 株式会社 値「301」は、株式会社の情報であることを意味する。\n302 有限会社 値「302」は、特例有限会社の情報であることを意味する。\n303 合名会社 値「303」は、合名会社の情報であることを意味する。\n304 合資会社\n305 合同会社\n399その他の設立登記法人\n401 外国会社等\n499 その他', `prefectureName` varchar(10) DEFAULT NULL, `cityName` varchar(20) DEFAULT NULL, `streetNumber` varchar(300) DEFAULT NULL, `addressImageId` varchar(8) DEFAULT NULL, `prefectureCode` char(2) DEFAULT NULL, `cityCode` char(3) DEFAULT NULL, `postCode` char(7) DEFAULT NULL, `addressOutside` varchar(300) DEFAULT NULL, `addressOutsideImageId` varchar(8) DEFAULT NULL, `closeDate` varchar(10) DEFAULT NULL, `closeCause` char(2) DEFAULT NULL, `successorCorporateNumber` char(13) DEFAULT NULL, `changeCause` varchar(500) DEFAULT NULL, `assignmentDate` varchar(10) DEFAULT NULL, `latest` char(1) DEFAULT NULL COMMENT '0 過去情報 値「0」は、過去の情報であることを意味する。\n1 最新情報', `enName` varchar(300) DEFAULT NULL, `enPrefectureName` varchar(9) DEFAULT NULL, `enCityName` varchar(600) DEFAULT NULL, `enAddressOutside` varchar(600) DEFAULT NULL, `furigana` varchar(500) DEFAULT NULL, `ext_notes` varchar(45) DEFAULT NULL, `ext_delflg` varchar(45) DEFAULT NULL, PRIMARY KEY (`corporateNumber`), KEY `pref` (`prefectureCode`) ) ENGINE=InnoDB DEFAULT CHARSET=cp932; |
基本的にはWeb利用が目的ならUTF-8を利用されるのが主流になっていますし、
Unicode版を採用されたほうが後々は楽だろうと思います。
Unicode版を取り込む場合
Unicode版として公開されているCSVファイルが示す
Unicodeって・・・そもそも何?という部分は最初ありましたが、
MySQLへのインポートを行って表示を確認しましたところ、
MySQL的に表現すれば「utf8mb4」という文字コードの扱いで問題ありません。
以下は、MySQLWorkBenchから作成済みテーブルから生成したCREATE文です。
MySQLWorkBenchの仕様か、各カラムに「COLLATE utf8mb4_unicode_ci
」が出ていますが、
基本的には最下部の「ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
」のみで問題ありません。
尚、デフォルトの文字コードはUTF8の環境を利用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
CREATE TABLE `gov_nta_corpnum_utf8mb4` ( `sequenceNumber` char(8) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '都道府県コード+データシーケンス10桁、0埋め', `corporateNumber` char(13) COLLATE utf8mb4_unicode_ci NOT NULL, `process` varchar(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '01 新規/11 商号又は名称の変更/12 国内所在地/13 国外所在地/21 登記記録/22 登記記録/71 吸収合併/72 吸収合併無効/81 商号の登記の抹消/99 削除', `correct` varchar(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '-/0 訂正以外/1 訂正', `updateDate` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `changeDate` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `name` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `nameImageId` varchar(8) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `kind` char(3) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '- -\n101 国の機関\n201 地方公共団体\n301 株式会社 値「301」は、株式会社の情報であることを意味する。\n302 有限会社 値「302」は、特例有限会社の情報であることを意味する。\n303 合名会社 値「303」は、合名会社の情報であることを意味する。\n304 合資会社\n305 合同会社\n399その他の設立登記法人\n401 外国会社等\n499 その他', `prefectureName` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `cityName` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `streetNumber` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `addressImageId` varchar(8) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `prefectureCode` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `cityCode` char(3) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `postCode` char(7) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `addressOutside` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `addressOutsideImageId` varchar(8) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `closeDate` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `closeCause` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `successorCorporateNumber` char(13) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `changeCause` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `assignmentDate` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `latest` char(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '0 過去情報 値「0」は、過去の情報であることを意味する。\n1 最新情報', `enName` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `enPrefectureName` varchar(9) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `enCityName` varchar(600) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `enAddressOutside` varchar(600) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `furigana` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `ext_notes` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `ext_delflg` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`corporateNumber`), KEY `pref` (`prefectureCode`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
テーブルの作成が済んだら、データの取り込みを行います。
後記
誰かこういうSQLコピペでサクッとテーブル作れるようにと、
公開してくれていればなぁと思ったりするんですけど、
検索すると意外と見つからないので、いつもメイン作業から脱線してしまいます。
なので、轍はちゃんと遺しておきたい。
次に通る人が楽になったらいい。
とはいえ、今やってる開発というか作業は、
別にこのデータを取り込むことが目的じゃないんですよね。
「法人名は取得できる」けど、そのキーが取得できないので、
そのままデータを格納すると、主キーが法人名か単なる連番を振るしかなくて。
そんな気持ち悪い状態でデータベースに格納できない。
ならキーを持ったテーブルを用意して、法人名で主キーを取るぞ!となり、
完全にドツボにハマっているというステータスにあります。
「主キーを取るぞ!」となった結果、460万件必要になるという鬱。
まぁ、やっちゃえば自DBでサクッと処理出来ていいんでしょうけど。とほほ。
本サイトで公開しているツールについては、
十分にテストは行っておりますが個人で作成している為、
潜在的なバグがないとは言い切れません。
その為、ツールを用いた結果については十分検証の上ご利用ください。
当サイトおよび、管理人は如何なる損害もその責を負いません。
当サイト内のコンテンツおよび画像において、
出典・引用の外部著作権者の明記がないものは、
すべて管理人による著作物です。
当サイトでご紹介しておりますコンテンツの著作権の放棄は致しません。
サイト内コンテンツを引用される際にはご連絡は不要です。
ただし、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
公開日:
最終更新日:2019/06/20