使用 BigQuery Java 用戶端程式庫查詢公開資料集

使用 BigQuery Java 用戶端程式庫查詢公開資料集

您可以瞭解如何執行下列作業:

  1. 在 Google Cloud 專案啟用 Cloud Shell。
  2. 開啟 Cloud Shell 編輯器。
  3. 準備查詢所需的依附元件。
  4. 在 BigQuery 中查詢公開資料集。
  5. 清除所用資源。

預計所需時間:

點選「Start」(啟動) 即可開始。

在 Google Cloud 專案啟用 Cloud Shell

  1. 如果專案未啟用計費功能,會自動前往 BigQuery 沙箱讓您執行操作。沙箱可供您免付費使用部分 BigQuery 功能,協助熟悉 BigQuery。如果您只打算將專案用於本文練習,建議使用 BigQuery 沙箱。

  2. 點選「Activate Cloud Shell」(啟用 Cloud Shell)操作示範

接下來將說明如何開啟 Cloud Shell 編輯器,請點選「Next」(下一步)

開啟 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. 依序點選「File」>「Preferences」>「Open Settings (UI)」
    2. 依序點選「Extensions」>「Java」
    3. 捲動至「Configuration: Update Build Configuration」,然後選取「automatic」

如要瞭解如何準備查詢所需的依附元件,請點選「Next」(下一步)

準備查詢所需的依附元件

  1. 在「Explorer」窗格中,找出 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 中查詢公開資料集,請點選「Next」(下一步)

在 BigQuery 中查詢公開資料集

  1. 在「Explorer」窗格中,找到 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());
        }
      }
    }

    查詢會傳回前 10 個瀏覽量最高的 Stack Overflow 頁面,並附上各頁瀏覽次數。

  3. 對「SimpleApp.java」按一下滑鼠右鍵,然後點選「Run Java」。如果系統提示您授權 Cloud Shell 並同意條款,請點選「Authorize」(授權)

    結果大致如下:

    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 用戶端程式庫查詢公開資料集。

點選「Next」(下一步),瞭解後續步驟並避免系統向您的帳戶收取費用。

後續步驟

保留已建立的資源並運用 BigQuery 執行更多工作,或是清除所用資源,避免產生帳單費用。

運用 BigQuery 執行更多工作

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收費,請刪除 Google Cloud 專案,或刪除您在本逐步操作說明課程中建立的資源。

刪除專案

如果您為了學習 BigQuery 而建立新專案,但現在不再需要,請刪除專案。請注意,刪除專案也會一併刪除當中的內容,自訂專案 ID 也會消失。

刪除資源

如果使用現有專案,請刪除稍早建立的 bigquery-java-quickstart 資料夾:

  1. 在 Cloud Shell 中,移至上一層目錄:

    cd ..
    
  2. 刪除您建立的資源:

    rm -R bigquery-java-quickstart
    

    -R 旗標會刪除資料夾中的所有資產。