Abfrageprobelauf ausführen

Wenn Sie eine Abfrage in der Befehlszeile ausführen, können Sie mit dem Flag --dry_run die Anzahl der von der Abfrage gelesenen Byte abschätzen lassen. Sie können auch den Parameter dryRun verwenden, wenn Sie einen Abfragejob über die API oder Clientbibliotheken einreichen.

Verwenden Sie den Schätzungswert, der vom Probelauf zurückgegeben wird, um die Abfragekosten mit dem Preisrechner zu ermitteln. Für die Durchführung des Probelaufs fallen keine Kosten an.

Erforderliche Berechtigungen

Zum Ausführen eines Abfragejobs müssen Sie mindestens bigquery.jobs.create-Berechtigungen haben. Damit der Abfragejob erfolgreich abgeschlossen werden kann, muss Ihnen auch Zugriff auf die Datasets gewährt werden, die die Tabellen oder Ansichten enthalten, auf die die Abfrage verweist. Weitere Informationen zur Dataset-Zugriffssteuerung finden Sie unter Zugriff auf Datasets steuern.

Diese vordefinierten Cloud IAM-Rollen enthalten die Berechtigung bigquery.jobs.create:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

Wenn ein Nutzer mit Berechtigungen vom Typ bigquery.datasets.create ein Dataset erstellt, wird ihm dafür außerdem bigquery.dataOwner-Zugriff gewährt. Mit bigquery.dataOwner-Zugriff hat der Nutzer die Möglichkeit, Tabellen und Ansichten im Dataset abzufragen.

Weitere Informationen zu Cloud IAM-Rollen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Probeläufe durchführen

Sie können einen Probelauf für einen Abfragejob durchführen, indem Sie Folgendes verwenden:

  • Das Flag --dry_run mit dem Befehl query in der Befehlszeile
  • Den Parameter dryRun in der Jobkonfiguration bei Verwendung der API oder der Clientbibliotheken

Probelauf ausführen

So führen Sie einen Probelauf aus:

Console

Derzeit können Sie keinen Probelauf mit der Cloud Console ausführen.

Klassische UI

Zurzeit können Sie keinen Probelauf in der Web-UI ausführen.

Befehlszeile

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'
 

Dieser Befehl gibt folgende Antwort zurück:

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

API

Zum Ausführen eines Probelaufs über die API senden Sie einen Abfragejob und geben für dryRun in der Jobkonfiguration true an.

Go

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Go API.

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 != nil {
		return err
	}
	fmt.Fprintf(w, "This query will process %d bytes\n", status.Statistics.TotalBytesProcessed)
	return nil
}

Python

Für einen Probelauf mit der Python-Clientbibliothek legen Sie das Attribut QueryJobConfig.dry_run auf True fest. 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 den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Python API.

from google.cloud import bigquery

# TODO(developer): 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))