はじめに
GolangでBigQueryをざつに扱っています。
ローカルで開発するときはCredentialを指定しますが、
よく使う2つの方法を忘れがちなので自分メモ。
アジェンダ
1. Credentialの作成
これは必ずやることとして、Credentialを作成します。
具体的には、以下2つを行います。
- Service Accountの作成
- keyの作成(これがCredential)
ここは本旨ではないので軽く触れる程度で省きます。
Service Accountの作成は、以下から行います。
Service Accountを作成したら、Manage keys
を選択します。
次の画面にてADD KEY > Create new key
でkeyを作成します。
keyのタイプはjsonを選択してください。
このあとつかうCredentialsファイルになります。
ブラウザのダウンロードが始まるのでプロジェクトルートなどに置いてください。
この記事ではファイル名をkey.json
として保存しています。
2. 環境変数で設定する
上記で作成した、credentialsファイルを環境設定で指定する方法です。
まんまなので以下のコマンドを打つだけです。
$ export GOOGLE_APPLICATION_CREDENTIALS=./key.json
環境変数に設定しておくことで、bigqueryパッケージが環境変数に設定されていれば読み込んでくれます。
ただし、端末やPCの再起動で設定は消えてしまうので再設定が必要です。
3. プログラムで指定する
こちらはプログラムに書くので再設定が必要ありません。
option.WithCredentialsFile
を使ってcredensialsを読み込みます。
package main import ( "context" "fmt" "log" "cloud.google.com/go/bigquery" "google.golang.org/api/iterator" "google.golang.org/api/option" ) const ( key = "./key.json" projectID = "your-project" query = "select * from your-project.datasetName.tableName" ) func main() { ctx := context.Background() // client作成時にoption.WithCredentialsFileでファイルを読み込む client, err := bigquery.NewClient(ctx, projectID, option.WithCredentialsFile(key)) if err != nil { fmt.Printf("Failed to create client: %v", err) } defer client.Close() it, err := client.Query(query).Read(ctx) if err != nil { log.Printf("Failed to Read Query: %v", err) } for { var values []bigquery.Value err := it.Next(&values) if err == iterator.Done { break } if err != nil { fmt.Println("Failed to Iterate Query:%v", err) } fmt.Println(values) } }
参照
試したコードスニペットをおいておきます
おわりに
BigQueryは触っていて楽しいですが、golangから扱うときにちょくちょく面倒なことがありますね!