くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

GCP関連コマンドまとめ(旧ブログからの再掲)

GCPを使い始めて、よく使うものはまとめておこうと思って書いた記事。


書籍としてはこちらがおすすめ。GCPは機能が多すぎて全体を把握するのが最初大変だが、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
  1. テーブルの確認
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 
テーブルの作成
  1. スキーマを作る
  2. 空テーブルを作る(特定の列にパーティションを設定したい場合は設定する)
  3. csvなどから投入する
    schemaは以下のような感じ 詳細は こちら
[{"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]

随時更新予定

google.cloud.bigquery API

その他参考図書