Abfrage ausführen

In diesem Dokument erfahren Sie, wie Sie eine Abfrage in BigQuery ausführen und anhand eines Trockenlaufs ermitteln, wie viele Daten vor der Ausführung verarbeitet werden.

Arten von Abfragen

Sie können BigQuery-Daten mit einem der folgenden Abfragejobtypen abfragen:

  • Interaktive Abfragejobs. Standardmäßig führt BigQuery interaktive (On-Demand) Abfragejobs so schnell wie möglich aus.
  • Jobs vom Typ „Kontinuierliche Abfrage“ (Vorschau) Bei diesen Jobs wird die Abfrage kontinuierlich ausgeführt. So können Sie eingehende Daten in BigQuery in Echtzeit analysieren und die Ergebnisse dann in eine BigQuery-Tabelle schreiben oder in Bigtable oder Pub/Sub exportieren. Mit dieser Funktion können Sie zeitkritische Aufgaben ausführen, z. B. Erkenntnisse erstellen und sofort darauf reagieren, Echtzeit-Inferenzen für maschinelles Lernen (ML) anwenden und ereignisgesteuerte Datenpipelines erstellen.

  • Batch-Abfragejobs. Bei diesen Jobs stellt BigQuery jede Batchabfrage in Ihrem Namen in die Warteschlange und startet sie, sobald inaktive Ressourcen verfügbar werden – normalerweise innerhalb weniger Minuten.

Sie können Abfragejobs mit folgenden Methoden ausführen:

BigQuery führt Ihre Abfragen standardmäßig als interaktive Abfragejobs aus, die so bald wie möglich ausgeführt werden. BigQuery berechnet das Limit für gleichzeitige Abfragen dynamisch basierend auf der Ressourcenverfügbarkeit und bevorzugt das Ausführen mehrer gleichzeitiger interaktiver Abfragen als Batchabfragen. Sobald die Ratenbegrenzung gleichzeitiger Abfragen erreicht wurde, werden zusätzliche Abfragen in einer Warteschlange abgelegt. Weitere Informationen finden Sie unter Abfragewarteschlangen.

In BigQuery werden Abfrageergebnisse entweder in einer temporären Tabelle (Standard) oder einer permanenten Tabelle gespeichert. 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 auf Projekte, Ordner und Organisationen 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 des Projekts, 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

Access Denied: Project [project_id]: User does not have bigquery.jobs.create
permission in project [project_id].

Dieser Fehler tritt auf, wenn ein Nutzer keine Berechtigung zum Erstellen von Abfragejobs im Projekt hat.

Lösung: Ein Administrator muss Ihnen die Berechtigung bigquery.jobs.create für das Projekt erteilen, das Sie abfragen. Diese Berechtigung ist zusätzlich zu allen Berechtigungen erforderlich, die für den Zugriff auf die abgefragten Daten erforderlich sind.

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 SQL-Abfrage.

  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 Speicherort 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 die Abfrageergebnisse jetzt auf dem Tab Ergebnisse im Bereich 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 ansehen. 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 Speicherort 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"]}");
        }
    }
}

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

Continuous Query ausführen

Für die Ausführung eines Jobs mit kontinuierlicher Abfrage ist eine zusätzliche Konfiguration erforderlich. Weitere Informationen finden Sie unter Kontinuierliche Abfragen erstellen.

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 SQL-Abfrage.

  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 Bereich Ressourcenverwaltung die Option Batch aus.

  6. Optional: Geben Sie die Zieltabelle und den Speicherort 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 Speicherort 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 mit dem Wert BATCH auf.

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.

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

Für kurze Abfragen optimierter Modus

Der optimierte Modus für kurze Abfragen soll die Gesamtlatenz kurzer Abfragen verbessern, die bei Arbeitslasten wie Dashboards oder explorativen Datenanalysen häufig vorkommen. Er führt die Abfrage aus und gibt die Ergebnisse für SELECT-Anweisungen inline zurück. Bei Abfragen, die den optimierten Modus für kurze Abfragen verwenden, wird bei der Ausführung kein Job erstellt, es sei denn, BigQuery stellt fest, dass die Erstellung eines Jobs zum Ausführen der Abfrage erforderlich ist.

Wenn Sie den für kurze Abfragen optimierten Modus aktivieren möchten, setzen Sie das Feld jobCreationMode der Instanz QueryRequest im Anfragetext jobs.query auf JOB_CREATION_OPTIONAL.

Wenn der Wert dieses Felds auf JOB_CREATION_OPTIONAL festgelegt ist, ermittelt BigQuery, ob für die Abfrage der neue optimierte Modus für kurze Abfragen verwendet werden kann. In diesem Fall führt BigQuery die Abfrage aus und gibt alle Ergebnisse im Feld rows der Antwort zurück. Da für diese Abfrage kein Job erstellt wird, gibt BigQuery im Antworttext keine jobReference zurück. Stattdessen wird das Feld queryId zurückgegeben, mit dem Sie mithilfe der INFORMATION_SCHEMA.JOBS-Ansicht Statistiken zur Abfrage abrufen können. Da kein Job erstellt wird, gibt es keine jobReference, die an die APIs jobs.get und jobs.getQueryResults übergeben werden kann, um kurze Abfragen zu suchen.

Wenn BigQuery feststellt, dass ein Job zum Ausführen der Abfrage erforderlich ist, wird jobReference zurückgegeben. Im Feld job_creation_reason in der INFORMATION_SCHEMA.JOBS-Ansicht sehen Sie den Grund, warum ein Job für die Abfrage erstellt wurde. In diesem Fall sollten Sie jobs.getQueryResults verwenden, um die Ergebnisse abzurufen, sobald die Abfrage abgeschlossen ist.

Wenn Sie den Wert JOB_CREATION_OPTIONAL verwenden, sollten Sie nicht davon ausgehen, dass das Feld jobReference immer in der Antwort vorhanden ist. Sie sollten prüfen, ob das Feld vorhanden ist, bevor Sie darauf zugreifen.

Der optimierte Modus für kurze Abfragen enthält außerdem einen Abfrageergebnis-Cache, der die Leistung wiederholter Abfragen verbessert, wenn sich die zugrunde liegenden Daten nicht ändern. Wenn Sie useQueryCache: true (Standardwert ist true, wenn nicht angegeben) und jobCreationMode: JOB_CREATION_OPTIONAL in QueryRequest angeben, versucht BigQuery, die Ergebnisse aus dem Cache bereitzustellen. Das Caching erfolgt nach dem Best-Effort-Prinzip.

Wählen Sie eine der folgenden Optionen aus, um eine Abfrage im Modus für kurze Abfragen auszuführen:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie auf SQL-Abfrage.

  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 unter Abfragemodus auswählen auf Für kurze Suchanfragen optimiert. Klicken Sie auf Bestätigen, um die Auswahl zu bestätigen.

  5. Klicken Sie auf Ausführen.

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 --job_creation_mode=JOB_CREATION_OPTIONAL an. Im folgenden Beispiel können Sie mit dem Flag --use_legacy_sql=false die GoogleSQL-Syntax verwenden.

    bq query \
        --rpc=true \
        --use_legacy_sql=false \
        --job_creation_mode=JOB_CREATION_OPTIONAL \
        --location=LOCATION \
        'QUERY'

    Ersetzen Sie QUERY durch eine gültige GoogleSQL-Abfrage und LOCATION durch eine gültige Region, in der sich der Datensatz befindet. 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 \
        --rpc=true \
        --use_legacy_sql=false \
        --job_creation_mode=JOB_CREATION_OPTIONAL \
        --location=us \
        '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 gibt die Ausgabe inline in der Antwort zurück.

API

Wenn Sie eine Abfrage im Modus für kurze Abfragen mit der API ausführen möchten, führen Sie eine Abfrage synchron aus und füllen Sie das Attribut QueryRequest aus. Fügen Sie das Attribut jobCreationMode hinzu und legen Sie es auf JOB_CREATION_OPTIONAL fest.

Prüfen Sie die Antwort. Wenn jobComplete mit true übereinstimmt und jobReference leer ist, lesen Sie die Ergebnisse aus dem Feld rows. Sie können den queryId auch aus der Antwort abrufen.

Wenn jobRefernence vorhanden ist, können Sie unter jobCreationReason nachsehen, warum ein Job von BigQuery erstellt wurde. 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.

Java

Verfügbare Version: 2.37.1 und höher

Es muss die Umgebungsvariable QUERY_PREVIEW_ENABLED=true festgelegt werden.

Beispiel : Linux oder macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Beispiel : Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

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.JobId;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample demonstrating short mode query execution.
//
// While this feature is still in preview, it is controlled by
// setting the environment variable QUERY_PREVIEW_ENABLED=TRUE
// to request short mode execution.
public class QueryShortMode {

  public static void main(String[] args) {
    String query =
        "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";
    queryShortMode(query);
  }

  public static void queryShortMode(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();

      // Execute the query. The returned TableResult provides access information
      // about the query execution as well as query results.
      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      JobId jobId = results.getJobId();
      if (jobId != null) {
        System.out.println("Query was run with job state.  Job ID: " + jobId.toString());
      } else {
        System.out.println("Query was run in short mode.  Query ID: " + results.getQueryId());
      }

      // Print the results.
      results
          .iterateAll()
          .forEach(
              row -> {
                System.out.print("name:" + row.get("name").getStringValue());
                System.out.print(", gender: " + row.get("gender").getStringValue());
                System.out.print(", total: " + row.get("total").getLongValue());
                System.out.println();
              });

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

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

Python

Verfügbare Version: 3.21.0 und höher

Es muss die Umgebungsvariable QUERY_PREVIEW_ENABLED=true festgelegt werden.

Beispiel : Linux oder macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Beispiel : Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

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.

# This example demonstrates issuing a query that may be run in short query mode.
#
# To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
# environmental variable should be set to `TRUE`.
from google.cloud import bigquery

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

query = """
    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
"""
# Run the query.  The returned `rows` iterator can return information about
# how the query was executed as well as the result data.
rows = client.query_and_wait(query)

if rows.job_id is not None:
    print("Query was run with job state.  Job ID: {}".format(rows.job_id))
else:
    print("Query was run in short mode.  Query ID: {}".format(rows.query_id))

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

Knoten

Verfügbare Version: 7.6.1 und höher

Es muss die Umgebungsvariable QUERY_PREVIEW_ENABLED=true festgelegt werden.

Beispiel : Linux oder macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Beispiel : Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Node.js-Einrichtungsanleitung 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.

// Demonstrates issuing a query that may be run in short query mode.
// To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
// environmental variable should be set to `TRUE`.

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

async function queryShortMode() {
  // SQL query to run.

  const sqlQuery = `
    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`;

  // Run the query
  const [rows, , res] = await bigquery.query(sqlQuery);

  if (!res.jobReference) {
    console.log(`Query was run in short mode. Query ID: ${res.queryId}`);
  } else {
    const jobRef = res.jobReference;
    const qualifiedId = `${jobRef.projectId}.${jobRef.location}.${jobRef.jobId}`;
    console.log(
      `Query was run with job state. Job ID: ${qualifiedId}, Query ID: ${res.queryId}`
    );
  }
  // Print the results
  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

Go

Verfügbare Version: 1.58.0 und höher

Umgebungsvariable QUERY_PREVIEW_ENABLED=true muss festgelegt werden

Beispiel : Linux oder macOS

    export QUERY_PREVIEW_ENABLED=TRUE
  

Beispiel : Windows

    $env:QUERY_PREVIEW_ENABLED=TRUE
  

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Go-Einrichtungsanleitung 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"
)

// queryShortMode demonstrates issuing a query that may be run in short query mode.
//
// To enable the short query mode preview feature, the QUERY_PREVIEW_ENABLED
// environmental variable should be set to `TRUE`.
func queryShortMode(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: %w", err)
	}
	defer client.Close()

	q := client.Query(`
		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
		`)
	// Run the query and process the returned row iterator.
	it, err := q.Read(ctx)
	if err != nil {
		return fmt.Errorf("query.Read(): %w", err)
	}

	// The iterator provides information about the query execution.
	// Queries that were run in short query mode will not have the source job
	// populated.
	if it.SourceJob() == nil {
		fmt.Fprintf(w, "Query was run in short mode.  Query ID: %q\n", it.QueryID())
	} else {
		j := it.SourceJob()
		qualifiedJobID := fmt.Sprintf("%s:%s.%s", j.ProjectID(), j.Location(), j.ID())
		fmt.Fprintf(w, "Query was run with job state.  Job ID: %q, Query ID: %q\n",
			qualifiedJobID, it.QueryID())
	}

	// Print row data.
	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
}

JDBC-Treiber

Verfügbare Version: JDBC v1.6.1

Es ist erforderlich, JobCreationMode=2 im Verbindungsstring festzulegen.

    jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;JobCreationMode=2;Location=US;
  

ODBC-Treiber

Verfügbare Version: ODBC 3.0.7.1016

Erfordert die Einstellung von JobCreationMode=2 in der Datei .ini.

    [ODBC Data Sources]
    Sample DSN=Simba Google BigQuery ODBC Connector 64-bit
    [Sample DSN]
    JobCreationMode=2
  

Kontingente

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

Abfragen beobachten

Informationen zu laufenden Abfragen erhalten Sie über den Aufgaben-Explorer oder durch Abfragen der INFORMATION_SCHEMA.JOBS_BY_PROJECT-Ansicht.

Probelauf

Ein Trockenlauf in BigQuery liefert die folgenden Informationen:

  • Schätzung der Gebühren im On-Demand-Modus
  • Validierung Ihrer Abfrage
  • Ungefähre Anzahl der Byte, die von Ihrer Abfrage im Kapazitätsmodus verarbeitet werden

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.

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