Föderierte Cloud SQL-Abfragen

Auf dieser Seite wird erläutert, wie Sie Daten in BigQuery und Cloud SQL mit einer föderierten Abfrage abfragen.

Übersicht

Daten sind oft an vielen Orten verstreut. Möglicherweise speichern Sie eine Kundentabelle in BigQuery und eine Verkaufstabelle in Cloud SQL und möchten die beiden Tabellen in einer einzigen Abfrage verknüpfen.

Mit der Föderation von BigQuery und Cloud SQL kann BigQuery Daten in Cloud SQL in Echtzeit abfragen, ohne Daten kopieren oder verschieben zu müssen. Sie unterstützt sowohl MySQL- (2. Generation) als auch PostgreSQL-Instanzen in Cloud SQL.

Nach der ersten einmaligen Einrichtung können Sie eine Abfrage mit der neuen SQL-Funktion EXTERNAL_QUERY() schreiben.

Workflow

Syntax für föderierte Abfragen

Mit der föderierten Abfrage wird eine neue Funktion eingeführt: EXTERNAL_QUERY.

Syntax

SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query);
  • connection_id (String): Der Name der Datenbankverbindungsressource, die Sie in der Web-UI, Befehlszeile oder API erstellen.

    Beispiel für Verbindungs-ID: bigquery-federation-test.us.test-mysql

  • external_database_query (String): Eine schreibgeschützte Abfrage im SQL-Dialekt der externen Datenbank (MySQL oder PostgreSQL). Die Abfrage wird in der externen Datenbank in Cloud SQL ausgeführt.

Beschreibung

EXTERNAL_QUERY führt die Abfrage in Cloud SQL aus und gibt die Ergebnisse als temporäre Tabelle zurück. Der Datentyp der Quelldatenbank (MySQL oder PostgreSQL) wird in der temporären Ergebnistabelle mit der folgenden Datentypzuordnung in den BigQuery-Datentyp konvertiert. Die Funktion EXTERNAL_QUERY wird normalerweise in einer FROM-Klausel verwendet. Diese Funktion ist nur in BigQuery-Standard-SQL verfügbar.

Rückgabetyp

Eine BigQuery-Tabelle.

Beispielabfrage

Nehmen wir an, Sie benötigen das Datum der ersten Bestellung jedes Ihrer Kunden, um es in den Bericht aufzunehmen, den wir in der Übersicht erwähnt haben. Diese Daten befinden sich derzeit nicht in BigQuery, sind jedoch in Ihrer operativen PostgreSQL-Datenbank in Cloud SQL verfügbar. Das folgende Beispiel für föderierte Abfragen ruft diese Daten ab.

SELECT c.customer_id, c.name, SUM(t.amount) AS total_revenue,
rq.first_order_date
FROM customers AS c
INNER JOIN transaction_fact AS t ON c.customer_id = t.customer_id
LEFT OUTER JOIN EXTERNAL_QUERY(
  'connection_id',
  '''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;

Die Beispielabfrage besteht aus 3 Teilen:

  1. Die externe Abfrage SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id wird in der operativen PostgreSQL-Datenbank ausgeführt, um das erste Bestelldatum für jeden Kunden über die Funktion EXTERNAL_QUERY() abzurufen.
  2. Die Ergebnistabelle der externen Abfrage wird mit der Kundentabelle in BigQuery nach customer_id verknüpft.
  3. Die Kundendaten und das Datum der ersten Bestellung werden ausgewählt.

Reihenfolge wird nicht beibehalten

EXTERNAL_QUERY() berücksichtigt nicht die Reihenfolge im Ergebnis externer Abfragen, selbst wenn die externe Abfrage ORDER BY enthält. Die folgende Beispielabfrage sortiert Zeilen in Cloud SQL zwar nach der Kunden-ID, BigQuery gibt die Ergebniszeilen jedoch nicht in dieser Reihenfolge aus.

SELECT * EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM customers AS c ORDER BY c.customer_id'');

Vorbereitung

BigQuery-Verbindungsdienst aktivieren

  • Öffnen Sie in der API-Bibliothek die Seite BigQuery Connection API.
  • Wählen Sie im Drop-down-Menü das Projekt aus, das Ihre Cloud SQL-Instanz enthält.
  • Klicken Sie auf die Schaltfläche AKTIVIEREN.

Dienstkonto

BigQuery verwendet ein Dienstkonto, um eine Verbindung zu Ihrer Cloud SQL-Instanz herzustellen. Wenn Sie die BigQuery Connection API aktivieren, wird automatisch ein von Google Cloud verwaltetes Cloud IAM-Dienstkonto in Ihrem Namen erstellt. Das Dienstkonto hat die folgenden Rollen:

Rolle Beschreibung
cloudsql.client Verbindung mit einer Cloud SQL-Instanz herstellen
logging.logWriter In Stackdriver Logging schreiben
metrics.metricWriter In Stackdriver Monitoring schreiben

Berechtigungen

  • Der Nutzer muss die vordefinierte IAM-Rolle bigquery.admin haben, um eine Verbindungsressource zu erstellen und zu verwalten.

  • Die Rolle bigquery.admin umfasst die folgenden Berechtigungen für den BigQuery-Verbindungsdienst:

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete

Damit ein anderer Nutzer die Verbindungsressource für Cloud SQL-Abfragen verwenden kann, müssen Sie diesem entsprechende Berechtigungen erteilen.

bigquery.admin-Zugriff gewähren

So weisen Sie die Rolle bigquery.admin zu:

Console

  1. Öffnen Sie die Cloud IAM-Seite in der Cloud Console.

    Zur Seite "IAM"

  2. Klicken Sie auf Select a project (Projekt auswählen).

  3. Wählen Sie ein Projekt aus und klicken Sie auf Open (Öffnen).

  4. Klicken Sie auf Add (Hinzufügen), um dem Projekt neue Mitglieder hinzuzufügen, und legen Sie dann ihre Berechtigungen fest.

  5. Gehen Sie im Dialogfeld Add members (Mitglieder hinzufügen) so vor:

    • Geben Sie unter Members (Mitglieder) die E-Mail-Adresse des Nutzers oder der Gruppe ein.
    • Klicken Sie im Drop-down-Menü Select a role (Rolle wählen) auf BigQuery > BigQuery Admin (BigQuery > BigQuery-Administrator).
    • Klicken Sie auf Add (Hinzufügen).

      Administratorrolle gewähren

Befehlszeile

Sie können das gcloud-Befehlszeilentool verwenden, um einem Nutzer oder einer Gruppe die Rolle bigquery.admin zu gewähren.

Geben Sie den folgenden Befehl ein, um der Cloud IAM-Richtlinie Ihres Projekts eine einzelne Bindung hinzuzufügen. Wenn Sie einen Nutzer hinzufügen möchten, geben Sie das Flag --member im Format user:user@example.com an. Wenn Sie eine Gruppe hinzufügen möchten, geben Sie das Flag --member im Format group:group@example.com an.

gcloud projects add-iam-policy-binding project_id \
--member group/user:address \
--role roles/bigquery.admin

Dabei gilt:

  • project_id ist Ihre Projekt-ID.
  • group/user ist entweder group oder user.
  • address ist die E-Mail-Adresse des Nutzers oder der Gruppe.

Beispiel:

gcloud projects add-iam-policy-binding myproject \
--member group:group@example.com \
--role roles/bigquery.admin

Der Befehl gibt die aktualisierte Richtlinie aus:

    bindings:
    - members:
      - group:group@example.com
        role: roles/bigquery.admin
    

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

Öffentliche IP-Adresse

Die Föderation von BigQuery und Cloud SQL unterstützt nur Cloud SQL-Instanzen mit einer öffentlichen IP-Verbindung. Konfigurieren Sie die öffentliche IP-Verbindung für Ihre Cloud SQL-Instanz.

Cloud SQL-Datenbankverbindungen einrichten

Erstellen Sie zuerst eine Datenbankverbindungsressource pro Datenbank in BigQuery und verweisen Sie dann in der föderierten Abfrage auf diese Verbindungsressource. So vermeiden Sie, dass in einer föderierten Abfrage Datenbankanmeldedaten als Klartext enthalten sind.

Die Verbindungsressource verfügt über eine Reihe von IAM-Berechtigungen, die Sie anderen Nutzern erteilen können. Die Verbindungsressource wird verschlüsselt und sicher im BigQuery-Verbindungsdienst gespeichert. Sie kann nur für föderierte Abfragen verwendet werden.

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

Verbindungsressource erstellen

Console

  1. Rufen Sie zum Erstellen einer Verbindungsressource die BigQuery-Web-UI in der Cloud Console auf.

    Zur Cloud Console

  2. Wählen Sie aus dem Menü +ADD DATA (DATEN HINZUFÜGEN) die Option Create connection (Verbindung erstellen) aus.

    Verbindungsressource erstellen

  3. Im Bereich Create connection (Verbindung erstellen):

    • Wählen Sie als Connection Type (Verbindungstyp) MySQL oder PostgreSQL aus.
    • Geben Sie als Connection ID (Verbindungs-ID) eine Kennzeichnung für die Verbindungsressource ein. Buchstaben, Ziffern und Unterstriche sind zulässig.
    • Wählen Sie als Connection Location (Verbindungsstandort) den Standort der Cloud SQL-Instanz mit den folgenden Ausnahmen aus: Wählen Sie für eine Cloud SQL-Instanz in der Region "us-central1" den Standort "US" und in der Region "europe-west1" den Standort "EU" aus.
    • Optional: Geben Sie unter Friendly name (Anzeigename) einen nutzerfreundlichen Namen für die Verbindung ein, z. B. My connection resource. Der Anzeigename kann ein beliebiger Wert sein, mit dem Sie die Verbindungsressource leicht identifizieren können, wenn Sie sie später ändern müssen.
    • Optional: Geben Sie unter Description (Beschreibung) eine Beschreibung für diese Verbindungsressource ein.
    • Geben Sie als Cloud SQL Instance ID (ID für Cloud SQL-Instanz) den vollständigen Namen der Cloud SQL-Instanz ein, in der Regel im Format project-id:location-id:instance-id. Sie finden die Instanz-ID auf der Detailseite der Cloud SQL-Instanz, die Sie abfragen möchten.
    • Geben Sie unter Database name (Datenbankname) den Namen der Datenbank ein.
    • Geben Sie unter Username (Nutzername) den Nutzernamen für die Datenbank ein.
    • Geben Sie unter Password (Passwort) das Passwort für die Datenbank ein.

      • Optional: Klicken Sie auf das Kästchen Show password (Passwort anzeigen), um das Passwort zu sehen.

      Neue Verbindungsressource

  4. Klicken Sie auf Create connection (Verbindung erstellen).

BEFEHLSZEILE

Geben Sie den Befehl bq mk ein und geben Sie das Verbindungs-Flag --connection an. Die folgenden Flags sind ebenfalls erforderlich:

  • --connection_type
  • --properties
  • --connection_credential
  • --project_id
  • --location
  • (Name der Verbindung)

    bq mk --connection --connection_type='CLOUD_SQL' --properties=[PROPERTIES] --connection_credential=[CREDENTIALS] --project_id=[PROJECT_ID] --location=[LOCATION] new_connection
    

Dabei gilt:

  • --connection_type ist immer CLOUD_SQL.
  • --properties enthält die Parameter für die erstellte Verbindung im JSON-Format. Beispiel: --properties='{"param":"param_value"}'. Zum Erstellen einer Verbindungsressource müssen Sie die Parameter instanceID, database und type angeben. Die Parameter friendly_name und description sind optional.
  • --connection_credential muss die Parameter username und password enthalten.
  • --project_id ist die Projekt-ID.
  • --location ist die Region, in der sich Ihre Cloud SQL-Instanz befindet.
  • Geben Sie einen Namen ein, um die Verbindung zu identifizieren. Verwenden Sie nur Buchstaben, Ziffern und Unterstriche.

Mit dem folgenden Befehl wird beispielsweise eine neue Verbindungsressource mit dem Namen "my_new_connection" (Anzeigename: "My new connection") in einem Projekt mit der ID federation-test erstellt.

bq mk --connection --connection_type='CLOUD_SQL' --properties='{"instanceId":"federation-test:us-central1:mytestsql","database":"mydatabase","type":"MYSQL"}' --connection_credential='{"username":"myusername", "password":"mypassword"}' --project_id=federation-test --location=us my_new_connection

API

Verwenden Sie die Methode projects.locations.transferConfigs.create und geben Sie eine Instanz der Ressource TransferConfig an.

Verbindungsressourcen ansehen

Console

  1. Rufen Sie die BigQuery-Web-UI auf, um sich den Status Ihrer Verbindungsressourcen anzusehen.

    Zur BigQuery-Web-UI

  2. Verbindungsressourcen werden auf der obersten Ebene unter Ihrem Projekt in der Gruppe External connections (Externe Verbindungen) aufgeführt.

  3. Klicken Sie auf eine Verbindung, um sich Informationen zu dieser Verbindungsressource anzusehen, z. B. connection ID und Cloud SQL instance ID.

    Verbindungsressourcen ansehen

BEFEHLSZEILE

Geben Sie den Befehl bq show ein und geben Sie das Verbindungs-Flag --connection an. Die vollständig qualifizierte connection_id ist erforderlich.

    bq show --connection project.location.connection_id

Mit dem folgenden Befehl wird beispielsweise eine neue Verbindungsressource mit dem Namen my_new_connection in einem Projekt mit der ID federation-test in der Region us erstellt.

    bq show --connection federation-test:us.my_new_connection

API

Verwenden Sie die Methode projects.locations.connections.list und geben Sie eine Instanz der Ressource list an. Weitere Informationen finden Sie in der Dokumentation zur REST API.

Einem anderen Nutzer Berechtigungen erteilen

Damit ein anderer Nutzer die Verbindungsressource für föderierte Cloud SQL-Abfragen verwenden kann, muss der bigquery.admin-Nutzer diesem die folgende Rolle in IAM zuweisen: BigQuery Connection User. Diese IAM-Rolle umfasst die folgenden Berechtigungen:

  • bigquery.connections.get
  • bigquery.connections.list
  • bigquery.connections.use
  • bigquery.connections.getIamPolicy

Der bigquery.admin-Nutzer kann anderen Nutzern auch eine andere Rolle mit dem Namen BigQuery Connection Admin zuweisen. Sie enthält dieselben Berechtigungen wie BigQuery Connection User sowie zusätzliche Berechtigungen zum Erstellen, Aktualisieren und Löschen vorhandener Verbindungen sowie zum Festlegen von IAM-Richtlinien für Verbindungen.

  • bigquery.connections.create
  • bigquery.connections.update
  • bigquery.connections.setIamPolicy
  • bigquery.connections.delete

Preise

Bei der Abfrage von Cloud SQL über BigQuery wird Ihnen die Anzahl der von der Abfrage gelesenen Byte berechnet. Weitere Informationen finden Sie unter Abfragepreise. Für föderierte Cloud SQL-Abfragen fallen während der Betaphase keine zusätzlichen Gebühren an und es gelten keine Kontingentbeschränkungen.

Referenz

Cloud SQL-Tabellenschema ansehen

Mit der Funktion EXTERNAL_QUERY() können Sie information_schema-Tabellen abfragen, um auf Datenbankmetadaten zuzugreifen, z. B. um eine Liste aller Tabellen in der Datenbank oder das Tabellenschema abzurufen. Die folgenden information_schema-Beispielabfragen funktionieren sowohl in MySQL als auch in PostgreSQL. Weitere Informationen finden Sie in den Artikeln zu information_schema-Tabellen in MySQL bzw. information_schema-Tabellen in PostgreSQL.

// List all tables in a database
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.tables;");
// List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.columns where table_name='x';");

Details zur Verbindungsressource

Name des Attributs Wert Beschreibung
name String Name der Verbindungsressource im Format project_id.location_id.connection_id.
location String Standort der Verbindung. Er entspricht dem Standort der Cloud SQL-Instanz mit den folgenden Ausnahmen: Cloud SQL us-central1 wird BigQuery US zugeordnet, Cloud SQL europe-west1 wird BigQuery EU zugeordnet.
friendlyName String Ein nutzerfreundlicher Anzeigename für die Verbindung.
description String Beschreibung der Verbindung.
cloudSql.type String Kann "POSTGRES" oder "MYSQL" sein.
cloudSql.instanceId String Name der Cloud SQL-Instanz, in der Regel im folgenden Format:

Project-id:location-id:instance-id

Sie finden die Instanz-ID auf der Detailseite der Cloud SQL-Instanz.
cloudSql.database String Die Cloud SQL-Datenbank, zu der Sie eine Verbindung herstellen möchten.

Details zu Anmeldedaten für die Verbindungsressource

Name des Attributs Wert Beschreibung
username String Nutzername der Datenbank.
password String Passwort der Datenbank.

Datentypzuordnungen

Wenn Sie eine föderierte Cloud SQL-Abfrage ausführen, werden die Daten aus Cloud SQL (als MySQL- oder PostgreSQL-Datentypen) in BigQuery-Standard-SQL-Typen konvertiert. Nachfolgend sind die Datentypzuordnungen von MySQL zu BigQuery und von PostgreSQL zu BigQuery aufgeführt.

Wissenswertes über Zuordnungen:

  • Die meisten MySQL-Datentypen können mit einigen Ausnahmen wie etwa decimal, timestamp und time demselben BigQuery-Datentyp zugeordnet werden.
  • PostgreSQL unterstützt viele nicht standardmäßige Datentypen, die in BigQuery nicht unterstützt werden, zum Beispiel money, path, uuid, boxer und andere.
  • Der numerische Wertebereich ist in BigQuery kleiner als in MySQL und PostgreSQL.

Fehlerbehandlung

Wenn Ihre externe Abfrage einen Datentyp enthält, der in BigQuery nicht unterstützt wird, schlägt die Abfrage sofort fehl. Sie können den nicht unterstützten Datentyp in einen anderen unterstützten MySQL/PostgreSQL-Datentyp umwandeln. Weitere Informationen zum Umwandeln finden Sie unter Nicht unterstützte Datentypen im Abschnitt Fehlerbehebung.

Typzuordnung von MySQL zu BigQuery

MySQL-Typ MySQL-Beschreibung BigQuery-Typ Unterschied zwischen Typen
Ganzzahl
INT 4 Byte, 2^32 - 1 INT64
TINYINT 1 Byte, 2^8 - 1 INT64
SMALLINT 2 Byte, 2^16 - 1 INT64
MEDIUMINT 3 Byte, 2^24 - 1 INT64
BIGINT 8 Byte, 2^64 - 1 INT64
UNSIGNED BIGINT 8 Byte, 2^64 - 1 NUMERIC
Genaue numerische Werte
DECIMAL (M,D) Eine Dezimalzahl wird durch (M,D) dargestellt, wobei M die Gesamtzahl der Stellen und D die Anzahl der Dezimalstellen ist. M <= 65 NUMERIC
Der NUMERIC-Bereich in BigQuery ist kleiner und unterstützt maximal 38 Stellen insgesamt inklusive 9 Dezimalstellen.
Ungefähre numerische Werte
FLOAT (M,D) 4 Byte, M <= 23 FLOAT64
DOUBLE (M,D) 8 Byte, M <= 53 FLOAT64
Datum und Uhrzeit
TIMESTAMP "1970-01-01 00:00:01" UTC bis "2038-01-19 03:14:07" UTC TIMESTAMP MySQL TIMESTAMP wird als UTC-Zeitzone abgerufen, unabhängig davon, wo der Nutzer BigQuery aufruft.
DATETIME "1000-01-01 00:00:00" bis "9999-12-31 23:59:59" DATETIME
DATE "1000-01-01" bis "9999-12-31" DATE
TIME Uhrzeit im Format "HH:MM:SS"
"-838:59:59" bis "838:59:59"
TIME
Der TIME-Bereich in BigQuery ist kleiner, von 00:00:00 bis 23:59:59
YEAR INT64
Zeichen und Strings
ENUM Stringobjekt mit einem Wert aus einer Liste zulässiger Werte STRING
CHAR (M) Ein String mit fester Länge zwischen 1 und 255 Zeichen STRING
VARCHAR (M) Ein String mit variabler Länge zwischen 1 und 255 Zeichen STRING
TEXT Ein Feld mit einer maximalen Länge von 65.535 Zeichen STRING
TINYTEXT TEXT-Spalte mit einer maximalen Länge von 255 Zeichen STRING
MEDIUMTEXT TEXT-Spalte mit einer maximalen Länge von 16.777.215 Zeichen STRING
LONGTEXT TEXT-Spalte mit einer maximalen Länge von 4.294.967.295 Zeichen STRING
Binär
BLOB Ein Binary Large Object mit einer maximalen Länge von 65.535 Zeichen BYTE
MEDIUM_BLOB Ein BLOB mit einer maximalen Länge von 16.777.215 Zeichen BYTE
LONG_BLOB Ein BLOB mit einer maximalen Länge von 4.294.967.295 Zeichen BYTE
TINY_BLOB Ein BLOB mit einer maximalen Länge von 255 Zeichen BYTE
Andere
SET Geben Sie beim Deklarieren der SET-Spalte einige Werte vor. Fügen Sie dann einen beliebigen Satz vordefinierter Werte in diese Spalte ein. STRING
GEOMETRY GEOMETRY NOCH NICHT UNTERSTÜTZT
BIT INT64 NOCH NICHT UNTERSTÜTZT

Typzuordnung von PostgreSQL zu BigQuery

Name Beschreibung BigQuery-Typ Unterschied zwischen Typen
Ganzzahl
smallint 2 Byte, -32.768 bis +32.767 INT64
smallserial Siehe smallint INT64
integer 4 Byte, -2.147.483.648 bis +2.147.483.647 INT64
serial Siehe integer INT64
bigint 8 Byte, -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 INT64
bigserial Siehe bigint INT64
Genaue numerische Werte
numeric [ (p, s) ] Bis zu 1.000 Stellen NUMERIC Der NUMERIC-Bereich in BigQuery ist kleiner und unterstützt lediglich 38 Ganzzahlstellen und 9 Dezimalstellen.
Decimal [ (p, s) ] Siehe numeric NUMERIC Siehe numeric
money 8 Byte, zwei Dezimalstellen, -92.233.720.368.547.758,08 bis +92.233.720.368.547.758,07 NICHT UNTERSTÜTZT
Ungefähre numerische Werte
real 4 Byte, Gleitkommazahl mit einfacher Genauigkeit FLOAT64
double precision 8 Byte, Gleitkommazahl mit doppelter Genauigkeit FLOAT64
Datum und Uhrzeit
date Kalenderdatum (Jahr, Monat, Tag) DATE
time [ (p) ] [ ohne Zeitzone ] Uhrzeit (ohne Zeitzone) TIME
time [ (p) ] mit Zeitzone Uhrzeit, mit Zeitzone NICHT UNTERSTÜTZT
timestamp [ (p) ] [ ohne Zeitzone ] Datum und Uhrzeit (ohne Zeitzone) DATETIME
timestamp [ (p) ] mit Zeitzone Datum und Uhrzeit, mit Zeitzone TIMESTAMP PostgreSQL TIMESTAMP wird als UTC-Zeitzone abgerufen, unabhängig davon, von wo aus der Nutzer BigQuery aufruft.
interval Eine Zeitdauer NICHT UNTERSTÜTZT
Zeichen und Strings
character [ (n) ] Zeichenstring mit fester Länge STRING
character varying [ (n) ] Zeichenstring mit variabler Länge STRING
text Zeichenstring mit variabler Länge STRING
Binär
bytea Binärdaten ("Bytearray") BYTES
bit [ (n) ] Bitfolge mit fester Länge BYTES
bit varying [ (n) ] Bitfolge mit variabler Länge BYTES
Andere
boolean logischer boolescher Wert (true/false) BOOL
inet IPv4- oder IPv6-Hostadresse NICHT UNTERSTÜTZT
path geometrischer Pfad auf einer Ebene NICHT UNTERSTÜTZT
pg_lsn PostgreSQL-Logsequenznummer NICHT UNTERSTÜTZT
point geometrischer Punkt auf einer Ebene NICHT UNTERSTÜTZT
polygon geschlossener geometrischer Pfad auf einer Ebene NICHT UNTERSTÜTZT
tsquery Textsuchabfrage NICHT UNTERSTÜTZT
tsvector Textsuchdokument NICHT UNTERSTÜTZT
txid_snapshot Snapshot der Transaktions-ID auf Nutzerebene NICHT UNTERSTÜTZT
uuid universell eindeutige Kennzeichnung NICHT UNTERSTÜTZT
xml XML-Daten STRING
box rechteckiges Feld auf einer Ebene NICHT UNTERSTÜTZT
cidr IPv4- oder IPv6-Netzwerkadresse NICHT UNTERSTÜTZT
circle Kreis auf einer Ebene NICHT UNTERSTÜTZT
interval [ Felder ] [ (p) ] Zeitspanne NICHT UNTERSTÜTZT
json JSON-Textdaten STRING
jsonb JSON-Binärdaten, zerlegt NICHT UNTERSTÜTZT
line unendliche Linie auf einer Ebene NICHT UNTERSTÜTZT
lseg Liniensegment auf einer Ebene NICHT UNTERSTÜTZT
macaddr MAC-Adresse (Media Access Control) NICHT UNTERSTÜTZT
macaddr8 MAC-Adresse (Media Access Control) (EUI-64-Format) NICHT UNTERSTÜTZT

Bekannte Probleme und Beschränkungen

Regionen

Föderierte Cloud SQL-Abfragen werden nur in Regionen unterstützt, die sowohl Cloud SQL als auch BigQuery unterstützen. (Föderierte Abfragen werden in allen BigQuery-Regionen unterstützt, jedoch nicht in allen Cloud SQL-Regionen.)

Sie können eine föderierte Abfrage über Regionen hinweg nach den folgenden Regeln ausführen.

Multiregionen

Eine BigQuery-Multiregion kann jede Cloud SQL-Region am selben Standort (USA, EU) abfragen. Beispiel:

  • Die BigQuery-Multiregion US kann Cloud SQL us-central1, us-east4, us-west2 usw. abfragen.
  • Die BigQuery-Multiregion EU kann Cloud SQL europe-north1, europe-west2 usw. abfragen.

Einzelne Regionen

Eine einzelne BigQuery-Region kann nur Cloud SQL in derselben Region abfragen. Beispiel:

  • BigQuery us-east4 kann nur Cloud SQL us-east4 abfragen.

Cloud SQL wird in mehr Regionen als BigQuery unterstützt. Der folgenden Übersicht können Sie für das jeweilige Produkt genau entnehmen, welche Regionen unterstützt werden.

Cloud SQL-Region BigQuery-Multiregion/Region
northamerica-northeast1 US/Northamerica-northeast1
us-central NICHT UNTERSTÜTZT: Diese Region enthält eine Cloud SQL-V1-Instanz.
Föderierte Abfragen werden nur mit der V2-Instanz unterstützt.
us-central1 US
us-east1 US/us-east1
us-east4 US/us-east4
us-west1 NICHT UNTERSTÜTZT
us-west2 US/us-west2
southamerica-east1 southamerica-east1
europe-north1 EU/europe-north1
europe-west1 EU
europe-west2 EU/europe-west2
europe-west3 NICHT UNTERSTÜTZT
europe-west4 NICHT UNTERSTÜTZT
europe-west6 EU/europe-west6
asia-east1 asia-east1
asia-east2 asia-east2
asia-northeast1 asia-northeast1
asia-south1 asia-south1
asia-southeast1 asia-southeast1
australia-southeast1 australia-southeast1

Kontingente und andere Limits

  • Leistung: Eine föderierte Abfrage ist höchstwahrscheinlich nicht so schnell wie das einfache Abfragen des BigQuery-Speichers. BigQuery muss warten, bis die Quelldatenbank die externe Abfrage ausführt und Daten vorübergehend von Cloud SQL nach BigQuery verschiebt. Quelldatenbanken wie MySQL oder PostgreSQL sind normalerweise nicht für komplexe analytische Abfragen optimiert.
  • Kontingent: Nutzer sollten ihr Abfragekontingent in Cloud SQL überprüfen. Es gibt keine zusätzliche Kontingenteinstellung für föderierte Abfragen. Wenn Sie eine Isolation von Arbeitslasten erreichen möchten, wird empfohlen, nur ein Lesereplikat der Datenbank abzufragen.
  • Zulässige maximale Menge abgerechneter Byte: Dieses Feld wird derzeit nicht für föderierte Abfragen unterstützt. Die Berechnung der abgerechneten Byte vor der tatsächlichen Ausführung der föderierten Abfragen ist derzeit nicht möglich.
  • Eingeschränkte Cloud SQL-Instanzen: Föderierte Abfragen werden nur von der Cloud SQL-V2-Instanz mit öffentlicher IP-Adresse (im Gegensatz zu privaten IP-Adressen) unterstützt.
  • Es gelten die Cloud SQL MySQL- und PostgreSQL-Kontingente und -Limits.
  • Anzahl der Verbindungen: Eine föderierte Abfrage kann höchstens 10 eindeutige Verbindungen haben.

Fehlerbehebung

Dieser Abschnitt soll Ihnen helfen, die häufigsten Probleme beim Einrichten einer Verbindung zu beheben. Es werden jedoch nicht alle möglichen Fehlermeldungen oder Probleme darin behandelt.

Allgemeine Probleme

Prüfen Sie zum Diagnostizieren allgemeiner Verbindungsfehler Folgendes:

  • Sie haben alle Schritte im Abschnitt "Vorbereitung" oder "Hinweise" der Dokumentationsseite für Ihre Verbindung ausgeführt.
  • Die Attribute der Verbindungskonfiguration sind korrekt.

Wenn Ihre Verbindungskonfiguration korrekt ist und die entsprechenden Berechtigungen gewährt wurden, finden Sie im Folgenden Lösungen für häufig auftretende Probleme.

Problem: BigQuery und Cloud SQL haben nicht den gleichen Standort.
Lösung: Föderierte Cloud SQL-Abfragen werden nur in Regionen unterstützt, die sowohl Cloud SQL als auch BigQuery unterstützen. Das BigQuery-Dataset und die Cloud SQL-Instanz müssen sich in derselben Region befinden. Wenn sich das Dataset an einem Standort mit mehreren Regionen befindet, z. B. US und EU, müssen beide denselben Standort haben. Weitere Informationen zu Regionen finden Sie unter Bekannte Probleme und Beschränkungen.
Problem: Die Geschwindigkeit ist langsamer als erwartet.
Lösung: Die Geschwindigkeit von föderierten Abfragen ist nicht so hoch wie die Abfrage von in BigQuery gespeicherten Daten. Dies liegt daran, dass bei föderierten Abfragen Cloud SQL extern abgefragt wird, die Daten an eine temporäre BigQuery-Tabelle zurückgegeben sowie den BigQuery-Datentypen zugeordnet werden und die Abfrage dann in BigQuery ausgeführt wird. Obwohl die Abfrage nicht so leistungsfähig ist, hat sie den Vorteil, dass die Daten nicht kopiert, verschoben oder noch einmal gespeichert werden müssen.
Problem: Wie formatiere ich den Verbindungsnamen?
Lösung: Der Verbindungsname sollte das Projekt, den Standort und die Verbindungs-ID enthalten. Der Verbindungsname sollte diesem Muster entsprechen: project_id.location_id.connection_id. Beispiel: federation-test.us.my_new_connection

Nicht unterstützte Datentypen

Wenn Ihre externe Abfrage einen Datentyp enthält, der in BigQuery nicht unterstützt wird, schlägt die Abfrage sofort fehl. Sie können den nicht unterstützten Datentyp in einen anderen unterstützten MySQL/PostgreSQL-Datentyp umwandeln.

  • Nicht unterstützter MySQL-Datentyp

    • Fehlermeldung: Invalid table-valued function external_query Found unsupported MySQL type in BigQuery. at [1:15]
    • Nicht unterstützter Typ: GEOMETRY, BIT
    • Lösung: Wandeln Sie den nicht unterstützten Datentyp in STRING um.
    • Beispiel: SELECT ST_AsText(ST_GeomFromText('POINT(1 1)'));. Dieser Befehl wandelt den nicht unterstützten Datentyp GEOMETRY in STRING um.
  • Nicht unterstützter PostgreSQL-Datentyp

    • Fehlermeldung: Invalid table-valued function external_query Postgres type (OID = 790) is not supported now at [1:15]
    • Nicht unterstützter Typ: money, time with time zone, inet, path, pg_lsn, point, polygon, tsquery, tsvector, txid_snapshot, uuid, box, cidr, circle, interval, jsonb, line, lseg, macaddr, macaddr8
    • Lösung: Wandeln Sie den nicht unterstützten Datentyp in STRING um.
    • Beispiel: SELECT CAST('12.34'::float8::numeric::money AS varchar(30));. Dieser Befehl wandelt den nicht unterstützten Datentyp money in string um.