順次追記予定
全般
クライアントの更新
$ sudo gcloud components update
デフォルトプロジェクトの確認
$ gcloud config list
デフォルトプロジェクトの切り替え
$ gcloud config set project <project name>
実行時プロジェクト指定
$ gcloud --project <project id>
Project毎のクォータ
$ gcloud compute regions list
今使えるコンポーネントの確認
$ gcloud components list
サービスアカウントの認証
$ gcloud auth activate-service-account \
<service account 名>@<project-name>.iam.gserviceaccount.com \
--key-file <IAM画面で発行したキーjsonファイル> \
--project <<project-name>>
GCE
インスタンスの一覧
$ gcloud compute instances list
インスタンスの作成
$ gcloud compute instances create test-instance --project test_pj --zone asia-east1-a
Firewallのルール参照
$ gcloud compute routes list
BigQuery
実行時プロジェクトの切り替え
$ bq --project_id <project id>
特定PJのジョブの一覧
$ bq ls -j --all
特定ジョブの詳細
$ bq --format prettyjson show -j <job id>
テーブルの作成
- まずは、データセットの作成
$ bq mk <project name>:<dataset name>
- デーブルの作成
$ bq mk --schema id:integer,name:string -t <dataset name>.<table name>
テーブルの作成(カラムのmodeをしている場合)
- bqコマンドにschemaを直接書く場合、modeが指定できない。デフォルトのnullableになる。
$ bq mk --schema schema.ddl -t <dataset name>.<table name>
schema.ddl
[
{"name": "name", "type": "string", "mode": "required"},
{"name": "gender", "type": "string", "mode": "nullable"},
{"name": "count", "type": "integer", "mode": "repeated"}
]
- パーティションテーブルにする場合は、以下のオプションを付ける
--time_partitioning_type=DAY
- 任意の日付カラムを使ったパーティションテーブル(Beta)にする場合は、以下のオプションを付ける
--time_partitioning_field [COLUMN]
テーブルの一覧
$ bq ls <dataset name>
テーブルのスキーマ情報を出力
$ bq show --schema --format=prettyjson <dataset name>.<table name>
データのエクスポート
bq extract <dataset name>.<table name> gs://<bucket name>/<file name>
- データ量が多い場合、ファイル名に*をつけておくこと。そうすると勝手にファイル分割する。
データのロード(区切り文字がパイプの場合)
bq load -F '|' <dataset name>.<table name> gs://<bucket name>/<target file(pipe splited)>
データロードに区切り文字「x001」を指定
- コンソールに入力しづらい制御文字などを区切り文字とする場合
- hiveがデフォルトこの区切り文字を使う
$ bq load -F "`echo $'\x01'`" <dataset name>.<table name> gs://<bucket name>/<target file(x001 splitted)>
複数行のコメント
/*
コメント内容
*/
パーティションテーブルの情報取得クエリ
select * from [<project id>:<dataset name>.<table id>$__PARTITIONS_SUMMARY__]
bqコマンドで出力すると以下の情報が取得できる
| project_id | dataset_id | table_id | partition_id | creation_time | last_modified_time |
TIMESTAMPカラムをパーティションにしたり、Clusteredテーブルに変換する
bq query --destination_table <出力先データセット名>.<出力先テーブル名> --nouse_legacy_sql --time_partitioning_field <パーティションに使うTIMESTAMP型のカラム名> --clustering_fields [,区切りのクラスター対象のカラム名] 'SELECT * FROM `<project id>.<データセット名>.<テーブル名>`'
GCS
linuxサーバからのデータのコピー
$ gsutil copy <local file name> gs://<bucket name>/
PubSub
トピックを作成する
gcloud pubsub topics create <トピック名>
サブスクリプションを作成する
gcloud pubsub subscriptions create --topic=<トピック名> <サブスクリプション名>
トピックにメッセージを送る
gcloud pubsub topics publish <トピック名> --message='{"name":"taro","age":10}' --attribute=[<key1="val",key2="val",...>]
### サブスクリプションからメッセージを取得する
gcloud pubsub subscriptions pull --auto-ack <サブスクリプション名>
- --auto-ack をつけるとサブスクリプションから消えます。つけないと別のクライアントから同じデータが取得できます。
Dataproc
クラスタの作成
- コンポーネントゲートウェイを有効化し、Jupyterをコンポーネントとしてインストールする例
.sh
gcloud dataproc clusters create --region=us-central1 \
--enable-component-gateway \
--optional-components=JUPYTER <クラスタ名>
クラスタの一覧
.sh
gcloud dataproc clusters list --region us-central1
クラスタの削除
.sh
gcloud dataproc clusters delete <クラスタ名> --region us-central1
番外編
curlでGCS操作
- GCEか、Google cloud shellで下記コマンドを実行してtokenを取得。返ってきたJSONの"access_token"フィールドの値を得る。
curl "http://metadata/computeMetadata/v1/instance/service-accounts/default/token" -H "X-Google-Metadata-Request: True"
- バケットの中身を見る。JSONで返ってくる。
curl -X PUT -X GET -H "Authorization: Bearer <accsess_token>" "https://www.googleapis.com/storage/v1/b/<bucket_name>/o"
- ローカルファイルを送る
curl -X POST --data-binary @hogehoge.txt -H "Authorization: Bearer <access_token>" "https://www.googleapis.com/upload/storage/v1/b/<bucket_name>/o?name=hogehoge.txt"