LoginSignup
2
0

More than 1 year has passed since last update.

e-statのデータをAthenaで読み込む

Last updated at Posted at 2021-10-12

データの準備

e-statからCSVファイルをダウンロードする

  1. e-stat APIの利用ガイドを参照して、アプリケーションIDを取得する
  2. API機能テストフォーム統計データ取得を使って、データを取得する。

テストフォームには以下の項目を入力します。取得できるのは、最大10万行です。
- アプリケーションID
- 統計表ID(0003410379)
- データ形式(CSVを選択)
- セクションヘッダフラグ(出力しないを選択)

統計表IDは「男女別人口及び人口性比-全国,都道府県(大正9年~平成27年)」のものです。必要に応じて変更してください。
セクションヘッダフラグ[sectionHeaderFlg] を「出力しない」にしておくと、出力件数や調査名称などのメタデータが出力されず扱いやすくなります。「出力する」にすると、出力件数が10万行を超えるとヘッダーの行数が増えるなど扱いづらくなります。

e-statAPI.png

なお、e-statからは(APIではなく)DBからダウンロードすることでユーザ登録なしでCSVファイルをダウンロードできますが、文字コードがShift-JISのため、Athenaでは扱いづらいです。「引用符あり」「ヘッダーあり」「Shift-JIS」の組み合わせがAthenaと相性が良くないようです(こちらのサイトを参照)。
APIから取得した場合は、文字コードがUTF8なので問題なしです。

S3の作業

以降の作業はすべて同じリージョン内で行う前提です。
リージョンをまたぐとうまくいかないことがあるようです。

バケットの作成

AWS マネジメントコンソールからS3を選択 → バケットを作成 → 任意のバケット名を入力し、(他はデフォルトのまま)バケットを作成
backet.png

データのアップロード

上で作成しバケット名をクリックし、次の画面でファイルをドラッグ&ドロップ → アップロード
upload.png

Athenaの作業

AWS マネジメントコンソールからAthenaを選択 → 以下のクエリを入力し実行

データベースの作成

以下のクエリを実行してデータベースを作成します。

create database (データベース名)

テーブルの作成

次に、以下のクエリを実行してテーブルを作成します。

CREATE EXTERNAL TABLE IF NOT EXISTS
    データベース名.テーブル名(
        `tab_code` STRING,
        `表章項目` STRING,
        `cat01_code` STRING,
        `総数,男及び女_時系列` STRING,
        `area_code` STRING,
        `都道府県_時系列(人口集中地区有り一部の市)` STRING,
        `time_code` STRING,
        `時間軸(調査年)` STRING,
        `unit` STRING,
        `value` STRING,
        `annotation` STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES('serialization.format' = ',', 'field.delim' = ',' ,'quoteChar' = '\"', 'escapeChar' = '\\')
    LOCATION 's3のURI'
    TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1')
  • テーブル名
    小文字で始める、アンダーバーは使えないなどの制約があるので、AWSのドキュメントを参照してください。

  • 列名
    e-statから出力されるものをそのまま使っています。
    データの型はすべてString(文字列)で読み込みます。これは、Value等の数値項目であっても、秘匿や非該当などの理由で「-(ハイフン)」などの記号が入ってあることがあり、Athenaで読み込む際にエラーになるためです。

  • Row Format Serde
    今回は'org.apache.hadoop.hive.serde2.OpenCSVSerde'を指定します。データ形式に応じて、前述のサイトなどを参照して適切なものを選びます。

  • SerdePorperties
    field.delimは列の区切り文字です。ここでは「,(カンマ)」を指定しています。
    quoteCharは項目についている引用符です。e-statデータはすべて「"(ダブルクォート)」で囲まれているので、「"」を指定します。

  • locationには、データを保存したS3のフォルダのURIを指定します。Athenaではファイルごとではなく、フォルダまるごとを同一形式のデータとして読み込みます。「s3://backetName/foldername/」といった形式になります(最初のsは小文字、最後のスラッシュもお忘れなく)。

  • TblPropertiesのskip.header.line.countには、スキップする先頭の行数を指定します。e-stat APIからダウンロードする際に、セクションヘッダフラグ[sectionHeaderFlg] を「出力しない」としている場合は、ヘッダー行は1行なので「1」を指定します。

テーブルの確認

クエリが正常に実行できれば、左側のテーブル一覧にテーブル名が追加されるので、メニューボタン(点3つ)から「テーブルをプレビュー」を選択します。
preview.png

自動的にプレビューするクエリが実行され、中身を確認することができます。
results.png

以上で、e-statデータをAthenaから読み込むことができました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0