BigQuery Java クライアント ライブラリを使用して一般公開データセットに対してクエリを実行する

BigQuery Java クライアント ライブラリを使用して一般公開データセットに対してクエリを実行する

学習内容:

  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 で、Apache Maven を使用して新しい Java プロジェクトを作成します。

    mvn archetype:generate \
        -DgroupId=com.google.app \
        -DartifactId=bigquery-java-quickstart \
        -DinteractiveMode=false
    

    このコマンドを実行すると、bigquery-java-quickstart という名前の Maven プロジェクトが作成されます。

    出力は次のようになります。出力を簡略化するためにいくつかの行を省略しています。

    [INFO] Scanning for projects...
    ...
    [INFO] Building Maven Stub Project (No POM) 1
    ...
    [INFO] BUILD SUCCESS
    ...
    

    Maven 以外にも、多くの依存関係管理システムを使用できます。詳細については、クライアント ライブラリで使用する Java 開発環境の設定方法をご覧ください。

  2. Maven がデフォルトで作成する App.java ファイルの名前を変更します。

    mv \
        bigquery-java-quickstart/src/main/java/com/google/app/App.java \
        bigquery-java-quickstart/src/main/java/com/google/app/SimpleApp.java
    
  3. Cloud Shell エディタを開きます。

    cloudshell workspace bigquery-java-quickstart
    
  4. Java クラスパスまたは構成を同期するかどうかを確認するプロンプトが表示されたら、[Always] をクリックします。

    このチュートリアルでプロンプトが表示されず、クラスパスに関連するエラーが発生した場合は、次の操作を行います。

    1. [ファイル] > [設定] > [設定を開く](UI)をクリックします。
    2. [拡張機能] > [Java] をクリックします。
    3. [Configuration: Update Build Configuration] までスクロールし、[automatic] を選択します。

クエリ用の依存関係を準備する方法を確認するには、[次へ] をクリックします。

クエリ用の依存関係を準備する

  1. [エクスプローラ] ペインで BIGQUERY-JAVA-QUICKSTART プロジェクトを探します。

  2. pom.xml ファイルをクリックして開きます。

  3. <dependencies> タグ内で、既存の依存関係の後に次の依存関係を追加します。既存の依存関係を置き換えないでください。

    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-bigquery</artifactId>
    </dependency>
    
  4. 終了タグ(</dependencies>)の後の行に、次のコードを追加します。

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>libraries-bom</artifactId>
          <version>26.1.5</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

BigQuery で一般公開データセットに対してクエリを実行する方法を確認するには、[次へ] をクリックします。

BigQuery で一般公開データセットに対してクエリを実行する

  1. [エクスプローラ] ペインの BIGQUERY-JAVA-QUICKSTARTプロジェクトで src > main/java/com/google/app > SimpleApp.java をクリックします。 ファイルが開きます。

  2. bigquery-public-data.stackoverflow データセットに対するクエリを作成するには、ファイルの最初の行(package com.google.app;)を残し、ファイルの残りの内容を次のコードに置き換えます。

    
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.FieldValueList;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobId;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.QueryJobConfiguration;
    import com.google.cloud.bigquery.TableResult;
    
    
    public class SimpleApp {
    
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the app.
        String projectId = "MY_PROJECT_ID";
        simpleApp(projectId);
      }
    
      public static void simpleApp(String projectId) {
        try {
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
          QueryJobConfiguration queryConfig =
              QueryJobConfiguration.newBuilder(
                      "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")
                  // Use standard SQL syntax for queries.
                  // See: https://cloud.google.com/bigquery/sql-reference/
                  .setUseLegacySql(false)
                  .build();
    
          JobId jobId = JobId.newBuilder().setProject(projectId).build();
          Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
    
          // Wait for the query to complete.
          queryJob = queryJob.waitFor();
    
          // Check for errors
          if (queryJob == null) {
            throw new RuntimeException("Job no longer exists");
          } else if (queryJob.getStatus().getExecutionErrors() != null
              && queryJob.getStatus().getExecutionErrors().size() > 0) {
            // TODO(developer): Handle errors here. An error here do not necessarily mean that the job
            // has completed or was unsuccessful.
            // For more details: https://cloud.google.com/bigquery/troubleshooting-errors
            throw new RuntimeException("An unhandled error has occurred");
          }
    
          // Get the results.
          TableResult result = queryJob.getQueryResults();
    
          // Print all pages of the results.
          for (FieldValueList row : result.iterateAll()) {
            // String type
            String url = row.get("url").getStringValue();
            String viewCount = row.get("view_count").getStringValue();
            System.out.printf("%s : %s views\n", url, viewCount);
          }
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Simple App failed due to error: \n" + e.toString());
        }
      }
    }

    このクエリは、Stack Overflow で閲覧回数が上位 10 件のページとその閲覧数を返します。

  3. [SimpleApp.java] を右クリックして、[Run Java] をクリックします。Cloud Shell を承認するように求めるプロンプトが表示され、利用規約に同意する場合は、[承認] をクリックします。

    次のような結果になります。

    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 Java クライアント ライブラリを使用した一般公開データセットに対するクエリが完了しました。

アカウントに課金されないようにする方法と、次のステップの詳細については、[次へ] をクリックします。

次のステップ

BigQuery で作成したリソースを保持してさらに活用するか、課金が発生しないようにするためクリーンアップします。

BigQuery をさらに活用する

クリーンアップ

Google Cloud アカウントに課金されないようにするには、 Google Cloud プロジェクトを削除するか、このチュートリアルで作成したリソースを削除します。

プロジェクトを削除する

BigQuery について学習するために新しいプロジェクトを作成し、作成したプロジェクトが不要になった場合は、プロジェクトを削除します。プロジェクトを削除すると、プロジェクト内のすべての内容が削除され、カスタム プロジェクト ID は失われます。

リソースを削除する

既存のプロジェクトを使用した場合は、作成した bigquery-java-quickstart フォルダを削除します。

  1. Cloud Shell でディレクトリを上に移動します。

    cd ..
    
  2. 作成したリソースを削除します。

    rm -R bigquery-java-quickstart
    

    -R フラグを指定するとフォルダ内のすべてのアセットが削除されます。