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 サンドボックスを使用することをおすすめします。

  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. [Explorer] ペインで 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 フラグを指定するとフォルダ内のすべてのアセットが削除されます。