2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GolangのBigQueryパッケージで外部データソースとしてCSVを指定するサンプル

Posted at

BigQuery上で複数の異なるデータソース間でJOINとかしたいことがある。それをする方法。

以下のようなCSVがGCS上に用意されているとする。

people.csv
name,age
jessy,25
thomas,30
brian,34
tommy,33

このCSVのデータをBigQuery上でテーブルっぽく使うには以下のような実装をする。

// スキーマフィールドを定義
nameSchema := bigquery.FieldSchema{
	Name: "name", 
	Required: true, 
	Type: bigquery.StringFieldType,
}
ageSchema := bigquery.FieldSchema{
	Name: "age", 
	Required: true, 
	Type: bigquery.IntegerFieldType,
}

// GCSをBigQuery上で外部データソースとして使うための設定を定義
gcsSrcConfig := bigquery.ExternalDataConfig{
	SourceFormat: bigquery.CSV,
    SourceURIs:   []string{"gs://your-gcp-project/somewhere/somedirectory/people.csv"},
    Schema: []*bigquery.FieldSchema{
    	&nameSchema,
        &ageSchema,
    },
}

// CSV上のデータをdataOnGcsとして指定しSQL文で使う
q := client.Query(`select * from dataOnGcs`)
q.TableDefinitions = map[string]bigquery.ExternalData{
	"dataOnGcs": &gcsSrcConfig,
}

ExternalDataConfigAutoDetectというオプションがあり、これをtrueにすると自動でCSVのデータ構造からスキーマを推測してくれると書いてあったのだが、これをtrueにしてもselect文とかで指定できなかった。やはりSchemaに自前でスキーマ定義を渡してやるのが必要そうだ。

GCS以外にもJSONやGoogleスプレッドシートをデータソースとして使えるらしい。ええやん。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?