たまに使うと忘れてることが多いので、よく使うコマンドをメモっていきます。
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}