Cloud Storageに入れたデータを、Cloud SQLで処理する方法
参考サイト(書籍)
- Cloud SQL for MySQL のクイックスタート
- パブリック IP を使用して MySQL クライアントを接続する
- 『DATA SCIENCE ON THE GOOGLE CLOUD PLATFORM』
Cloud SQLインスタンスの作成方法
- GCPのコンソールからStorage の SQLを選択
- 「インスタンスを作成」をクリック
- データベースエンジンを選択する(MySQLは、Ver5系のみでVer8は選べない)
- インスタンスID、パスワード、ロケーションを選択して、作成クリック
- 後は、作成したSQLインスタンスにテーブルを作成して、データ送る。
作成したSQLインスタンスにテーブルを作成する方法
- ここでは、テーブルを作成するsqlを記入したファイルを用意して、Cloud Shellから実行する方法について
- MySQLに入れるデータは、Cloud Storageに入れた12個のcsvファイル(中身は、米国航空データ)
- SQLインスタンス名は、flights-data
方法:
- テーブル作成するsql文を書いたファイル用意
作成した「create_table.sql」ファイル
データベース名:bts
- クライアント側に、MySQLクライアントをインストール(以下は、ubuntu)
sudo apt-get update
sudo apt-get install mysql-server
- 自分のPCのipアドレスを確認してパブリックipに登録
cloud shell のパブリックIPアドレスは、以下のコマンドで確認して登録必要
> curl ifconfig.me - 作成したSQLインスタンスのipアドレス確認して、sqlファイル渡してテーブルの作成
MYSQLIP=$(gcloud sql instances describe flights-data --format="value(ipAddresses.ipAddress)")
で、MySQLのIPアドレスが返ってくるので、それを変数に保存して使えば良い。
mysql --host=$MYSQLIP --user=root --password --verbose < create_table.sql - テーブルできたか確認
user bts; # データベース接続
describe flights; # テーブル定義確認
作成したテーブルに、cloud storageのデータを入れる
※ cloud storageからsqlimport で直接読み込めないので、一旦ファイルをcloud shellのローカルに落とす必要がある。なので、ファイル数少ない時は、GUI上でインポートした方が簡単!
- cloud storateの対象バケットからデータをcloud shell に入れる。
例) 201501.csvファイルと201507.csvファイルを名称変えてバケットからcloud shellにコピー
counter=0
for FILE in 201501.csv 201507.csv; do
gsutil cp gs://バケット名/ディレクトリ名/$FILE flights.csv-${counter}
counter=$((counter+1))
done
で、cloud shellのローカルにflights.csv-0とflights.csv-1ファイルが出来る。 - mysqlimport コマンド上記2ファイルのデータを対象テーブルに入れる
mysqlimport --local --host=$MYSQLIP --user=root --password --ignore-lines=1 --fields-terminated-by=',' bts flights.csv-*
※ --ignore-lines=1 でファイルの1行目を無視(ヘッダーフィールド) - テーブルにデータ入ったかクエリかけて確認
0コメント