GoでBigQueryを利用するときにjson_keyfile
を利用して認証をおこないたかったのですが、ドキュメントだけでの解決に時間がかかったので、そのまとめです。
環境
go 1.8
やり方
まずは、パッケージたちをインポートします。
ちなみに、"google.golang.org/api/iterator"
BigQuery接続には関係ありませんが、データ取得時に利用しています。
import (
"cloud.google.com/go/bigquery"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
)
そして、以下のようにすると、BigQueryのclient
を取得することができます。
gcpKey := "json_keyfileのパス"
ctx := context.Background()
client, err := bigquery.NewClient(ctx, "プロジェクト名", option.WithServiceAccountFile(gcpKey))
if err != nil {
panic(err.Error())
}
defer client.Close()
あとは、client
を利用して、クエリを投げるだけです。
以下はBigQurery上のsampleテーブルからデータを取得するコードです。
type Sample struct {
ID int `bigquery:"id"`
Comment string `bigquery:"comment"`
}
sample := []Sample{}
q := client.Query(`SELECT * FROM [project:dataset.sample]`)
itt, err := q.Read(ctx)
if err != nil {
return nil, err
}
for {
var t Sample
e := itt.Next(&t)
if e == iterator.Done {
break
}
if err != nil {
return nil, err
}
sample = append(sample, t)
}
まとめ
GCPのAPIドキュメントはわかりにくくて大変ですね。
また、急に変更されることが多いので、記事が書かれた日付に注意しましょう。