BigQuery Go 클라이언트 라이브러리로 공개 데이터 세트 쿼리

BigQuery Go 클라이언트 라이브러리로 공개 데이터 세트 쿼리

BigQuery Go 클라이언트 라이브러리로 공개 데이터 세트 쿼리

학습 내용

  1. Google Cloud 프로젝트에서 Cloud Shell 활성화
  2. Cloud Shell 편집기 열기
  3. 쿼리를 위한 파일 준비
  4. BigQuery에서 공개 데이터 세트 쿼리
  5. 삭제

예상 소요 시간:

시작하려면 시작을 클릭합니다.

Google Cloud 프로젝트에서 Cloud Shell 활성화

  1. 프로젝트에 결제를 사용 설정하지 않으면 자동으로 BigQuery 샌드박스에서 작업합니다. BigQuery 샌드박스를 사용하면 제한된 BigQuery 기능으로 BigQuery를 무료로 학습할 수 있습니다. 이 문서를 벗어나서 프로젝트를 사용할 계획이 없으면 BigQuery 샌드박스를 사용하는 것이 좋습니다.

  2. Cloud Shell 활성화를 클릭합니다. 확인해 보기

Cloud Shell 편집기를 여는 방법을 알아보려면 다음을 클릭하세요.

Cloud Shell 편집기 열기

  1. Cloud Shell에서 새 Go 프로젝트 및 파일을 만듭니다.

    mkdir bigquery-go-quickstart \
        && touch \
        bigquery-go-quickstart/app.go
    

    이 명령어는 bigquery-go-quickstart라는 Go 프로젝트와 app.go라는 파일을 만듭니다.

  2. Cloud Shell 편집기를 엽니다.

    cloudshell workspace bigquery-go-quickstart
    

쿼리를 위해 파일을 준비하는 방법을 알아보려면 다음을 클릭하세요.

쿼리를 위한 파일 준비

  1. Cloud Shell 편집기에서 터미널을 열려면 터미널 열기를 클릭합니다.

  2. 프로젝트 디렉터리를 엽니다.

    cd bigquery-go-quickstart
    
  3. go.mod 파일을 만듭니다.

    go mod init quickstart
    

    출력은 다음과 비슷합니다.

    go: creating new go.mod: module quickstart
    go: to add module requirements and sums:
            go mod tidy
    
  4. Go용 BigQuery 클라이언트 라이브러리를 설치합니다.

    go get cloud.google.com/go/bigquery
    

    출력은 다음과 비슷합니다. 출력을 간소화하기 위해 여러 줄을 생략합니다.

    go: downloading cloud.google.com/go/bigquery v1.49.0
    go: downloading cloud.google.com/go v0.110.0
    ...
    go: added cloud.google.com/go/bigquery v1.49.0
    go: added cloud.google.com/go v0.110.0
    

BigQuery에서 공개 데이터 세트를 쿼리하는 방법을 알아보려면 다음을 클릭하세요.

BigQuery에서 공개 데이터 세트 쿼리

  1. 편집기 열기를 클릭합니다.

  2. 탐색기 창에서 BIGQUERY-GO-QUICKSTART 프로젝트를 찾습니다.

  3. app.go 파일을 클릭하여 엽니다.

  4. 가장 많이 조회된 Stack Overflow 페이지 10개와 해당 조회 수를 반환하는 bigquery-public-data.stackoverflow 데이터 세트에 대한 쿼리를 만들려면 다음 코드를 app.go 파일에 복사합니다.

    
    // Command simpleapp queries the Stack Overflow public dataset in Google BigQuery.
    package main
    
    import (
    	"context"
    	"fmt"
    	"io"
    	"log"
    	"os"
    
    	"cloud.google.com/go/bigquery"
    	"google.golang.org/api/iterator"
    )
    
    
    func main() {
    	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
    	if projectID == "" {
    		fmt.Println("GOOGLE_CLOUD_PROJECT environment variable must be set.")
    		os.Exit(1)
    	}
    
    	ctx := context.Background()
    
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		log.Fatalf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	rows, err := query(ctx, client)
    	if err != nil {
    		log.Fatal(err)
    	}
    	if err := printResults(os.Stdout, rows); err != nil {
    		log.Fatal(err)
    	}
    }
    
    // query returns a row iterator suitable for reading query results.
    func query(ctx context.Context, client *bigquery.Client) (*bigquery.RowIterator, error) {
    
    	query := client.Query(
    		`SELECT
    			CONCAT(
    				'https://stackoverflow.com/questions/',
    				CAST(id as STRING)) as url,
    			view_count
    		FROM ` + "`bigquery-public-data.stackoverflow.posts_questions`" + `
    		WHERE tags like '%google-bigquery%'
    		ORDER BY view_count DESC
    		LIMIT 10;`)
    	return query.Read(ctx)
    }
    
    type StackOverflowRow struct {
    	URL       string `bigquery:"url"`
    	ViewCount int64  `bigquery:"view_count"`
    }
    
    // printResults prints results from a query to the Stack Overflow public dataset.
    func printResults(w io.Writer, iter *bigquery.RowIterator) error {
    	for {
    		var row StackOverflowRow
    		err := iter.Next(&row)
    		if err == iterator.Done {
    			return nil
    		}
    		if err != nil {
    			return fmt.Errorf("error iterating through results: %w", err)
    		}
    
    		fmt.Fprintf(w, "url: %s views: %d\n", row.URL, row.ViewCount)
    	}
    }
    

  5. 터미널 열기를 클릭합니다.

  6. 터미널에서 app.go 스크립트를 실행합니다. Cloud Shell을 승인하고 약관에 동의하라는 메시지가 표시되면 승인을 클릭합니다.

    go run app.go
    

    결과는 다음과 비슷합니다.

    https://stackoverflow.com/questions/35159967 : 170023 views
    https://stackoverflow.com/questions/22879669 : 142581 views
    https://stackoverflow.com/questions/10604135 : 132406 views
    https://stackoverflow.com/questions/44564887 : 128781 views
    https://stackoverflow.com/questions/27060396 : 127008 views
    https://stackoverflow.com/questions/12482637 : 120766 views
    https://stackoverflow.com/questions/20673986 : 115720 views
    https://stackoverflow.com/questions/39109817 : 108368 views
    https://stackoverflow.com/questions/11057219 : 105175 views
    https://stackoverflow.com/questions/43195143 : 101878 views
    

BigQuery Go 클라이언트 라이브러리를 사용하여 공개 데이터 세트를 쿼리했습니다.

계정에 요금이 청구되지 않도록 하고 다음 단계에 대해 알아보려면 다음을 클릭하세요.

다음 단계

만든 리소스를 유지한 상태에서 BigQuery로 더 많은 작업을 수행하거나 요금이 청구되지 않도록 삭제합니다.

BigQuery로 더 많은 작업 수행

삭제

Google Cloud 계정에 요금이 청구되지 않도록 하려면 Google Cloud 프로젝트를 삭제하거나 이 둘러보기에서 만든 리소스를 삭제하세요.

프로젝트 삭제

BigQuery 학습용으로 만든 새 프로젝트가 더 이상 필요하지 않으면 프로젝트를 삭제합니다. 프로젝트를 삭제하면 프로젝트의 모든 항목이 삭제되고 커스텀 프로젝트 ID가 손실된다는 점에 유의하세요.

리소스 삭제

기존 프로젝트를 사용한 경우 만든 bigquery-go-quickstart 폴더를 삭제합니다.

  1. Cloud Shell에서 디렉터리를 위로 옮깁니다.

    cd ..
    
  2. 만든 리소스를 삭제합니다.

    rm -R bigquery-go-quickstart
    

    -R 플래그는 폴더의 모든 애셋을 삭제합니다.