Globale Anfragen
Mit globalen Abfragen können Sie SQL-Abfragen ausführen, die auf Daten verweisen, die in mehreren Regionen gespeichert sind.
Sie können beispielsweise eine globale Abfrage ausführen, mit der eine Tabelle in us-central1 mit einer Tabelle in europe-central2 verknüpft wird. In diesem Dokument wird beschrieben, wie Sie globale Abfragen in Ihrem Projekt aktivieren und ausführen.
Hinweise
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
Wenn Sie globale Abfragen für Ihr Projekt oder Ihre Organisation aktivieren möchten, verwenden Sie die ALTER PROJECT SET OPTIONS-Anweisung oder die ALTER ORGANIZATION SET OPTIONS-Anweisung, um die Standardkonfiguration zu ändern.
- Wenn Sie globale Abfragen in einer Region ausführen möchten, legen Sie das
enable_global_queries_execution-Argument in dieser Region für ein Projekt, in dem die Abfrage ausgeführt wird, auftruefest. - Damit globale Abfragen Daten aus einer Region kopieren können, legen Sie das
enable_global_queries_data_access-Argument in dieser Region für ein Projekt fest, in dem die Daten gespeichert sind.true - Globale Abfragen können in einem Projekt ausgeführt werden und Daten aus anderen Regionen aus einem anderen Projekt abrufen.
Das folgende Beispiel zeigt, wie Sie diese Einstellungen auf Projektebene ändern. Angenommen, Sie möchten globale Abfragen in der Region REGION_1 im Projekt PROJECT_1_ID ausführen und Daten aus REGION_2 im Projekt PROJECT_2_ID abrufen:
ALTER PROJECT `PROJECT_1_ID` SET OPTIONS ( `region-REGION_1.enable_global_queries_execution` = true ); ALTER PROJECT `PROJECT_2_ID` SET OPTIONS ( `region-REGION_2.enable_global_queries_data_access` = true );
Ersetzen Sie Folgendes:
PROJECT_1_ID: der Name des Projekts, in dem globale Abfragen ausgeführt werdenREGION_1: die Region, in der globale Abfragen ausgeführt werdenPROJECT_2_ID: der Name des Projekts, aus dem Daten für globale Abfragen abgerufen werdenREGION_2: die Region, aus der Daten für globale Abfragen abgerufen werden
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:
- Erstellen Sie eine benutzerdefinierte Rolle, z. B. „BigQuery global queries executor“.
- Fügen Sie dieser Rolle
bigquery.jobs.createGlobalQueryhinzu. - 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 Ihre Daten an einem einzigen Ort. Wenn die von der Abfrage referenzierten Daten an mehreren Orten 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.
Im folgenden Beispiel wird eine globale Abfrage ausgeführt, mit der Tabellen aus zwei verschiedenen Datasets zusammengeführt werden, 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 Ort, an dem eine Anfrage ausgeführt werden muss, automatisch bestimmt und kann nicht geändert werden:
- Abfragen der Datenbearbeitungssprache (
INSERT-,UPDATE- undDELETE-Anweisungen) werden immer am Standort der Zieltabelle ausgeführt. - DDL-Abfragen (Data Definition Language), z. B. die
CREATE TABLE AS SELECT-Anweisung, 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 Speicherort 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 Ort an einen anderen kopiert. Wenn Ihre Organisation Anforderungen an den Datenstandort hat und Sie nicht möchten, dass Ihre Daten von Standort A den Standort A verlassen, legen Sie den Abfragespeicherort 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, aber Transaktionen in der Region us-south1. Wenn es mehr Transaktionen als Produkte in Ihrem Katalog gibt, sollten Sie die Abfrage in der Region us-south1 ausführen.
Globale Anfragen
Damit globale Abfragen effizient und kostengünstig ausgeführt werden können, 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 sehen Sie eine Abstraktion des globalen Abfrageworkflows, der von BigQuery ausgeführt wird:
- Legen Sie fest, wo die Abfrage ausgeführt werden muss – entweder auf Nutzeranfrage oder automatisch. Dieser Standort wird als primärer Standort bezeichnet. Alle anderen Standorte, auf die in der Abfrage verwiesen wird, sind remote.
- Führen Sie in jeder Remote-Region eine untergeordnete Abfrage aus, um die Daten zu erfassen, die zum Abschließen der Abfrage in der primären Region erforderlich sind.
- Kopieren Sie diese Daten von Remote-Standorten an den primären Standort.
- Speichern Sie die Daten für 8 Stunden in temporären Tabellen am primären Standort.
- Führen Sie eine letzte Abfrage mit allen am primären Standort erhobenen Daten aus.
- Die Abfrageergebnisse zurückgeben
BigQuery versucht, die Menge der Daten, die zwischen Regionen übertragen werden, 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 Bedingung WHERE (t2.col4 = 'ABC') entsprechen. 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 Anfragen deaktivieren
Wenn Sie globale Abfragen für Ihr Projekt oder Ihre Organisation deaktivieren möchten, verwenden Sie ALTER PROJECT SET OPTIONS statement oder ALTER ORGANIZATION SET OPTIONS statement, um die Standardkonfiguration zu ändern.
- Wenn Sie globale Anfragen in einer Region deaktivieren möchten, legen Sie das Argument
enable_global_queries_executionin dieser Region auffalseoderNULLfest. - Wenn Sie verhindern möchten, dass bei globalen Abfragen Daten aus einer Region kopiert werden, legen Sie das Argument
enable_global_queries_data_accessin dieser Region auffalseoderNULLfest.
Das folgende Beispiel zeigt, wie Sie globale Abfragen auf Projektebene deaktivieren:
ALTER PROJECTPROJECT_IDSET 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.REGIONist 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 Rechenkosten jeder Unterabfrage an Remote-Standorten basierend auf Ihrem Preismodell an diesen Standorten
- Die Rechenkosten 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äß Speicherpreise
Kontingente
Informationen zu Kontingenten für globale Abfragen finden Sie unter Abfragejobs.
Beschränkungen
- In den Ausführungsdetails und dem Ausführungsdiagramm einer Abfrage wird nicht die Anzahl der Byte angezeigt, die von Remote-Standorten verarbeitet und übertragen wurden. Diese Informationen werden in Kopierjobs angezeigt, die Sie in Ihrem Jobverlauf finden. Die Job-ID eines Kopierjobs, der durch eine globale 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 die Übertragung von Daten zwischen Regionen Zeit in Anspruch nimmt.
- Bei globalen Abfragen wird kein Cache verwendet, um die Übertragung von Daten zwischen Regionen zu vermeiden.
- Pseudospalten wie
_PARTITIONTIMEkönnen nicht mit globalen Abfragen abgefragt werden. - Sie können keine Spalten mit flexiblen Spaltennamen in globalen Abfragen abfragen.
- Wenn Sie in einer
WHERE-Anweisung auf die Spalten einer BigLake-Tabelle verweisen, können Sie die LiteraleRANGEoderINTERVALnicht verwenden. - Globale autorisierte Ansichten und autorisierte Routinen werden nicht unterstützt (wenn eine Ansicht oder Routine an einem Standort für den Zugriff auf ein Dataset an einem anderen Standort autorisiert ist).
- 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 eine Ansicht in der Remote-Region erstellen, dieSTRUCT-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, wird Ihnen 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 zum Verschlüsseln der globalen Abfrageergebnisse konfiguriert wurde (entweder auf Tabellen-, Dataset- oder Projektebene), global ist. Damit temporäre Remotetabellen 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.
- In einer globalen Abfrage können Sie maximal 10 Tabellen pro Region abfragen.