Abfrage ausführen

In diesem Dokument erfahren Sie, wie Sie eine Abfrage in BigQuery ausführen und wie viele Daten vor der Ausführung verarbeitet werden, indem Sie einen Probelauf ausführen.

Interaktive Abfragen vs. Batch-Abfragen

In BigQuery können Sie zwei Arten von Abfragen ausführen:

  • Interaktive Abfragejobs sind Jobs, die BigQuery nach Bedarf ausführt.
  • Batch-Abfragejobs sind Aufträge, auf deren Ausführung BigQuery wartet bis ungenutzte Rechenressourcen verfügbar sind.

BigQuery führt Ihre Abfragen standardmäßig als interaktive Abfragejobs aus, die so schnell wie möglich ausgeführt werden. BigQuery berechnet das Limit für gleichzeitige Abfragen dynamisch anhand der Ressourcenverfügbarkeit und bevorzugt die gleichzeitige Ausführung von interaktiven Abfragen als Batch-Abfragen. Wenn das Limit für gleichzeitige Abfragen erreicht ist, warten zusätzliche Abfragen in einer Warteschlange. Weitere Informationen finden Sie unter Abfragewarteschlangen.

BigQuery speichert die Abfrageergebnisse entweder in einer temporären Tabelle (Standardeinstellung) oder einer permanenten Tabelle. Wenn Sie eine permanente Tabelle als Zieltabelle für die Ergebnisse angeben, können Sie auswählen, ob eine vorhandene Tabelle angefügt oder überschrieben werden soll, oder eine neue Tabelle mit einem eindeutigen Namen erstellt werden soll.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Ausführen eines Abfragejobs benötigen:

  • BigQuery-Jobnutzer (roles/bigquery.jobUser) für das Projekt.
  • BigQuery-Datenbetrachter (roles/bigquery.dataViewer) für alle Tabellen und Ansichten, auf die Ihre Abfrage verweist. Zum Abfragen von Ansichten benötigen Sie diese Rolle auch für alle zugrunde liegenden Tabellen und Ansichten. Wenn Sie autorisierte Ansichten oder autorisierte Datasets verwenden, benötigen Sie keinen Zugriff auf die zugrunde liegenden Quelldaten.

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Ausführen eines Abfragejobs erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind zum Ausführen eines Abfragejobs erforderlich:

  • bigquery.jobs.create für das Projekt, in dem die Abfrage ausgeführt wird, unabhängig davon, wo die Daten gespeichert sind.
  • bigquery.tables.getData für alle Tabellen und Ansichten, auf die Ihre Abfrage verweist. Zum Abfragen von Ansichten benötigen Sie diese Berechtigung auch für alle zugrunde liegenden Tabellen und Ansichten. Wenn Sie autorisierte Ansichten oder autorisierte Datasets verwenden, benötigen Sie keinen Zugriff auf die zugrunde liegenden Quelldaten.

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Fehlerbehebung

Der folgende Fehler tritt auf, wenn ein Prinzip nicht berechtigt ist, Abfragejobs im Projekt zu erstellen: Access Denied: Project [project_id]: User does not have bigquery.jobs.create permission in project [project_id].

Lösung: Prüfen Sie, ob Sie die Berechtigung bigquery.jobs.create für das Projekt haben, von dem aus Sie die Abfrage ausführen. Diese Berechtigung wird zusätzlich zu jeder Berechtigung für die abgefragten Daten benötigt.

Weitere Informationen zu BigQuery-Berechtigungen finden Sie unter Zugriffssteuerung mit IAM.

Interaktive Abfrage ausführen

Wählen Sie eine der folgenden Optionen aus, um eine interaktive Abfrage auszuführen:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie auf Neue Abfrage erstellen.

  3. Geben Sie im Abfrageeditor eine gültige GoogleSQL-Abfrage ein.

    Fragen Sie beispielsweise das öffentliche BigQuery-Dataset usa_names ab, um die häufigsten Namen in den USA zwischen den Jahren 1910 und 2013 zu ermitteln:

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. Optional: Geben Sie die Zieltabelle und den Standort für die Abfrageergebnisse an:

    1. Klicken Sie im Abfrageeditor auf Mehr und dann auf Abfrageeinstellungen.
    2. Aktivieren Sie im Abschnitt Ziel die Option Zieltabelle für Abfrageergebnisse festlegen.
    3. Geben Sie unter Dataset den Namen eines vorhandenen Datasets für die Zieltabelle ein, z. B. myProject.myDataset.
    4. Geben Sie unter Tabellen-ID einen Namen für die Zieltabelle ein, z. B. myTable.
    5. Wenn die Zieltabelle eine vorhandene Tabelle ist, wählen Sie als Schreibeinstellung für Zieltabelle aus, ob die Tabelle mit den Abfrageergebnissen angefügt oder überschrieben werden soll.

      Wenn die Zieltabelle eine neue Tabelle ist, erstellt BigQuery die Tabelle, wenn Sie Ihre Abfrage ausführen.

    6. Klicken Sie im Abschnitt Zusätzliche Einstellungen auf das Menü Speicherort der Daten und wählen Sie eine Option aus.

      In diesem Beispiel wird das Dataset usa_names am multiregionalen Standort „US“ gespeichert. Wenn Sie für diese Abfrage eine Zieltabelle angeben, muss sich das Dataset, das die Zieltabelle enthält, ebenfalls am multiregionalen Standort „US“ befinden. Es ist nicht möglich, ein Dataset an einem Standort abzufragen und die Ergebnisse in eine Zieltabelle an einem anderen Standort zu schreiben.

    7. Klicken Sie auf Speichern.

  5. Klicken Sie auf Ausführen.

    Wenn Sie keine Zieltabelle angeben, schreibt der Abfragejob die Ausgabe in eine temporäre (Cache-)Tabelle.

    Sie können sich jetzt die Abfrageergebnisse auf dem Tab Ergebnisse des Bereichs Abfrageergebnisse ansehen.

  6. Optional: Klicken Sie zum Sortieren der Abfrageergebnisse (Vorschau) nach Spalten neben dem Spaltennamen auf Sortiermenü öffnen und wählen Sie eine Sortierreihenfolge aus. Wenn die geschätzten Byte, die für die Sortierung verarbeitet wurden, größer als null sind, wird die Anzahl der Byte oben im Menü angezeigt.

  7. Optional: Öffnen Sie den Tab Diagramm, um Ihre Abfrageergebnisse darzustellen. Sie können das Diagramm vergrößern oder verkleinern, das Diagramm als PNG-Datei herunterladen oder die Sichtbarkeit der Legende umschalten.

    Im Bereich Diagrammkonfiguration können Sie den Diagrammtyp (Linie, Balken oder Streu) ändern und die Messwerte und Dimensionen des Diagramms konfigurieren. Die Felder in diesem Bereich werden mit der Anfangskonfiguration vorausgefüllt, die aus dem Zieltabellenschema der Abfrage abgeleitet wurde. Die Konfiguration wird zwischen folgenden Abfrageausführungen im selben Abfrageeditor beibehalten. Dimensionen unterstützen die Datentypen INTEGER, INT64, FLOAT, FLOAT64, NUMERIC, BIGNUMERIC, TIMESTAMP, DATE, DATETIME, TIME und STRING, Messungen unterstützen die Datentypen INTEGER, INT64, FLOAT, FLOAT64, NUMERIC und BIGNUMERIC.

  8. Optional: Auf dem Tab JSON können Sie die Abfrageergebnisse im JSON-Format prüfen. Dabei ist der Schlüssel der Spaltenname und der Wert das Ergebnis für diese Spalte.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Führen Sie den Befehl bq query aus. Im folgenden Beispiel können Sie mit dem Flag --use_legacy_sql=false die GoogleSQL-Syntax verwenden.

    bq query \
        --use_legacy_sql=false \
        'QUERY'
    

    Ersetzen Sie QUERY durch eine gültige GoogleSQL-Abfrage. Fragen Sie beispielsweise das öffentliche BigQuery-Dataset usa_names ab, um die häufigsten Namen in den USA zwischen den Jahren 1910 und 2013 zu ermitteln:

    bq query \
        --use_legacy_sql=false \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    Der Abfragejob schreibt die Ausgabe in eine temporäre (Cache-)Tabelle.

    Optional können Sie die Zieltabelle und den Standort für die Abfrageergebnisse angeben. Wenn Sie die Ergebnisse in eine vorhandene Tabelle schreiben möchten, fügen Sie das entsprechende Flag zum Anfügen (--append_table=true) oder Überschreiben (--replace=true) der Tabelle ein.

    bq query \
        --location=LOCATION \
        --destination_table=TABLE \
        --use_legacy_sql=false \
        'QUERY'
    

    Dabei gilt:

    • LOCATION: die Region oder Multiregion für die Zieltabelle, z. B. US

      In diesem Beispiel wird das Dataset usa_names am multiregionalen Standort „US“ gespeichert. Wenn Sie für diese Abfrage eine Zieltabelle angeben, muss sich das Dataset, das die Zieltabelle enthält, ebenfalls am multiregionalen Standort „US“ befinden. Es ist nicht möglich, ein Dataset an einem Standort abzufragen und die Ergebnisse in eine Zieltabelle an einem anderen Standort zu schreiben.

      Mit der Datei ".bigqueryrc" können Sie einen Standardwert für den Standort festlegen.

    • TABLE: der Name der Zieltabelle, z. B. myDataset.myTable

      Wenn die Zieltabelle eine neue Tabelle ist, erstellt BigQuery die Tabelle, wenn Sie Ihre Abfrage ausführen. Sie müssen jedoch ein vorhandenes Dataset angeben.

      Wenn sich die Tabelle nicht in Ihrem aktuellen Projekt befindet, fügen Sie die Google Cloud-Projekt-ID im Format PROJECT_ID:DATASET.TABLE hinzu, z. B. myProject:myDataset.myTable. Wenn --destination_table nicht angegeben ist, wird ein Abfragejob generiert, der die Ausgabe in eine temporäre (Cache-)Tabelle schreibt.

API

Sie können die API zum Ausführen einer Abfrage verwenden. Dazu fügen Sie einen neuen Job ein und füllen das Jobkonfigurationsattribut query mit Daten. Optional: Geben Sie Ihren Standort im Attribut location im Abschnitt jobReference der Jobressource an.

Rufen Sie getQueryResults auf, um die Ergebnisse abzufragen. Führen Sie die Abfrage so lange aus, bis jobComplete gleich true ist. In der Liste errors werden Fehler und Warnungen angezeigt.

C#

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der C#-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery C# API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryQuery
{
    public void Query(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        string query = @"
            SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013`
            WHERE state = 'TX'
            LIMIT 100";
        BigQueryJob job = client.CreateQueryJob(
            sql: query,
            parameters: null,
            options: new QueryOptions { UseQueryCache = false });
        // Wait for the job to complete.
        job = job.PollUntilCompleted().ThrowOnAnyError();
        // Display the results
        foreach (BigQueryRow row in client.GetQueryResults(job.Reference))
        {
            Console.WriteLine($"{row["name"]}");
        }
    }
}

Einfach loslegen (Go)

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// queryBasic demonstrates issuing a query and reading results.
func queryBasic(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	q := client.Query(
		"SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` " +
			"WHERE state = \"TX\" " +
			"LIMIT 100")
	// Location must match that of the dataset(s) referenced in the query.
	q.Location = "US"
	// Run the query and print results when the query job is completed.
	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	it, err := job.Read(ctx)
	for {
		var row []bigquery.Value
		err := it.Next(&row)
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintln(w, row)
	}
	return nil
}

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

public class SimpleQuery {

  public static void runSimpleQuery() {
    // TODO(developer): Replace this query before running the sample.
    String query = "SELECT corpus FROM `bigquery-public-data.samples.shakespeare` GROUP BY corpus;";
    simpleQuery(query);
  }

  public static void simpleQuery(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Create the query job.
      QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();

      // Execute the query.
      TableResult result = bigquery.query(queryConfig);

      // Print the results.
      result.iterateAll().forEach(rows -> rows.forEach(row -> System.out.println(row.getValue())));

      System.out.println("Query ran successfully");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query did not run \n" + e.toString());
    }
  }
}

Informationen zum Ausführen einer Abfrage mit einem Proxy finden Sie unter Proxy konfigurieren.

Node.js

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

// Import the Google Cloud client library using default credentials
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
async function query() {
  // Queries the U.S. given names dataset for the state of Texas.

  const query = `SELECT name
    FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
    WHERE state = 'TX'
    LIMIT 100`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);
  console.log(`Job ${job.id} started.`);

  // Wait for the query to finish
  const [rows] = await job.getQueryResults();

  // Print the results
  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

PHP

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von PHP in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery PHP API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $query = 'SELECT id, view_count FROM `bigquery-public-data.stackoverflow.posts_questions`';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$jobConfig = $bigQuery->query($query);
$job = $bigQuery->startQuery($jobConfig);

$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
$queryResults = $job->queryResults();

$i = 0;
foreach ($queryResults as $row) {
    printf('--- Row %s ---' . PHP_EOL, ++$i);
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, json_encode($value));
    }
}
printf('Found %s row(s)' . PHP_EOL, $i);

Python

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

query = """
    SELECT name, SUM(number) as total_people
    FROM `bigquery-public-data.usa_names.usa_1910_2013`
    WHERE state = 'TX'
    GROUP BY name, state
    ORDER BY total_people DESC
    LIMIT 20
"""
rows = client.query_and_wait(query)  # Make an API request.

print("The query data:")
for row in rows:
    # Row values can be accessed by field name or index.
    print("name={}, count={}".format(row[0], row["total_people"]))

Ruby

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Ruby in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Ruby API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

require "google/cloud/bigquery"

def query
  bigquery = Google::Cloud::Bigquery.new
  sql = "SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` " \
        "WHERE state = 'TX' " \
        "LIMIT 100"

  # Location must match that of the dataset(s) referenced in the query.
  results = bigquery.query sql do |config|
    config.location = "US"
  end

  results.each do |row|
    puts row.inspect
  end
end

Weitere Informationen finden Sie unter Interaktive Abfragen vs. Batch-Abfragen.

Batch-Abfrage ausführen

Wählen Sie eine der folgenden Optionen aus, um eine Batch-Abfrage auszuführen:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie auf Neue Abfrage erstellen.

  3. Geben Sie im Abfrageeditor eine gültige GoogleSQL-Abfrage ein.

    Fragen Sie beispielsweise das öffentliche BigQuery-Dataset usa_names ab, um die häufigsten Namen in den USA zwischen den Jahren 1910 und 2013 zu ermitteln:

    SELECT
      name, gender,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name, gender
    ORDER BY
      total DESC
    LIMIT
      10;
    
  4. Klicken Sie auf Mehr und dann auf Abfrageeinstellungen.

  5. Wählen Sie im Abschnitt Ressourcenverwaltung die Option Batch aus.

  6. Optional: Geben Sie die Zieltabelle und den Standort für die Abfrageergebnisse an:

    1. Aktivieren Sie im Abschnitt Ziel die Option Zieltabelle für Abfrageergebnisse festlegen.
    2. Geben Sie unter Dataset den Namen eines vorhandenen Datasets für die Zieltabelle ein, z. B. myProject.myDataset.
    3. Geben Sie unter Tabellen-ID einen Namen für die Zieltabelle ein, z. B. myTable.
    4. Wenn die Zieltabelle eine vorhandene Tabelle ist, wählen Sie als Schreibeinstellung für Zieltabelle aus, ob die Tabelle mit den Abfrageergebnissen angefügt oder überschrieben werden soll.

      Wenn die Zieltabelle eine neue Tabelle ist, erstellt BigQuery die Tabelle, wenn Sie Ihre Abfrage ausführen.

    5. Klicken Sie im Abschnitt Zusätzliche Einstellungen auf das Menü Speicherort der Daten und wählen Sie eine Option aus.

      In diesem Beispiel wird das Dataset usa_names am multiregionalen Standort „US“ gespeichert. Wenn Sie für diese Abfrage eine Zieltabelle angeben, muss sich das Dataset, das die Zieltabelle enthält, ebenfalls am multiregionalen Standort „US“ befinden. Es ist nicht möglich, ein Dataset an einem Standort abzufragen und die Ergebnisse in eine Zieltabelle an einem anderen Standort zu schreiben.

  7. Klicken Sie auf Speichern.

  8. Klicken Sie auf Ausführen.

    Wenn Sie keine Zieltabelle angeben, schreibt der Abfragejob die Ausgabe in eine temporäre (Cache-)Tabelle.

  9. Optional: Klicken Sie zum Sortieren der Abfrageergebnisse (Vorschau) nach Spalten neben dem Spaltennamen auf Sortiermenü öffnen und wählen Sie eine Sortierreihenfolge aus. Wenn die geschätzten Byte, die für die Sortierung verarbeitet wurden, größer als null sind, wird die Anzahl der Byte oben im Menü angezeigt.

  10. Optional: Öffnen Sie den Tab Diagramm, um Ihre Abfrageergebnisse darzustellen. Sie können das Diagramm vergrößern oder verkleinern, das Diagramm als PNG-Datei herunterladen oder die Sichtbarkeit der Legende umschalten.

    Im Bereich Diagrammkonfiguration können Sie den Diagrammtyp (Linie, Balken oder Streu) ändern und die Messwerte und Dimensionen des Diagramms konfigurieren. Die Felder in diesem Bereich werden mit der Anfangskonfiguration vorausgefüllt, die aus dem Zieltabellenschema der Abfrage abgeleitet wurde. Die Konfiguration wird zwischen folgenden Abfrageausführungen im selben Abfrageeditor beibehalten. Dimensionen unterstützen die Datentypen INTEGER, INT64, FLOAT, FLOAT64, NUMERIC, BIGNUMERIC, TIMESTAMP, DATE, DATETIME, TIME und STRING, Messungen unterstützen die Datentypen INTEGER, INT64, FLOAT, FLOAT64, NUMERIC und BIGNUMERIC.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Verwenden Sie den Befehl bq query und geben Sie das Flag --batch an. Im folgenden Beispiel können Sie mit dem Flag --use_legacy_sql=false die GoogleSQL-Syntax verwenden.

    bq query \
        --batch \
        --use_legacy_sql=false \
        'QUERY'
    

    Ersetzen Sie QUERY durch eine gültige GoogleSQL-Abfrage. Fragen Sie beispielsweise das öffentliche BigQuery-Dataset usa_names ab, um die häufigsten Namen in den USA zwischen den Jahren 1910 und 2013 zu ermitteln:

    bq query \
        --batch \
        --use_legacy_sql=false \
        'SELECT
          name, gender,
          SUM(number) AS total
        FROM
          `bigquery-public-data.usa_names.usa_1910_2013`
        GROUP BY
          name, gender
        ORDER BY
          total DESC
        LIMIT
          10;'
    

    Der Abfragejob schreibt die Ausgabe in eine temporäre (Cache-)Tabelle.

    Optional können Sie die Zieltabelle und den Standort für die Abfrageergebnisse angeben. Wenn Sie die Ergebnisse in eine vorhandene Tabelle schreiben möchten, fügen Sie das entsprechende Flag zum Anfügen (--append_table=true) oder Überschreiben (--replace=true) der Tabelle ein.

    bq query \
        --batch \
        --location=LOCATION \
        --destination_table=TABLE \
        --use_legacy_sql=false \
        'QUERY'
    

    Dabei gilt:

    • LOCATION: die Region oder Multiregion für die Zieltabelle, z. B. US

      In diesem Beispiel wird das Dataset usa_names am multiregionalen Standort „US“ gespeichert. Wenn Sie für diese Abfrage eine Zieltabelle angeben, muss sich das Dataset, das die Zieltabelle enthält, ebenfalls am multiregionalen Standort „US“ befinden. Es ist nicht möglich, ein Dataset an einem Standort abzufragen und die Ergebnisse in eine Zieltabelle an einem anderen Standort zu schreiben.

      Mit der Datei ".bigqueryrc" können Sie einen Standardwert für den Standort festlegen.

    • TABLE: der Name der Zieltabelle, z. B. myDataset.myTable

      Wenn die Zieltabelle eine neue Tabelle ist, erstellt BigQuery die Tabelle, wenn Sie Ihre Abfrage ausführen. Sie müssen jedoch ein vorhandenes Dataset angeben.

      Wenn sich die Tabelle nicht in Ihrem aktuellen Projekt befindet, fügen Sie die Google Cloud-Projekt-ID im Format PROJECT_ID:DATASET.TABLE hinzu, z. B. myProject:myDataset.myTable. Wenn --destination_table nicht angegeben ist, wird ein Abfragejob generiert, der die Ausgabe in eine temporäre (Cache-)Tabelle schreibt.

API

Sie können die API zum Ausführen einer Abfrage verwenden. Dazu fügen Sie einen neuen Job ein und füllen das Jobkonfigurationsattribut query mit Daten. Optional: Geben Sie Ihren Standort im Attribut location im Abschnitt jobReference der Jobressource an.

Wenn Sie die Attribute des Abfragejobs angeben, nehmen Sie das Attribut configuration.query.priority auf und setzen Sie den Wert auf BATCH.

Rufen Sie getQueryResults auf, um die Ergebnisse abzufragen. Führen Sie die Abfrage so lange aus, bis jobComplete gleich true ist. In der Liste errors werden Fehler und Warnungen angezeigt.

Einfach loslegen (Go)

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/bigquery"
)

// queryBatch demonstrates issuing a query job using batch priority.
func queryBatch(w io.Writer, projectID, dstDatasetID, dstTableID string) error {
	// projectID := "my-project-id"
	// dstDatasetID := "mydataset"
	// dstTableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	// Build an aggregate table.
	q := client.Query(`
		SELECT
  			corpus,
  			SUM(word_count) as total_words,
  			COUNT(1) as unique_words
		FROM ` + "`bigquery-public-data.samples.shakespeare`" + `
		GROUP BY corpus;`)
	q.Priority = bigquery.BatchPriority
	q.QueryConfig.Dst = client.Dataset(dstDatasetID).Table(dstTableID)

	// Start the job.
	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	// Job is started and will progress without interaction.
	// To simulate other work being done, sleep a few seconds.
	time.Sleep(5 * time.Second)
	status, err := job.Status(ctx)
	if err != nil {
		return err
	}

	state := "Unknown"
	switch status.State {
	case bigquery.Pending:
		state = "Pending"
	case bigquery.Running:
		state = "Running"
	case bigquery.Done:
		state = "Done"
	}
	// You can continue to monitor job progress until it reaches
	// the Done state by polling periodically.  In this example,
	// we print the latest status.
	fmt.Fprintf(w, "Job %s in Location %s currently in state: %s\n", job.ID(), job.Location(), state)

	return nil

}

Java

Zum Ausführen einer Batch-Abfrage legen Sie die Abfragepriorität fest, und zwar auf QueryJobConfiguration.Priority.BATCH, wenn Sie eine QueryJobConfiguration erstellen.

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Java-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample to query batch in a table
public class QueryBatch {

  public static void runQueryBatch() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String query =
        "SELECT corpus"
            + " FROM `"
            + projectId
            + "."
            + datasetName
            + "."
            + tableName
            + " GROUP BY corpus;";
    queryBatch(query);
  }

  public static void queryBatch(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query)
              // Run at batch priority, which won't count toward concurrent rate limit.
              .setPriority(QueryJobConfiguration.Priority.BATCH)
              .build();

      TableResult results = bigquery.query(queryConfig);

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query batch performed successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query batch not performed \n" + e.toString());
    }
  }
}

Node.js

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function queryBatch() {
  // Runs a query at batch priority.

  // Create query job configuration. For all options, see
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationquery
  const queryJobConfig = {
    query: `SELECT corpus
            FROM \`bigquery-public-data.samples.shakespeare\` 
            LIMIT 10`,
    useLegacySql: false,
    priority: 'BATCH',
  };

  // Create job configuration. For all options, see
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfiguration
  const jobConfig = {
    // Specify a job configuration to set optional job resource properties.
    configuration: {
      query: queryJobConfig,
    },
  };

  // Make API request.
  const [job] = await bigquery.createJob(jobConfig);

  const jobId = job.metadata.id;
  const state = job.metadata.status.state;
  console.log(`Job ${jobId} is currently in state ${state}`);
}

Python

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

job_config = bigquery.QueryJobConfig(
    # Run at batch priority, which won't count toward concurrent rate limit.
    priority=bigquery.QueryPriority.BATCH
)

sql = """
    SELECT corpus
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY corpus;
"""

# Start the query, passing in the extra configuration.
query_job = client.query(sql, job_config=job_config)  # Make an API request.

# Check on the progress by getting the job's updated state. Once the state
# is `DONE`, the results are ready.
query_job = client.get_job(
    query_job.job_id, location=query_job.location
)  # Make an API request.

print("Job {} is currently in state {}".format(query_job.job_id, query_job.state))

Weitere Informationen finden Sie unter Interaktive Abfragen vs. Batch-Abfragen.

Kontingente

Informationen zu Kontingenten für interaktive Abfragen und Batchabfragen finden Sie unter Abfragejobs.

Anzahl der interaktiven Abfragen und Batchabfragen anzeigen

Sie können die Anzahl der interaktiven Abfragen und Batchabfragen mit der Ansicht INFORMATION_SCHEMA.JOBS_BY_PROJECT anzeigen. Im folgenden Beispiel wird mit der Ansicht INFORMATION_SCHEMA.JOBS_BY_PROJECT die Anzahl der interaktiven Abfragen und Batchabfragen abgerufen, die in den letzten sieben Stunden ausgeführt wurden:

SELECT
  priority,
  COUNT(*) active_jobs,
FROM
  `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 hour)
  AND end_time IS NULL
  AND job_type = 'QUERY'
GROUP BY priority

In der Ansicht INFORMATION_SCHEMA.JOBS_BY_PROJECT wird mit dem Feld priority angegeben, ob eine Abfrage INTERACTIVE oder BATCH ist. Weitere Informationen finden Sie unter Schema:

Probelauf

Ein Probelauf in BigQuery liefert folgende Informationen:

Bei Probeläufen werden keine Abfrage-Slots verwendet. Für einen Probelauf fallen keine Kosten an. Verwenden Sie den Schätzungswert, der vom Probelauf zurückgegeben wird, um die Abfragekosten mit dem Preisrechner zu ermitteln.

Probelauf durchführen

So führen Sie einen Probelauf aus:

Console

  1. Wechseln Sie zur BigQuery-Seite.

    BigQuery aufrufen

  2. Geben Sie Ihre Abfrage in den Abfrageeditor ein.

    Wenn die Abfrage gültig ist, wird automatisch ein Häkchen zusammen mit der Datenmenge angezeigt, die durch die Abfrage verarbeitet wird. Wenn die Abfrage ungültig ist, wird ein Ausrufezeichen mit einer Fehlermeldung angezeigt.

bq

Geben Sie eine Abfrage wie die folgende zusammen mit dem Flag --dry_run ein:

bq query \
--use_legacy_sql=false \
--dry_run \
'SELECT
   COUNTRY,
   AIRPORT,
   IATA
 FROM
   `project_id`.dataset.airports
 LIMIT
   1000'
 

Bei einer gültigen Abfrage gibt der Befehl die folgende Antwort zurück:

Query successfully validated. Assuming the tables are not modified,
running this query will process 10918 bytes of data.

API

Für einen Probelauf über die API übergeben Sie einen Abfragejob, bei dem im JobConfiguration-Typ dryRun auf true gesetzt ist.

Einfach loslegen (Go)

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
)

// queryDryRun demonstrates issuing a dry run query to validate query structure and
// provide an estimate of the bytes scanned.
func queryDryRun(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	q := client.Query(`
	SELECT
		name,
		COUNT(*) as name_count
	FROM ` + "`bigquery-public-data.usa_names.usa_1910_2013`" + `
	WHERE state = 'WA'
	GROUP BY name`)
	q.DryRun = true
	// Location must match that of the dataset(s) referenced in the query.
	q.Location = "US"

	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	// Dry run is not asynchronous, so get the latest status and statistics.
	status := job.LastStatus()
	if err := status.Err(); err != nil {
		return err
	}
	fmt.Fprintf(w, "This query will process %d bytes\n", status.Statistics.TotalBytesProcessed)
	return nil
}

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.JobStatistics;
import com.google.cloud.bigquery.QueryJobConfiguration;

// Sample to run dry query on the table
public class QueryDryRun {

  public static void runQueryDryRun() {
    String query =
        "SELECT name, COUNT(*) as name_count "
            + "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
            + "WHERE state = 'WA' "
            + "GROUP BY name";
    queryDryRun(query);
  }

  public static void queryDryRun(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query).setDryRun(true).setUseQueryCache(false).build();

      Job job = bigquery.create(JobInfo.of(queryConfig));
      JobStatistics.QueryStatistics statistics = job.getStatistics();

      System.out.println(
          "Query dry run performed successfully." + statistics.getTotalBytesProcessed());
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Node.js

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function queryDryRun() {
  // Runs a dry query of the U.S. given names dataset for the state of Texas.

  const query = `SELECT name
    FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
    WHERE state = 'TX'
    LIMIT 100`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
    dryRun: true,
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);

  // Print the status and statistics
  console.log('Status:');
  console.log(job.metadata.status);
  console.log('\nJob Statistics:');
  console.log(job.metadata.statistics);
}

PHP

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von PHP in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery PHP API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $query = 'SELECT id, view_count FROM `bigquery-public-data.stackoverflow.posts_questions`';

// Construct a BigQuery client object.
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);

// Set job configs
$jobConfig = $bigQuery->query($query);
$jobConfig->useQueryCache(false);
$jobConfig->dryRun(true);

// Extract query results
$queryJob = $bigQuery->startJob($jobConfig);
$info = $queryJob->info();

printf('This query will process %s bytes' . PHP_EOL, $info['statistics']['totalBytesProcessed']);

Python

Setzen Sie das Attribut QueryJobConfig.dry_run auf True. Client.query() gibt immer einen abgeschlossenen QueryJob zurück, wenn die Abfrage für einen Probelauf konfiguriert ist.

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Python-Einrichtungsanleitung in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

job_config = bigquery.QueryJobConfig(dry_run=True, use_query_cache=False)

# Start the query, passing in the extra configuration.
query_job = client.query(
    (
        "SELECT name, COUNT(*) as name_count "
        "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
        "WHERE state = 'WA' "
        "GROUP BY name"
    ),
    job_config=job_config,
)  # Make an API request.

# A dry run query completes immediately.
print("This query will process {} bytes.".format(query_job.total_bytes_processed))

Nächste Schritte