##概要
以前、GMOアドマーケティング Advent Calendar 2019の11日目に記載したWikipediaデータ MySQLを経由してBigQueryにLoadするのシェルスクリプト化です。DB接続情報とGCPのプロジェクト用の変数に設定を入れると動作します。
##参考記事
Wikipediaデータ MySQLを経由してBigQueryにLoadする
##環境
MySQL、GCPプロジェクト、Google Cloud SDK環境が事前に準備されていることとしております。
#!/usr/bin/env bash
#GCPプロジェクト
PROJECT=''
#DB接続情報
USER=''
PASS=''
HOST=''
PORT=''
DATABASE='wikipedia'
MYSQL="mysql -u ${USER} -p${PASS} -h ${HOST} --port ${PORT}"
if [ -z "$USER" ]; then
echo 'Please set user information'
exit 0
elif [ -z "$PASS" ]; then
echo 'Please set pass information'
exit 0
elif [ -z "$HOST" ]; then
echo 'Please set host information'
exit 0
elif [ -z "$PORT" ]; then
echo 'Please set port information'
exit 0
elif [ -z "$PROJECT" ]; then
echo 'Please set project information'
exit 0
fi
cd /tmp/
#wikipediaのdump取得
#ページ情報
echo 'download jawiki-latest-page.sql.gz'
wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-page.sql.gz
#カテゴリ間リンク情報
echo 'download jawiki-latest-categorylinks.sql.gz'
wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-categorylinks.sql.gz
#ページ間リンク情報
echo 'download jawiki-latest-pagelinks.sql.gz'
wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pagelinks.sql.gz
#解凍
echo 'unzip jawiki-latest-pagelinks.sql.gz'
gzip -d /tmp/jawiki-latest-page.sql.gz
echo 'unzip jawiki-latest-categorylinks.sql.gz'
gzip -d /tmp/jawiki-latest-categorylinks.sql.gz
echo 'unzip jawiki-latest-pagelinks.sql.gz'
gzip -d /tmp/jawiki-latest-pagelinks.sql.gz
#DB作成
echo 'CREATE DATABASE'
echo "CREATE DATABASE IF NOT EXISTS ${DATABASE}" | $MYSQL
#テーブル削除
echo 'DROP TABLE page'
echo "DROP TABLE IF EXISTS ${DATABASE}.page" | $MYSQL
echo 'DROP TABLE categorylinks'
echo "DROP TABLE IF EXISTS ${DATABASE}.categorylinks" | $MYSQL
echo 'DROP TABLE pagelinks'
echo "DROP TABLE IF EXISTS ${DATABASE}.pagelinks" | $MYSQL
#レコード挿入
echo 'import jawiki-latest-page.sql'
$MYSQL $DATABASE < /tmp/jawiki-latest-page.sql
echo 'import jawiki-latest-categorylinks.sql'
$MYSQL $DATABASE < /tmp/jawiki-latest-categorylinks.sql
echo 'import jawiki-latest-pagelinks.sql'
$MYSQL $DATABASE < /tmp/jawiki-latest-pagelinks.sql
#csv 吐き出し
echo 'export jawiki_page.csv'
$MYSQL -e "SELECT * FROM ${DATABASE}.page;" | perl -pe 's;,;、;g' | perl -pe 's;\t;,;g' > /tmp/jawiki_page.csv
echo 'export jawiki_categorylinks.csv'
$MYSQL -e "SELECT * FROM ${DATABASE}.categorylinks;" | perl -pe 's;,;、;g' | perl -pe 's;\t;,;g' > /tmp/jawiki_categorylinks.csv
echo 'export jawiki_pagelinks.csv'
$MYSQL -e "SELECT * FROM ${DATABASE}.pagelinks;" | perl -pe 's;,;、;g' | perl -pe 's;\t;,;g' > /tmp/jawiki_pagelinks.csv
#圧縮
echo 'zip jawiki_page.csv'
gzip /tmp/jawiki_page.csv
echo 'zip jawiki_categorylinks.csv'
gzip /tmp/jawiki_categorylinks.csv
echo 'zip jawiki_pagelinks.csv'
gzip /tmp/jawiki_pagelinks.csv
#Big Query Load
echo 'bq load jawiki_page'
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
echo 'bq load categorylinks'
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
echo 'bq load pagelinks'
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