くろたんくブログ

Practice Makes Permanent

このエントリーをはてなブックマークに追加

2019年 9月 9日 月曜日 09:52:52 JST(modified: 2019年 9月 14日 土曜日 13:11:42 JST)
views: 198, keywords: GCP, tech

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