빅쿼리 Streaming Insert - go lang 샘플
최유석
기본준비사항
프로젝트 과금 설정(https://support.google.com/cloud/answer/6293499#enable-billing),
빅쿼리 API활성화(https://console.cloud.google.com/flows/enableapi?apiid=bigquery&_ga=1.216323729.601314171.1492654432),
Cloud SDK 설치(https://cloud.google.com/sdk/downloads),
Client Libraries 설치 및 OAuth2.0 인증(로컬환경 실행 시) (https://cloud.google.com/bigquery/docs/reference/libraries#client-libraries-install-go),
Service account(또는 default service account사용)와 Key 생성이 되어있으며 Key 파일이 OS환경변수로 GOOGLE_APPLICATION_CREDENTIALS 지정 되어있다고 가정한다.( https://cloud.google.com/docs/authentication)
또한 go lang(https://golang.org/)설치 및 기본 설정은 되어있다고 가정한다.
여기서는 go 1.8버전을 기준으로 테스트하였다.
테이블 생성
빅쿼리에 "gotest"라는 데이터 셋을 생성하고 해당 데이터셋에 "gotable"이라는 이름으로 테이블을 생성한다. 생성할 테이블의 스키마정보는 다음과 같다.
Name:STRING,Count:INTEGER
생성된 테이블 정보
빅쿼리 Streaming Insert 샘플 코드 - Go lang
package main import ( "fmt" "log" "cloud.google.com/go/bigquery" "golang.org/x/net/context" ) type Item struct { Name string Count int } // Save implements the ValueSaver interface. func (i *Item) Save() (map[string]bigquery.Value, string, error) { return map[string]bigquery.Value{ "Name": i.Name, "Count": i.Count, }, "", nil } func main() { ctx := context.Background() // Sets your Google Cloud Platform project ID. projectID := "cystest-1" //프로젝트ID datasetID := "gotest" //데이터셋ID tableID := "gotable" //테이블ID // Creates a client. client, err := bigquery.NewClient(ctx, projectID) if err != nil { log.Fatalf("Failed to create client: %v", err) } insertRows(client, datasetID, tableID) } func insertRows(client *bigquery.Client, datasetID, tableID string) error { ctx := context.Background() // [START bigquery_insert_stream] u := client.Dataset(datasetID).Table(tableID).Uploader() items := []*Item{ // Item implements the ValueSaver interface. // 아래에 테이블에 삽입할 레코드를 입력한다. {Name: "n1", Count: 7}, {Name: "n2", Count: 2}, {Name: "n3", Count: 1}, } if err := u.Put(ctx, items); err != nil { return err } // [END bigquery_insert_stream] fmt.Printf("insert complete\n") return nil } |
코드 실행하기( .go파일이 위치한 폴더에서)
go run gotest.go
*빌드는 생략한다.
코드실행 결과 확인하기
빅쿼리에 Streaming Insert로 데이터를 적재하게되면 Streaming buffer에 먼저 기록되고 실제 테이블에 값이 저장되기까지 최대 90분까지 소요될 수 있다. 따라서 테이블의 preview로는 바로 확인 안 될 수 있으니 간단한 조회 쿼리를 실행해서 확인한다.
좌측 상단의 [COMPOSE QUERY] 버튼으로 쿼리 입력 창을 활성화하고 다음 쿼리를 입력하고 실행한다.
SELECT * FROM gotest.gotable
쿼리 실행결과
쿼리를 실행하면 정상적으로 테이블에 데이터가 추가된 것을 확인할 수 있다.
참고자료
https://cloud.google.com/bigquery/streaming-data-into-bigquery
https://godoc.org/cloud.google.com/go/bigquery
https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/bigquery/uploader.go
https://github.com/GoogleCloudPlatform/golang-samples/blob/master/bigquery/snippets/snippet.go
'Google Cloud Platform > Bigquery' 카테고리의 다른 글
웹로그 데이터를 빅쿼리를 이용하여 리포팅 하기 (0) | 2017.01.09 |
---|---|
빅쿼리 Query Plan을 이용한 쿼리 실행 분석 (0) | 2016.09.19 |
빅쿼리의 셔플링 (0) | 2016.08.23 |
빅쿼리 스트리밍 데이터 로딩하기 (4) | 2016.08.05 |
빅쿼리 데이터 로딩하기 (2) | 2016.07.25 |