Föderierte Spanner-Abfragen
Als Datenanalyst können Sie Daten in Spanner mithilfe von föderierten Abfragen über BigQuery abfragen.
Mit der Föderation von BigQuery Spanner kann BigQuery Daten in Spanner in Echtzeit abfragen, ohne Daten kopieren oder verschieben zu müssen.
Sie haben zwei Möglichkeiten, Spanner-Daten abzufragen:
- Erstellen Sie ein externes Spanner-Dataset.
- Verwenden Sie eine
EXTERNAL_QUERY
-Funktion.
Externe Datasets verwenden
Die einfachste Möglichkeit, Spanner-Tabellen abzufragen, ist das Erstellen eines externen Datensatzes. 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 einen externen Datensatz erstellen, müssen Sie keine Verbindung zum Abfragen von Spanner-Daten erstellen.
EXTERNAL_QUERY
-Funktion verwenden
Wie bei anderen föderierten Datenbanken können Sie auch Spanner-Daten mit einer EXTERNAL_QUERY
-Funktion abfragen. Das kann nützlich sein, wenn Sie eine Spanner-Datenbank abfragen möchten, die den PostgreSQL-Dialekt verwendet, oder mehr Kontrolle über die Verbindungsparameter haben möchten.
Hinweise
- 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 Rolle „BigQuery Connection-Nutzer“ (
roles/bigquery.connectionUser
) Identity and Access Management (IAM) zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Abfragen einer Spanner-Instanz benötigen. Außerdem müssen Sie Ihren Administrator bitten, Ihnen eine der folgenden Berechtigungen zu gewähren:- Wenn Sie einen detaillierten Nutzer für die Zugriffssteuerung verwenden, benötigen Sie Zugriff auf eine Datenbankrolle mit der Berechtigung
SELECT
für alle Spanner-Schemaobjekte in Ihren Abfragen. - Wenn Sie kein Nutzer der detaillierten Zugriffssteuerung sind, benötigen Sie die IAM-Rolle „Cloud Spanner-Datenbank-Leser“ (
roles/spanner.databaseReader
).
Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten. Informationen zur detaillierten Zugriffssteuerung finden Sie unter Detaillierte Zugriffssteuerung.
- Wenn Sie einen detaillierten Nutzer für die Zugriffssteuerung verwenden, benötigen Sie Zugriff auf eine Datenbankrolle mit der Berechtigung
Die richtige Verbindung auswählen
Wenn Sie ein Nutzer der detaillierten Spanner-Zugriffssteuerung sind, müssen Sie beim Ausführen einer föderierten Abfrage mit einer EXTERNAL_QUERY
-Funktion eine Spanner-Verbindung verwenden, die eine Datenbankrolle angibt. Anschließend verwenden alle Abfragen, die Sie mit dieser Verbindung ausführen, diese Datenbankrolle.
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;
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 nahezu ohne 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 wirkungsvollsten, 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.
Hinweise
Um die Berechtigung zu erhalten, die Sie für den Zugriff auf Data Boost benötigen, bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Spanner Database Reader with DataBoost (roles/spanner.databaseReaderWithDataBoost
) für die Spanner-Datenbank zu gewähren.
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.
Data Boost aktivieren
Bei der Verwendung externer Datensätze wird Data Boost immer verwendet und muss nicht manuell aktiviert werden.
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 finden Sie unter Daten parallel lesen in der Spanner-Dokumentation.
Diese Option ist jedoch auf Abfragen beschränkt, die eine der folgenden Bedingungen erfüllen:
Der erste Operator im Ausführungsplan ist der Operator Distributed Union.
Der Ausführungsplan enthält keinen Operator Distributed Union.
Andere Abfragen geben einen Fehler zurück. 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 Datensätzen 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 diese Option 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 Datensätzen 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 und ihre Schemas zu sehen.
Sie können die Schemas aber auch sehen, ohne externe Datenpools zu definieren. Mit der Funktion EXTERNAL_QUERY
können Sie auch Information_Schema-Ansichten abfragen, um 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
- In BigQuery gelten die standardmäßigen Preise für föderierte Abfragen.
- Auf Spanner-Seite unterliegen Abfragen den Spanner-Preisen.
- Preise können sich ändern, wenn die Vorabversion in die allgemeine Verfügbarkeit übergeht
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.