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 편집기 열기

  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. 파일 > 환경설정 > 설정 열기(UI)를 클릭합니다.
    2. 확장 프로그램 > Java를 클릭합니다.
    3. 구성: 빌드 구성 업데이트로 스크롤하고 자동을 선택합니다.

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

쿼리의 종속 항목 준비

  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를 마우스 오른쪽 버튼으로 클릭하고 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 플래그는 폴더의 모든 애셋을 삭제합니다.