GCPを使い始めて、よく使うものはまとめておこうと思って書いた記事。
書籍としてはこちらがおすすめ。GCPは機能が多すぎて全体を把握するのが最初大変だが、GCPの全体像の把握用でかなりまとまっている。
gcloud
インストール
注意事項としてgcloudの本体と実行はPython2でないと動かない pyenvなりなんなりで、環境を作る必要がある
cd [python2が実行されるdir (PATH_TO_PYTHON2_DIR)]
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-245.0.0-linux-x86_64.tar.gz
tar -xzvf ./google-cloud-sdk-180.0.0-darwin-x86_64.tar.gz -C
cd ./google-cloud-sdk
#~/.zshrcなどに書き込む source PATH_TO_PYTHON2_DIR/google-cloud-sdk/completion.zsh.inc source PATH_TO_PYTHON2_DIR/local/src/google-cloud-sdk/path.zsh.inc
一度exitでログアウトする(sourceでもいいが、僕はやらない)
cd PATH_TO_PYTHON2_DIR
gcloud version
Google Cloud SDK 180.0.0 bq 2.0.27 core 2017.11.10 gsutil 4.28
みたいな感じになればOK 初期設定は
gcloud auth login #いつものブラウザー認証
gcloud config set project [使うプロダクトID]
gcloud components update
そうすると、先ほどよりもversionが上がっているはず
configuration
使うプロダクトが複数ある場合は作って、使い分ける必要がある
gcloud config configurations create [適当な名前(プロダクトIDと合わせた方が無難)]
gcloud config set core/account [メールアドレス]
gcloud config set core/project [作りたいプロダクトID]
使い時に以下のように切り替えすればよい (最初のものはdefaultとなっている)
gcloud config configurations activate [先ほどつけた名前 or default]
bqコマンド
query
- テーブルの確認
bq ls # 想定通りじゃない場合はconfigurationで使いたいプロダクトIDにする
queryの実行
# 日付は''(シングルクォート), 全体は""(ダブルクォート)で括る bq query "SELECT * FROM [dataset].[table] WHERE TRUE AND _PARTITIONTIME >= timestamp('2019-06-11') AND _PARTITIONTIME < timestamp('2019-06-30')"
# 実際のカラムにパーティション設定されている場合は--nouse_legacy_sqlを設定 bq query "SELECT * FROM [dataset].[table] WHERE TRUE AND time >= DATE('2019-06-11') AND time < DATE('2019-06-30')"
# csvなどに保存したい場合は、デフォルトだと100行しか出力されない・formatもcsvにする bq query --format csv --max_rows=2147483647(これが最大値適宜変える) "SELECT * FROM [dataset].[table] WHERE TRUE AND _PARTITIONTIME >= timestamp('2019-06-11') AND _PARTITIONTIME < timestamp('2019-06-30')" > out.csv
# パラメータを組み込みたい場合はSQL側に@variableなどとして bq query --format csv --max_rows=2147483647 --nouse_legacy_sql --parameter=variable::'2019-06-11' "SELECT * FROM [dataset].[table] WHERE TRUE AND _PARTITIONTIME >= timestamp(@variable) AND _PARTITIONTIME < timestamp('2019-06-30')" > out.csv
# formatをcsvにすると先頭に空行が入り込むのでsedなどで適宜削除する bq query --format csv --max_rows=2147483647 --nouse_legacy_sql --parameter=variable::'2019-06-11' "SELECT * FROM [dataset].[table] WHERE TRUE AND _PARTITIONTIME >= timestamp(@variable) AND _PARTITIONTIME < timestamp('2019-06-30')" | sed '1{/^$/d}' > out.csv
テーブルの作成
[{"name": "column1", "type": "STRING", "mode": "NULLABLE"}, {"name": "column2", "type": "STRING", "mode": "NULLABLE"}, {"name": "column3", "type": "DATE", "mode": "NULLABLE"}]
空テーブル作る パーティションを設定する列がある場合は-time_partitioning_fieldとする(DATE型の列)
bq mk --table --schema [PATH_TO_SCHEMA] -time_partitioning_field column3 [プロダクトID]:[データセット].[テーブル]
データ投入 ヘッダーがある場合は--skip_leading_rows=1とする
bq load --source_format=CSV --skip_leading_rows=1 [プロダクトID]:[データセット].[テーブル] [PATH_TO_CSV] [PATH_TO_SCHEMA]
gsutilコマンド
GCSをコマンドで操作
ls
gsutil ls gs://[プロダクトID]/dir/dir/fileなど
cp
GCSから手元へコピー
gsutil cp gs://[プロダクトID]/dir/dir/file .
手元からGCSへコピー
gsutil cp gs://[プロダクトID]/dir/dir/file .
GCR (コンテナレポジトリ)
push
認証は初めての時に一度やればいい
# [HOSTNAME] はgcr.ioの他にもあるので状況に合わせて # tagの付け替えもできる gcloud auth configure-docker docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG] docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
pull
# 認証してpullするだけ gcloud auth configure-docker docker pull gcr.io/[PROJECT ID]/[IMAGE]:[TAG]
随時更新予定