使用 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。如果您不打算在本文档之外使用您的项目,建议您使用 BigQuery 沙盒。

  2. 点击激活 Cloud Shell点击查看

如需了解如何打开 Cloud Shell 编辑器,请点击下一步

打开 Cloud Shell Editor

  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 类路径或配置,请点击始终

    按照本演示操作期间,如果未收到系统提示,并且遇到与类路径相关的错误,请执行以下操作:

    1. 依次点击文件 > 偏好设置 > 打开设置(界面)
    2. 依次点击扩展程序 > Java
    3. 滚动到 Configuration: Update Build Configuration(配置:更新构建配置),然后选择自动

如需了解如何准备执行查询操作所需的依赖项,请点击下一步

为查询准备依赖项

  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());
        }
      }
    }

    该查询会返回前 10 个最常查看的 Stack Overflow 页面及其查看次数。

  3. 右键点击 SimpleApp.java,然后点击 Run Java(运行 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 标志表示删除文件夹中的所有资产。