たまに使うと忘れてることが多いので、よく使うコマンドをメモっていきます。

gcloud

サービスアカウント設定

# リストアップ
gcloud auth list

# キーファイルで有効化
gcloud auth activate-service-account --key-file {key_file_json_path}

# 有効化とデフォルトプロジェクト設定
gcloud auth activate-service-account --key-file {key_file_json_path} --project {project_name}

# サービスアカウントを無効化
gcloud auth activate-service-account {service_account_name}

デフォルトプロジェクト設定

# 設定確認
gcloud config list

# プロジェクト設定
gcloud config set project hoge_project

bq

標準SQL利用

# 実行時に毎回指定
bq query --use_legacy_sql=false

# 設定ファイルで指定
vi ~/.bigqueryrc 
+ [query]
+ --use_legacy_sql=false
+ [mk]
+ --use_legacy_sql=false

データセット

# 一覧表示
bq ls

# 作成
bq mk {dataset_name}

# 削除
bq rm {dataset_name}
bq rm --recursive {dataset_name} # テーブルが存在しても削除する

# 定義確認
bq show {dataset_name}

テーブル

# 一覧表示
bq ls {dataset_name}

# 作成(bq mkコマンドを利用)
bq mk --table {dataset_name}.{table_name} {schema_definition}
bq mk --table test_dataset.test_table "id:int64, text:string"
  # ただしこの方法だとARRAY<INT64>やSTRUCTなどは指定してもエラーになってしまう
  # BigQuery error in mk operation: Invalid value for type: ARRAY<INT64> is not a valid value

# 作成(SQLを利用)
bq query "{create table文}"
bq query "create table test_dataset.test_table (id int64, text string, int_array array<int64>, string_array array<string>)"
  # これだとARRAY<INT64>とかもいける

# 削除
bq rm {dataset_name}.{table_name}
例) bq rm test_dataset.test_table

#定義確認
bq show dataset_name.table_name

データ

# データ確認
#   -c(任意): 件数を指定できる。デフォルトは100
bq head -c 50 test_dataset.test_table

# データ登録(SQLを利用)
bq query "{insert文}"
bq query "insert into test_dataset.test_table values \
  (1, 'xxx1', [11,21,31], ['aa1','bb1','cc1']), \
  (2, 'xxx2', [12,22,32], ['aa2','bb2','cc2'])"
bq query "insert into test_dataset.test_table values select id, text, int_array, string_array from hoge_table"
  # select結果をinsertすることもできる

# データ削除(SQLを利用)
bq query "{delete文}"
bq query "delete from test_dataset.test_table where id in (1, 2)"

View

# VIEW作成
# select文の中では、プロジェクト名から指定必要
bq query "create view test_dataset.test_view as select * from  hoge_project.test_dataset.test_table"

# VIEW定義確認
bq show --view test_dataset.test_view
>                               Query                               
> ----------------------------------------------------------------- 
>  select * from  hoge_project.test_dataset.test_table  

# VIEW削除
bq query "drop view test_dataset.test_view"

Function

# function作成
## SQL関数を利用するケース
bq query "
create or replace function test_dataset.trim_upper(str string)
returns string
as (
    trim(upper(str))
)
"

## JavaScriptを利用するケース
## エクスクラメーションマークがBashだとヒストリ展開になるので、ヒアドキュメントを利用
bq query "
create or replace function test_dataset.trim_upper(str string)
returns string
language js as '''
    if (str === null) return null;
    return str.toUpperCase().trim();
'''
"

# function定義確認
bq show --routine test_dataset.trim_upper
Routine hoge_project:test_dataset.trim_upper

      Id        Routine Type      Language          Signature                       Definition                 Creation Time    Last Modified Time  
 ------------ ----------------- ------------ ------------------------ -------------------------------------- ----------------- -------------------- 
  trim_upper   SCALAR_FUNCTION   JAVASCRIPT   (str STRING) -> STRING                                          05 Dec 19:27:35   05 Dec 19:27:35     
                                                                           if (str === null) return null;                                                  
                                                                           return str.toUpperCase().trim();     

# function削除
bq query "drop function test_dataset.trim_upper"

gsutil

使い方の確認

# サブコマンドの一覧
gsutil
Usage: gsutil [-D] [-DD] [-h header]... [-m] [-o] [-q] [command [opts...] args...]
> Available commands:
>   acl              Get, set, or change bucket and/or object ACLs
>   bucketpolicyonly Configure Bucket Policy Only (Beta)
>   cat              Concatenate object content to stdout
>   compose          Concatenate a sequence of objects into a new composite object.
>   config           Obtain credentials and create configuration file

# サブコマンドのヘルプ
gsutil help {subcommand}
gsutil help cat
> NAME
>   cat - Concatenate object content to stdout
> SYNOPSIS
>   gsutil cat [-h] url...

ファイル操作

# ファイルのリストアップ
gsutil ls gs://{folder_path}/
gsutil ls gs://{folder_path}/{file_name}

# ファイルのコピー
gsutil cp {file_path} gs://{folder_path}/
gsutil cp gs://{folder_path}/{file_name} {folder_path} 

# フォルダのコピー
gsutil cp -rf {folder_path} gs://{folder_path}/
gsutil cp -rf gs://{folder_path} {folder_path} 
Posted in: gcp