Föderierte Cloud Spanner-Abfragen
Mit föderierten Abfragen in BigQuery können Sie Daten in Spanner in Echtzeit abfragen, ohne Daten kopieren oder verschieben zu müssen. Sie können Spanner-Daten abfragen, indem Sie ein externes Spanner-Dataset erstellen oder die Funktion EXTERNAL_QUERY verwenden.
Rollen und Berechtigungen
Wenn Sie Spanner über BigQuery abfragen, gibt es zwei verschiedene Arten von Rollen, die den Zugriff auf verschiedenen Ebenen verwalten.
IAM-Rollen: Diese Rollen regeln den Zugriff aufGoogle Cloud -Ressourcen, einschließlich Spanner-Instanzen und -Datenbanken. Sie legen fest, welche Hauptkonten auf den Spanner-Dienst zugreifen und Aktionen auf Instanz- oder Datenbankebene ausführen können, z. B. Verbindungen herstellen, Daten lesen oder verwalten. Sie verwalten IAM-Rollen (Identity and Access Management) über die IAM-Konsole oder die Google Cloud CLI. Beispiele:
roles/bigquery.connectionUserundroles/spanner.databaseReader. Weitere Informationen finden Sie unter IAM-Rollen für Spanner und Berechtigungen gewähren.Spanner-Datenbankrollen: Diese Rollen werden in einer Spanner-Datenbank mit DDL-Anweisungen wie
CREATE ROLEundGRANTdefiniert. Sie steuern den detaillierten Zugriff auf bestimmte Schemaobjekte wie Tabellen, Spalten und Ansichten in der Datenbank. Dies ist Teil der detaillierten Zugriffssteuerung (Fine-Grained Access Control, FGAC). Sie verwenden eine Datenbankrolle, wenn Ihre Organisation die detaillierte Zugriffssteuerung implementiert, um Berechtigungen in der Datenbank zu verwalten.
Prüfen, ob Sie ein Nutzer der detaillierten Zugriffssteuerung sind
Um die richtigen Berechtigungen zu ermitteln, die Sie anfordern müssen, müssen Sie feststellen, ob Sie ein Nutzer mit detaillierter Zugriffssteuerung sind. Fragen Sie dazu Ihren Spanner-Datenbankadministrator, ob Ihr Zugriff auf die Spanner-Datenbank über die detaillierte Zugriffssteuerung verwaltet wird.
Sie sind wahrscheinlich ein Nutzer mit detaillierter Zugriffssteuerung, wenn Ihr Administrator Ihrem Konto Berechtigungen gewährt, indem er es einer bestimmten Spanner-Datenbankrolle zuweist (z. B. indem er Ihrem Konto die IAM-Rolle roles/spanner.databaseRoleUser für eine Datenbankrollenressource gewährt). In diesem Fall müssen Sie die Namen der Datenbankrollen kennen, die Sie verwenden können. Sie müssen die BigQuery-Verbindung so konfigurieren, dass eine dieser Datenbankrollen verwendet wird.
Sie sind wahrscheinlich kein Nutzer der detaillierten Zugriffssteuerung, wenn Ihr Administrator Ihrem Konto umfassendere IAM-Rollen auf Datenbankebene wie roles/spanner.databaseReader zuweist. In diesem Fall müssen Sie beim Herstellen der Verbindung keine bestimmte Datenbankrolle verwenden.
Rollenanwendung vergleichen
IAM steuert den Zugriff auf die Datenbankressource selbst, während Spanner-Datenbankrollen die Berechtigungen für die Objekte in dieser Datenbank steuern.
Für die Verwendung einer FGAC-Datenbankrolle benötigen Sie in der Regel die folgenden Berechtigungen:
- Die IAM-Berechtigung
spanner.databases.useRoleBasedAccess, die häufig über die Rolleroles/spanner.fineGrainedAccessUsergewährt wird. - Berechtigung zur Verwendung der spezifischen Datenbankrolle, die über die Rolle
roles/spanner.databaseRoleUsermit einer IAM-Bedingung gewährt wird.
Weitere Informationen zum Einrichten dieser Berechtigungen finden Sie unter Detaillierte Zugriffssteuerung konfigurieren.
Externe Datasets verwenden
Die einfachste Möglichkeit, Cloud Spanner-Tabellen abzufragen, besteht darin, ein externes Dataset zu erstellen. Nachdem Sie das externe Dataset erstellt haben, sind Ihre Tabellen aus der entsprechenden Spanner-Datenbank in BigQuery sichtbar und Sie können sie in Ihren Abfragen verwenden, z. B. in Joins, Unions oder Unterabfragen. Es werden jedoch keine Daten von Spanner in den BigQuery-Speicher verschoben.
Wenn Sie ein externes Dataset erstellen, müssen Sie keine Verbindung erstellen, um Cloud Spanner-Daten abzufragen.
Funktion EXTERNAL_QUERY verwenden
Wie bei anderen föderierten Datenbanken können Sie Spanner-Daten auch mit einer EXTERNAL_QUERY-Funktion abfragen. Das kann nützlich sein, wenn Sie mehr Kontrolle über die Verbindungsparameter haben möchten.
Hinweis
- Achten Sie darauf, dass Ihr BigQuery-Administrator eine Spanner-Verbindung erstellt und für Sie freigegeben hat. Weitere Informationen finden Sie unter Richtige Verbindung auswählen.
- Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle „BigQuery Connection-Nutzer“ (
roles/bigquery.connectionUser) für die Verbindung zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Abfragen einer Spanner-Instanz benötigen. Außerdem benötigen Sie entsprechende Berechtigungen für die Spanner-Datenbank, die davon abhängen, ob Sie ein Nutzer mit detaillierter Zugriffssteuerung sind.- Wenn Sie ein Nutzer der detaillierten Zugriffssteuerung sind:
- Sie benötigen die IAM-Rollen, die für die Verwendung der detaillierten Zugriffssteuerung erforderlich sind. Diese Rollen sind in der Regel
roles/spanner.fineGrainedAccessUserundroles/spanner.databaseRoleUser. Die Rollen werden mit einer Bedingung verwendet, die die Datenbankrolle angibt. - Die Spanner-Datenbankrolle, die Sie in der Verbindung angeben, muss die Berechtigung
SELECTfür alle Schemaobjekte haben, auf die Ihre Abfragen verweisen. Ihr Datenbankadministrator gewährt Berechtigungen mithilfe der DDL-AnweisungGRANT(oder der PostgreSQL-Entsprechung).
- Sie benötigen die IAM-Rollen, die für die Verwendung der detaillierten Zugriffssteuerung erforderlich sind. Diese Rollen sind in der Regel
- Wenn Sie kein Nutzer der detaillierten Zugriffssteuerung sind, benötigen Sie die IAM-Rolle „Spanner-Datenbankleser“ (
roles/spanner.databaseReader) für die Datenbank.
Informationen zum Zuweisen von IAM-Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
- Wenn Sie ein Nutzer der detaillierten Zugriffssteuerung sind:
Die richtige Verbindung auswählen
Als Nutzer der detaillierten Spanner-Zugriffssteuerung müssen Sie beim Ausführen einer föderierten Abfrage mit einer EXTERNAL_QUERY-Funktion eine Spanner-Verbindung verwenden, die eine Datenbankrolle angibt. Diese Datenbankrolle ist Teil der detaillierten Zugriffssteuerung in der Spanner-Datenbank und von Ihren IAM-Rollen getrennt. Anschließend verwenden alle Abfragen, die Sie mit dieser Verbindung ausführen, die Berechtigungen, die dieser Datenbankrolle gewährt wurden.
Wenn Sie eine Verbindung verwenden, die keine Datenbankrolle angibt, müssen Sie die IAM-Rollen haben, die unter Vorbereitung angegeben sind.
Daten abfragen
Verwenden Sie die Funktion EXTERNAL_QUERY, um eine föderierte Abfrage aus einer GoogleSQL-Abfrage an Spanner zu senden.
Erstellen Sie Ihre Spanner-Abfrage je nach angegebenem Dialekt der Datenbank in GoogleSQL oder PostgreSQL.
Im folgenden Beispiel wird eine föderierte Abfrage an eine Spanner-Datenbank namens orders gesendet und die Ergebnisse mit einer BigQuery-Tabelle namens mydataset.customers verknüpft:
SELECT c.customer_id, c.name, rq.first_order_date FROM mydataset.customers AS c LEFT OUTER JOIN EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id GROUP BY c.customer_id, c.name, rq.first_order_date;
Cloud Spanner Data Boost
Data Boost ist ein vollständig verwaltetes, serverloses Feature, das unabhängige Rechenressourcen für unterstützte Spanner-Arbeitslasten bereitstellt. Mit Data Boost können Sie Analyseabfragen und Datenexporte mit minimalen Auswirkungen auf vorhandene Arbeitslasten auf der bereitgestellten Spanner-Instanz ausführen. Mit Data Boost können Sie föderierte Abfragen mit unabhängiger Rechenkapazität ausführen, die von Ihren bereitgestellten Instanzen getrennt ist, um vorhandene Arbeitslasten in Spanner nicht zu beeinträchtigen. Data Boost ist am nützlichsten, wenn Sie komplexe Ad-hoc-Abfragen ausführen oder wenn Sie große Datenmengen verarbeiten möchten, ohne die vorhandene Spanner-Arbeitslast zu beeinträchtigen. Die Ausführung von föderierten Abfragen mit Data Boost kann zu einer deutlich geringeren CPU-Verbrauch und in einigen Fällen zu einer geringeren Abfragelatenz führen.
Hinweis
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Spanner Database Reader with DataBoost (roles/spanner.databaseReaderWithDataBoost) für die Spanner-Datenbank zuzuweisen, um die Berechtigung zu erhalten, die Sie für den Zugriff auf Data Boost benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigung spanner.databases.useDataBoost, die für den Zugriff auf Data Boost erforderlich ist.
Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Die IAM-Rolle roles/spanner.databaseReaderWithDataBoost gewährt die Berechtigung, Data Boost zu verwenden. Diese Rolle ist zusätzlich zu den grundlegenden Berechtigungen erforderlich, die zum Lesen von Daten benötigt werden, z. B. roles/spanner.databaseReader für Nutzer ohne detaillierte Zugriffssteuerung oder die entsprechenden Berechtigungen für die detaillierte Zugriffssteuerung.
Bei der Verwendung externer Datasets mit Spanner wird immer Data Boost verwendet. Daher ist die Berechtigung spanner.databases.useDataBoost erforderlich.
Data Boost aktivieren
Wenn Sie externe Datasets verwenden, wird Data Boost immer verwendet und Sie müssen es nicht manuell aktivieren.
Wenn Sie Data Boost für Ihre EXTERNAL_QUERY-Abfragen verwenden möchten, müssen Sie es beim Erstellen einer Verbindung aktivieren, die von Ihrer Abfrage verwendet wird.
Daten gleichzeitig lesen
Spanner kann bestimmte Abfragen in kleinere Teile oder Partitionen aufteilen und die Partitionen parallel abrufen. Weitere Informationen, einschließlich einer Liste der Einschränkungen, finden Sie unter Daten parallel lesen in der Spanner-Dokumentation.
Informationen zum Abfrageausführungsplan für eine Spanner-Abfrage finden Sie unter So werden Abfragen von Spanner ausgeführt.
Wenn Sie föderierte Abfragen mit externen Datasets ausführen, wird immer die Option „Daten parallel lesen“ verwendet.
Wenn Sie parallele Lesevorgänge bei Verwendung von EXTERNAL_QUERY aktivieren möchten, aktivieren Sie sie beim Erstellen der Verbindung.
Priorität für die Abfrageausführung verwalten
Wenn Sie föderierte Abfragen mit einer EXTERNAL_QUERY-Funktion ausführen, können Sie einzelnen Abfragen Prioritäten (high, medium oder low) zuweisen, indem Sie die Option query_execution_priority angeben:
SELECT * FROM EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id''', '{"query_execution_priority":"high"}');
Die Standardpriorität ist medium.
Abfragen mit der Priorität high konkurrieren mit dem Transaktionstraffic. Abfragen mit der Priorität low werden auf Best-Effort-Basis ausgeführt und können durch das Laden im Hintergrund vorzeitig beendet werden, z. B. durch geplante Sicherungen.
Wenn Sie föderierte Abfragen mit externen Datasets ausführen, haben alle Abfragen immer die Priorität medium.
Spanner-Tabellenschema ansehen
Wenn Sie externe Datasets verwenden, sind Ihre Spanner-Tabellen direkt in BigQuery Studio sichtbar und Sie können ihre Schemas sehen.
Sie können die Schemas jedoch auch sehen, ohne externe Datasets zu definieren. Sie können auch die Funktion EXTERNAL_QUERY verwenden, um information_schema-Ansichten abzufragen und auf Datenbankmetadaten zuzugreifen. Im folgenden Beispiel werden Informationen zu den Spalten in der Tabelle MyTable zurückgegeben:
Google SQL-Datenbank
SELECT * FROM EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT t.column_name, t.spanner_type, t.is_nullable FROM information_schema.columns AS t WHERE t.table_catalog = '' AND t.table_schema = '' AND t.table_name = 'MyTable' ORDER BY t.ordinal_position ''');
PostgreSQL-Datenbank
SELECT * from EXTERNAL_QUERY( 'my-project.us.postgresql-example-db', '''SELECT t.column_name, t.data_type, t.is_nullable FROM information_schema.columns AS t WHERE t.table_schema = 'public' AND t.table_name = 'MyTable' ORDER BY t.ordinal_position''');
Weitere Informationen finden Sie in den folgenden Referenzschemas für Informationen in der Spanner-Dokumentation:
Preise
- Auf BigQuery-Seite gelten die Standardpreise für föderierte Abfragen.
- Auf der Spanner-Seite unterliegen Abfragen den Spanner-Preisen.
Regionsübergreifende Abfragen
BigQuery unterstützt föderierte Abfragen, bei denen sich Spanner-Instanzen und BigQuery-Datasets in verschiedenen Regionen befinden. Für diese Abfragen fallen zusätzliche Gebühren für die Spanner-Datenübertragung an. Weitere Informationen finden Sie unter Spanner-Preise.
Die Datenübertragung wird Ihnen auf Grundlage der folgenden SKUs in Rechnung gestellt:
- Netzwerk – Intraregionale, zonenübergreifende ausgehende Datenübertragung
- Ausgehende interregionale Netzwerkdatenübertragung innerhalb desselben Kontinents
- Ausgehende interregionale Netzwerk-Datenübertragung zu einem anderen Kontinent
Die Datenübertragung wird basierend auf der BigQuery-Region, in der Sie die Abfrage ausführen, und der nächstgelegenen Spanner-Region mit Lese-/Schreib- oder Lesezugriff-Replikaten berechnet.
Bei multiregionalen BigQuery-Konfigurationen (US oder EU) werden die Kosten für die Datenübertragung von Spanner so ermittelt:
- Multiregionaler BigQuery-Standort
US: Spanner-Regionus-central1 - Multiregionaler BigQuery-Standort
EU: Spanner-Regioneurope-west1
Beispiel:
- BigQuery (
US-Multiregion) und Spanner (us-central1): Für die Datenübertragung innerhalb derselben Region fallen Kosten an. - BigQuery (
US, multiregional) und Spanner (us-west4): Für die Datenübertragung zwischen Regionen auf demselben Kontinent fallen Kosten an.
Fehlerbehebung
Dieser Abschnitt hilft Ihnen beim Beheben von Problemen, die beim Senden einer föderierten Abfrage an Spanner auftreten können.
- Problem: Abfrage kann nicht partitioniert werden.
- Lösung: Wenn Sie die Verbindung so konfigurieren, dass Daten parallel gelesen werden, muss entweder der erste Operator im Abfrageausführungsplan eine verteilte Union sein oder Ihr Ausführungsplan muss haben keine Distributed Unions. Rufen Sie den Abfrageausführungsplan auf und schreiben Sie die Abfrage neu, um diesen Fehler zu beheben. Weitere Informationen finden Sie unter So werden Abfragen von Spanner ausgeführt.
- Problem: Frist überschritten.
- Lösung: Wählen Sie die Option zum parallelen Lesen von Daten aus und schreiben Sie die Abfrage so, dass sie als Root-Partition möglich ist. Weitere Informationen finden Sie unter So werden Abfragen von Spanner ausgeführt.