🐙

GoでBigQueryのデータを取得する方法

2021/02/13に公開

GoでBigQueryのデータを取得する方法です。

ポイントは
BigQueryのINTEGERがInt64に
BigQueryのNUMERICがRatになる所です。
stringは変更不要
そのため、Goで扱う場合はFloat64でfloat64に変換しました。
ここで
big.Ratを学んだ
https://golang.org/pkg/math/big/#Rat.Float64

	//BigQueryの部分のみ抜粋
	var hogestruct HogeStruct
	projectID := "projectId"

	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)

	defer client.Close()

	query := `
	select
		event_timestamp AS EventTimestamp,
		hoge_id AS HogeId,
		float_value AS FloatValue
	from dataset.tablle where hogecolumn = @hoge LIMIT 1`

	q := client.Query(query)

	//@hogeの所に実際の値を設定。Nameはカラム
	q.Parameters = []bigquery.QueryParameter{
		{Name: "hogecolumn", Value: hogeValue},
	}

	q.Location = "asia-northeast1"
	// Run the query and print results when the query job is completed.
	job, err := q.Run(ctx)
	//エラー処理は省略

	//1件のみ取得
	var values []bigquery.Value
	for {
		err := it.Next(&values)
		if err != nil {
			break
		}
		break
	}

	if values != nil {
		hogestruct.EventTimestamp = values[0].(string)
		hogestruct.HogeId = values[1].(int64)
		hogestruct.FloatValue, _ = values[2].(*big.Rat).Float64()
	}



Discussion