Globale Abfragen

Mit globalen Abfragen können Sie SQL-Abfragen ausführen, die auf Daten verweisen, die in mehr als einer Region gespeichert sind. Sie können beispielsweise eine globale Abfrage ausführen, die eine Tabelle in us-central1 mit einer Tabelle in europe-central2 verknüpft. In diesem Dokument wird erläutert, wie Sie globale Abfragen in Ihrem Projekt aktivieren und ausführen.

Hinweis

Prüfen Sie, ob globale Abfragen für Ihr Projekt aktiviert sind, und ob Sie die erforderlichen Berechtigungen zum Ausführen globaler Abfragen haben.

Globale Abfragen aktivieren

Verwenden Sie die ALTER PROJECT SET OPTIONS Anweisung oder ALTER ORGANIZATION SET OPTIONS Anweisung, um die Standardkonfiguration zu ändern und globale Abfragen für Ihr Projekt oder Ihre Organisation zu aktivieren.

  • Wenn Sie globale Abfragen in einer Region ausführen möchten, legen Sie das Argument enable_global_queries_execution in dieser Region für das Projekt, in dem die Abfrage ausgeführt wird , auf true fest.
  • Wenn globale Abfragen Daten aus einer Region kopieren dürfen, legen Sie das Argument enable_global_queries_data_access in dieser Region für das Projekt, das die Daten enthält , auf true fest.
  • Diese Optionen werden jedes Mal geprüft, wenn Ihre Abfrage auf Remote-Tabellen zugreift.
  • Globale Abfragen können in einem Projekt ausgeführt werden und Daten aus anderen Regionen aus einem anderen Projekt abrufen.

Beispiel: Projektübergreifende Konfiguration

Im folgenden Beispiel wird gezeigt, wie Sie eine Abfrage in einem Projekt ausführen, die auf eine Tabelle in einem anderen Projekt zugreift.

Angenommen, Sie haben ein Projekt query_project, in dem Jobs in der Region us-central1 ausgeführt werden, und Sie möchten eine Abfrage ausführen, die auf eine Tabelle data_project.dataset.my_table in der Region europe-west1 zugreift:

SET @@location='us-central1';
SELECT
  *
FROM
  `query_project.dataset.my_table`
  JOIN `data_project.dataset.my_other_table` USING id;

Damit diese globale Abfrage erfolgreich ausgeführt werden kann, ist die folgende Konfiguration erforderlich:

  1. Sie müssen die Ausführung globaler Abfragen im Projekt (query_project) in der Region aktivieren, in der eine globale Abfrage ausgeführt wird (us-central1):

    ALTER PROJECT `query_project`
    SET OPTIONS (
    `region-us-central1.enable_global_queries_execution` = TRUE
    );
  2. Sie müssen das Kopieren von Daten durch globale Abfragen aus dem Projekt, das die Daten enthält (data_project), für die zugehörige Region (europe-west1) aktivieren:

    ALTER PROJECT `data_project`
    SET OPTIONS (
    `region-europe-west1.enable_global_queries_data_access` = TRUE
    );

Für das Erstellen und Verwenden von Ansichten, die Remote-Tabellen enthalten, gelten dieselben Prinzipien: Für das Projekt, in dem die Abfragen ausgeführt werden, muss enable_global_queries_execution aktiviert sein.

Diese ALTER PROJECT-Vorgänge müssen separat ausgeführt werden, da sie sich auf verschiedene Projekte und Regionen beziehen. Es kann einige Minuten dauern, bis die Änderung wirksam wird.

Erforderliche Berechtigung

Zum Ausführen einer globalen Abfrage benötigen Sie die Berechtigung bigquery.jobs.createGlobalQuery. Die Rolle „BigQuery-Administrator“ ist die einzige vordefinierte Rolle, die diese Berechtigung enthält. So erteilen Sie die Berechtigung zum Ausführen globaler Abfragen, ohne die Rolle „BigQuery-Administrator“ zu gewähren:

  1. Erstellen Sie eine benutzerdefinierte Rolle, z. B. „BigQuery-Ausführer globaler Abfragen“.
  2. Fügen Sie dieser Rolle bigquery.jobs.createGlobalQuery hinzu.
  3. Weisen Sie diese Rolle ausgewählten Nutzern oder Dienstkonten zu.

Daten abfragen

Wenn Sie eine globale Abfrage ausführen möchten, schreiben Sie eine SQL-Abfrage so, als wären sich Ihre Daten an einem einzigen Standort. Wenn die von der Abfrage referenzierten Daten an mehreren Standorten gespeichert sind, versucht BigQuery, eine globale Abfrage auszuführen. In einigen Fällen wählt BigQuery den Standort der Abfrage automatisch aus. Andernfalls müssen Sie den Standort angeben, an dem die Abfrage ausgeführt werden soll. Daten, auf die in der Abfrage verwiesen wird und die sich nicht am ausgewählten Standort befinden, werden an diesen Standort kopiert.

Das folgende Beispiel wird als globale Abfrage ausgeführt, die Tabellen aus zwei verschiedenen Datasets zusammenführt, die an zwei verschiedenen Standorten gespeichert sind:

SELECT id, tr_date, product_id, price FROM us_dataset.transactions
UNION ALL
SELECT id, tr_date, product_id, price FROM europe_dataset.transactions

Automatische Standortauswahl

In den folgenden Fällen wird der Standort, an dem eine Abfrage ausgeführt werden muss, automatisch bestimmt und kann nicht geändert werden:

  • Abfragen der Datenbearbeitungssprache (INSERT-, UPDATE- und DELETE-Anweisungen) werden immer an einem Standort der Zieltabelle ausgeführt.
  • Abfragen der Datendefinitionssprache, z. B. die Anweisung CREATE TABLE AS SELECT, werden immer an dem Standort ausgeführt, an dem eine Ressource erstellt oder geändert wird.
  • Abfragen mit einer angegebenen Zieltabelle werden immer an dem Standort ausgeführt, an dem sich die Zieltabelle befindet.

Standort wählen

Im Allgemeinen entscheiden Sie, wo Ihre globalen Abfragen ausgeführt werden. Berücksichtigen Sie dabei Folgendes:

  • Bei globalen Abfragen werden Daten vorübergehend von einem Standort an einen anderen kopiert. Wenn Ihre Organisation Anforderungen an den Datenstandort hat und Sie nicht möchten, dass Ihre Daten von Standort A an einen anderen Standort verschoben werden, legen Sie den Abfragestandort auf A fest.

  • Um die Menge der zwischen Standorten übertragenen Daten zu minimieren und die Kosten der Abfrage zu senken, führen Sie die Abfrage in der Region aus, in der die meisten abgefragten Daten gespeichert sind.

Angenommen, Sie haben einen Onlineshop und führen eine Liste Ihrer Produkte am Standort us-central1, Transaktionen jedoch in der us-south1 Region. Wenn es mehr Transaktionen als Produkte in Ihrem Katalog gibt, sollten Sie die Abfrage in der Region us-south1 ausführen.

Globale Abfragen

Um globale Abfragen effizient und kostengünstig auszuführen, ist es wichtig, den Mechanismus hinter ihrer Ausführung zu verstehen.

Wenn Sie Daten verwenden möchten, die sich an verschiedenen Standorten befinden, müssen sie an einen Standort repliziert werden. Im Folgenden wird der Workflow für globale Abfragen abstrahiert, der von BigQuery ausgeführt wird:

  1. Bestimmen Sie, wo die Abfrage ausgeführt werden muss, entweder durch die Deklaration des Nutzers oder automatisch. Dieser Standort wird als primärer Standort bezeichnet. Alle anderen Standorte, auf die in der Abfrage verwiesen wird, sind Remote-Standorte.
  2. Führen Sie in jeder Remote-Region eine Unterabfrage aus, um die Daten zu erfassen, die zum Abschließen der Abfrage in der primären Region erforderlich sind.
  3. Kopieren Sie diese Daten von Remote-Standorten an den primären Standort.
  4. Speichern Sie die Daten 8 Stunden lang in temporären Tabellen am primären Standort.
  5. Führen Sie eine letzte Abfrage mit allen am primären Standort erfassten Daten aus.
  6. Geben Sie die Abfrageergebnisse zurück.

BigQuery versucht, die Menge der zwischen Regionen übertragenen Daten zu minimieren. Dazu ein Beispiel:

SET @@location = 'EU';
SELECT
  t1.col1, t2.col2
FROM
  eu_dataset.table1 t1
  JOIN us_dataset.table2 t2 using col3
WHERE
  t2.col4 = 'ABC'

BigQuery muss nicht die gesamte Tabelle t2 aus den USA in die EU replizieren. Es reicht aus, nur die angeforderten Spalten (col2 und col3) und nur die Zeilen zu übertragen, die der WHERE Bedingung entsprechen (t2.col4 = 'ABC'). Diese Mechanismen, die als Pushdowns bezeichnet werden, hängen jedoch von der Abfragestruktur ab und manchmal kann die Menge der übertragenen Daten groß sein. Wir empfehlen, globale Abfragen mit einer kleinen Teilmenge von Daten zu testen und zu prüfen, ob Daten nur bei Bedarf übertragen werden.

Beobachtbarkeit

Den an die Remote-Region gesendeten Abfragetext finden Sie im Jobverlauf. Der Remote-Job hat dieselbe Job-ID wie die ursprüngliche Abfrage mit dem zusätzlichen Suffix _xregion.

Globale Abfragen deaktivieren

Verwenden Sie die ALTER PROJECT SET OPTIONS statement oder ALTER ORGANIZATION SET OPTIONS statement, um die Standardkonfiguration zu ändern und globale Abfragen für Ihr Projekt oder Ihre Organisation zu deaktivieren.

  • Wenn Sie globale Abfragen in einer Region deaktivieren möchten, legen Sie das Argument enable_global_queries_execution in dieser Region auf false oder NULL fest.
  • Wenn globale Abfragen keine Daten aus einer Region kopieren dürfen, legen Sie das Argument enable_global_queries_data_access in dieser Region auf false oder NULL fest.

Im folgenden Beispiel wird gezeigt, wie Sie globale Abfragen auf Projektebene deaktivieren:

ALTER PROJECT PROJECT_ID
SET OPTIONS (
  `region-REGION.enable_global_queries_execution` = false,
  `region-REGION.enable_global_queries_data_access` = false
);

Ersetzen Sie Folgendes:

  • PROJECT_ID: der Name des zu ändernden Projekts
  • REGION: der Name der Region, in der globale Abfragen deaktiviert werden sollen

Es kann einige Minuten dauern, bis die Änderung wirksam wird.

Preise

Die Kosten für eine globale Abfrage setzen sich aus folgenden Komponenten zusammen:

  • Die Compute-Kosten jeder Unterabfrage an Remote-Standorten, basierend auf Ihrem Preismodell an diesen Standorten
  • Die Compute-Kosten der endgültigen Abfrage in der Region, in der sie ausgeführt wird, basierend auf Ihrem Preismodell in dieser Region
  • Die Kosten für das Kopieren von Daten zwischen verschiedenen Standorten gemäß den Preisen für die Datenreplikation
  • Die Kosten für das Speichern von Daten, die aus Remote-Regionen in die primäre Region kopiert wurden (für 8 Stunden), gemäß den Preisen für Speicher

Kontingente

Informationen zu Kontingenten für globale Abfragen finden Sie unter Abfragejobs.

Beschränkungen

  • In den Ausführungsdetails und im Ausführungsgraphen einer Abfrage wird nicht die Anzahl der Byte angezeigt, die von Remote-Standorten verarbeitet und übertragen wurden. Diese Informationen finden Sie in Kopierjobs, die im Jobverlauf aufgeführt sind. Die Job-ID eines Kopierjobs, der von einer globalen Abfrage erstellt wurde, hat die Job-ID des Abfragejobs als Präfix.
  • Globale Abfragen werden im Sandbox-Modus nicht unterstützt.
  • Globale Abfragen haben eine höhere Latenz als Abfragen in einer einzelnen Region, da Zeit für die Übertragung von Daten zwischen Regionen erforderlich ist.
  • Bei globalen Abfragen wird kein Cache verwendet, um die Übertragung von Daten zwischen Regionen zu vermeiden.
  • Sie können Pseudospalten wie _PARTITIONTIME nicht mit globalen Abfragen abfragen.
  • Sie können Spalten vom Typ RANGE nicht mit globalen Abfragen abfragen.
  • Sie können Spalten mit flexiblen Spaltennamen nicht mit globalen Abfragen abfragen.
  • Sie können INFORMATION_SCHEMA Ansichten nicht aus einer Remote-Region in einer globalen Abfrage abfragen.
  • Globale autorisierte Ansichten und autorisierte Routinen werden nicht unterstützt (wenn eine Ansicht oder Routine an einem Standort autorisiert ist, auf ein Dataset an einem anderen Standort zuzugreifen). Erstellen Sie stattdessen autorisierte Ansichten in der Region, in der sich Ihre Daten befinden, und fragen Sie die autorisierten Ansichten über globale Abfragen ab.
  • Materialisierte Ansichten für globale Abfragen werden nicht unterstützt.
  • Wenn Ihre globale Abfrage auf STRUCT-Spalten verweist, werden keine Pushdowns auf Remote-Unterabfragen angewendet. Zur Leistungsoptimierung können Sie in der Remote-Region eine Ansicht erstellen, die STRUCT-Spalten filtert und nur die erforderlichen Felder als einzelne Spalten zurückgibt.
  • Globale Abfragen werden nicht atomar ausgeführt. Wenn die Datenreplikation erfolgreich ist, die Gesamtabfrage jedoch fehlschlägt, werden Ihnen die Kosten für die Datenreplikation trotzdem in Rechnung gestellt.
  • Temporäre Tabellen, die in Remote-Regionen im Rahmen der Ausführung globaler Abfragen erstellt werden, werden nur mit vom Kunden verwalteten Verschlüsselungsschlüsseln (Customer-Managed Encryption Keys, CMEK) verschlüsselt, wenn ein CMEK-Schlüssel, der für die Verschlüsselung der Ergebnisse der globalen Abfrage konfiguriert wurde (entweder auf Tabellen-, Dataset- oder Projektebene), global ist. Damit temporäre Remote-Tabellen immer mit CMEK geschützt sind, legen Sie einen standardmäßigen KMS-Schlüssel für das Projekt fest, in dem globale Abfragen in der Remote-Region ausgeführt werden.
  • Globale Abfragen werden in Assured Workloads nicht unterstützt.
  • Eine einzelne globale Abfrage kann auf bis zu 10 Remote-Tabellen pro Region zugreifen.