Wikipediaデータ MySQLを経由してBigQueryにLoadする


##概要
Big Queryで分析する際にWikipediaのデータを使いたかったのでMySQLを経由してBigQueryにLoadしてみました。

##目次
- [参考記事](#%E5%8F%82%E8%80%83%E8%A8%98%E4%BA%8B)
- [環境](#%E7%92%B0%E5%A2%83)
- [wikipadia -> MySQL](#wikipadia---mysql)
    - [wikipediaのページ情報、カテゴリ間リンク情報、ページ間リンク情報のdump取得](#wikipedia%E3%81%AEdump%E5%8F%96%E5%BE%97)
    - [解凍](#%E8%A7%A3%E5%87%8D)
    - [DB作成](#db%E4%BD%9C%E6%88%90)
    - [レコード挿入](#%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E6%8C%BF%E5%85%A5)
- [MySQL -> Big Query](#mysql---big-query)
    - [csv 吐き出し](#csv-%E5%90%90%E3%81%8D%E5%87%BA%E3%81%97)
    - [圧縮](#%E5%9C%A7%E7%B8%AE)
    - [Big Query Load](#big-query-load)
- [まとめ](#%E3%81%BE%E3%81%A8%E3%82%81)

##参考記事
[Wikipediaの大量データをMySQLに保存する](https://qiita.com/grachro/items/11e59d16a929d27e274e)

##環境
MySQL 5.7.19
macOS Sierra バージョン 10.12.6

##wikipadia -> MySQL
###wikipediaのdump取得
```sh
#ページ情報
wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-page.sql.gz
#カテゴリ間リンク情報
wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-categorylinks.sql.gz
#ページ間リンク情報
wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pagelinks.sql.gz
```

###解凍
```sh
gzip -d jawiki-latest-page.sql.gz
gzip -d jawiki-latest-categorylinks.sql.gz
gzip -d jawiki-latest-pagelinks.sql.gz
```

###DB作成
```sh
mysql> create database jawikipedia;
```

###レコード挿入
```sh
mysql -u root jawikipedia -p < jawiki-latest-page.sql
mysql -u root jawikipedia -p < jawiki-latest-categorylinks.sql
mysql -u root jawikipedia -p < jawiki-latest-pagelinks.sql
```

##MySQL -> Big Query
###csv 吐き出し
```sh
mysql -u root jawikipedia -p -e "SELECT * FROM jawikipedia.page;" | perl -pe 's;,;、;g' | perl -pe 's;\t;,;g' > /tmp/jawiki_page.csv

mysql -u root jawikipedia -p -e "SELECT * FROM jawikipedia.categorylinks;" | perl -pe 's;,;、;g' | perl -pe 's;\t;,;g' > /tmp/jawiki-categorylinks.csv

mysql -u root jawikipedia -p -e "SELECT * FROM jawikipedia.pagelinks;" | perl -pe 's;,;、;g' | perl -pe 's;\t;,;g' > /tmp/jawiki-pagelinks.csv
```

###圧縮
```sh
gzip ~/jawiki_page.csv
gzip ~/jawiki_categorylinks.csv
gzip ~/jawiki_pagelinks.csv
```

###Big Query Load
```sh
bq load \
  --null_marker="" \
  --allow_quoted_newlines \
  --allow_jagged_rows \
  --source_format CSV \
  --quote "" \
  --max_bad_records 10000 \
  --replace \
  $PROJECT:$DATABASE.page \
  /tmp/jawiki_page.csv.gz \  page_id,page_namespace:integer,page_title,page_restrictions,page_is_redirect:integer,page_is_new:integer,page_random,page_touched,page_links_updated,page_latest:integer,page_len:integer,page_content_model,page_lang

bq load \
  --null_marker="" \
  --allow_quoted_newlines \
  --allow_jagged_rows \
  --source_format CSV \
  --max_bad_records 10000 \
  --replace \
  $PROJECT:$DATABASE.categorylinks \
  /tmp/jawiki_categorylinks.csv.gz \
  cl_from,cl_to,cl_sortkey,cl_timestamp,cl_sortkey_prefix,cl_collation,cl_type

bq load \
  --null_marker="" \
  --allow_quoted_newlines \
  --allow_jagged_rows \
  --source_format CSV \
  --max_bad_records 1000000 \
  --replace \
  $PROJECT:$DATABASE.pagelinks \
  /tmp/jawiki_pagelinks.csv.gz \
  pl_from,pl_namespace:integer,pl_title,pl_from_namespace:integer
```

##まとめ
Wikipediaのデータを使ってBig Queryで分析するには非常にありがたいデータです。
定期的にWikipediaのデータが更新されるのでBig Queryのデータも自動で更新できるように
スクリプト化したらQiitaの記事を更新したいと思います。

明日は@KazuakiMさんの"Microsoft Edge 80触ってみた"について のお話です。
お楽しみに！