Tworzenie zapytania do publicznego zbioru danych za pomocą biblioteki klienta BigQuery w języku Java

Tworzenie zapytania do publicznego zbioru danych za pomocą biblioteki klienta BigQuery w języku Java

Dowiedz się, jak:

  1. Aktywować Cloud Shell w projekcie Google Cloud
  2. Otworzyć edytor Cloud Shell.
  3. Przygotować zależności na potrzeby zapytań.
  4. Wysłać zapytanie do publicznego zbioru danych w BigQuery.
  5. Wyczyścić dane.

Szacowany czas potrzebny na ukończenie samouczka:

Aby zacząć, kliknij Rozpocznij.

Aktywowanie Cloud Shell w projekcie Google Cloud

  1. Jeśli nie włączysz płatności w projekcie, będziesz automatycznie pracować w trybie piaskownicy BigQuery. Tryb piaskownicy BigQuery pozwala bezpłatnie poznawać BigQuery z ograniczonym zestawem funkcji. Jeśli nie zamierzasz korzystać z projektu poza tym dokumentem, zalecamy korzystanie z trybu piaskownicy BigQuery.

  2. Kliknij Aktywuj Cloud Shell. Pokaż mi

Aby dowiedzieć się, jak otworzyć edytor Cloud Shell, kliknij Dalej.

Otwieranie edytora Cloud Shell

  1. Utwórz w Cloud Shell nowy projekt w języku Java przy użyciu Apache Maven:

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

    To polecenie tworzy projekt Maven o nazwie bigquery-java-quickstart.

    Dane wyjściowe są podobne do podanych. Dla ich uproszczenia pominęliśmy kilka wierszy.

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

    Oprócz Maven istnieje wiele innych systemów zarządzania zależnościami, z których możesz skorzystać. Więcej informacji znajdziesz w artykule o konfigurowaniu środowiska programistycznego Java pod kątem używania go z bibliotekami klienta.

  2. Zmień nazwę pliku App.java utworzonego domyślnie przez Maven:

    mv \
        bigquery-java-quickstart/src/main/java/com/google/app/App.java \
        bigquery-java-quickstart/src/main/java/com/google/app/SimpleApp.java
    
  3. Otwórz edytor Cloud Shell:

    cloudshell workspace bigquery-java-quickstart
    
  4. Jeśli pojawi się pytanie, czy chcesz zsynchronizować ścieżkę classpath lub konfigurację Java, kliknij Zawsze.

    Jeśli pytanie to się nie pojawi, a przy wykonywaniu zadań z tego przewodnika wystąpi błąd związany ze ścieżką classpath, wykonaj te czynności:

    1. Kliknij Plik > Preferencje > Otwórz ustawienia (UI).
    2. Kliknij Rozszerzenia > Java.
    3. Przewiń do sekcji Konfiguracja: zaktualizuj konfigurację kompilacji i wybierz automatycznie.

Aby dowiedzieć się, jak przygotować zależności na potrzeby zapytań, kliknij Dalej.

Przygotowywanie zależności na potrzeby zapytań

  1. W panelu eksploratora znajdź projekt BIGQUERY-JAVA-QUICKSTART.

  2. Kliknij plik pom.xml, aby go otworzyć.

  3. W tagu <dependencies> dodaj po dotychczasowych zależnościach podaną poniżej zależność. Nie zastępuj żadnych istniejących zależności.

    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-bigquery</artifactId>
    </dependency>
    
  4. W wierszu po tagu zamykającym (</dependencies>) dodaj:

    <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>
    

Aby dowiedzieć się, jak wysłać zapytanie do publicznego zbioru danych w BigQuery, kliknij Dalej.

Wysyłanie zapytania do publicznego zbioru danych w BigQuery

  1. W panelu eksploratora w projekcie BIGQUERY-JAVA-QUICKSTART kliknij src > main/java/com/google/app > SimpleApp.java. Spowoduje to otwarcie pliku.

  2. Aby utworzyć zapytanie do zbioru danych bigquery-public-data.stackoverflow, pozostaw pierwszy wiersz pliku (package com.google.app;) i zastąp pozostałą zawartość pliku tym kodem:

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

    Zapytanie zwraca 10 najczęściej wyświetlanych stron Stack Overflow oraz liczbę ich wyświetleń.

  3. Kliknij prawym przyciskiem myszy plik SimpleApp.java i wybierz Uruchom aplikację Java. Jeśli pojawi się prośba o autoryzację Cloud Shell i zaakceptowanie warunków, kliknij Autoryzuj.

    Dane wyjściowe będą podobne do tych:

    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
    

Udało Ci się wykonać zapytanie na publicznym zbiorze danych za pomocą biblioteki klienta BigQuery w języku Java.

Aby uniknąć obciążenia konta opłatami i zapoznać się z kolejnymi krokami, kliknij Dalej.

Dalsze kroki

Zachowaj utworzone zasoby i wykonaj więcej czynności w BigQuery lub wyczyść dane, aby uniknąć opłat.

Do czego jeszcze można wykorzystać BigQuery

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami, usuń projekt Google Cloud lub zasoby utworzone w tym przewodniku.

Usuwanie projektu

Jeśli do nauki obsługi BigQuery posłużył Ci nowy, specjalnie utworzony projekt, którego już nie potrzebujesz, możesz go usunąć. Pamiętaj, że usunięcie projektu spowoduje usunięcie całej jego zawartości i niestandardowych identyfikatorów projektu.

Usuwanie zasobów

Jeśli użyłeś(-aś) istniejącego projektu, usuń utworzony folder bigquery-java-quickstart:

  1. W Cloud Shell przejdź do katalogu wyżej:

    cd ..
    
  2. Usuń utworzone zasoby:

    rm -R bigquery-java-quickstart
    

    Flaga -R usuwa wszystkie zasoby w danym folderze.