Föderierte Oracle-Abfragen ausführen
Als Datenanalyst können Sie relationale Daten in Oracle direkt über BigQuery in Echtzeit abfragen, ohne Daten kopieren oder verschieben zu müssen.
Die BigQuery-Oracle-Föderation verwendet die BigQuery Connection API, um eine Verbindung zu Oracle-Datenbank-Engines herzustellen. Anschließend können Sie die Funktion EXTERNAL_QUERY verwenden, um Ihre SQL-Abfrage direkt an Oracle zur Ausführung zu senden. Die Ergebnisse werden direkt zurückgestreamt.
Beschränkungen
Föderierte Oracle-Abfragen unterliegen den folgenden Einschränkungen:
- Sie können nur schreibgeschützte Abfragen über die Funktion
EXTERNAL_QUERYausführen. Anweisungen der Datendefinitionssprache (DDL) und der Datenbearbeitungssprache (DML) werden nicht unterstützt. - Der Zugriff auf die Föderation ist nur über die Funktion
EXTERNAL_QUERYmöglich. Das Erstellen von externen BigQuery-Tabellen oder permanenten Datasets, die direkt Oracle-Tabellen zugeordnet sind, wird nicht unterstützt. - Die Latenz föderierter Abfragen kann deutlich höher sein als die direkte Ausführung der Abfrage in Oracle.
- Der zugrunde liegende Verbindungsdienst kann inaktive Verbindungen in den Ruhezustand versetzen. Die erste Abfrage, die nach einer Inaktivitätsphase eine Oracle-Verbindung verwendet, kann länger als eine Minute dauern, während der Connector initialisiert wird.
- DNS-Peering wird nicht unterstützt. Sie müssen eine Verbindung über eine IP-Adresse oder einen vollständig auflösbaren Hostnamen in Ihrem VPC-Netzwerk herstellen.
- In der Oracle-SQL-Abfrage müssen explizite Spalten-Aliasse für alle Spalten angegeben werden, die Funktionsergebnisse oder Ausdrücke enthalten (z. B.
SELECT COUNT(*) AS total_count). Ausdrücke ohne Alias erzeugen Spaltennamen mit Sonderzeichen, die in BigQuery-Tabellenschemadefinitionen ungültig sind. - Wenn die Nutzung der Compute Engine API im Abfrageprojekt durch VPC Service Controls eingeschränkt ist, schlägt die föderierte Abfrage fehl, wenn die Verbindung einen Netzwerkanhang verwendet. Achten Sie darauf, dass die entsprechenden Regeln für ein- und ausgehenden Traffic von VPC Service Controls konfiguriert sind.
Für Oracle werden keine zusätzlichen SQL-Push-downs unterstützt. Filter und Aggregationen in der äußeren BigQuery-Abfrage werden nicht in die innere Abfrage innerhalb der
EXTERNAL_QUERY-Funktion übertragen. Sie müssen Prädikate und Spaltenprojektionen direkt in der inneren Oracle SQL-Anweisung angeben, um die Zeilen und Spalten zu begrenzen, die über das Netzwerk übertragen werden.Es wird nur die Authentifizierung mit Nutzername und Passwort für Oracle-Datenbanken unterstützt. Externe Identitätsanbieter, Kerberos, RADIUS und die IAM-Authentifizierung von Oracle Cloud Infrastructure (OCI) werden nicht unterstützt.
Komplexe oder proprietäre Oracle-Typen wie benutzerdefinierte Typen (UDTs), räumliche Typen (
SDO_GEOMETRY), Sammlungstypen (VARRAY, verschachtelte Tabellen),SYS.ANYDATA,REF,BFILEund binäreJSON-Spalten (OSON) werden nicht unterstützt. Wenn Sie eine binäreJSON-Spalte abfragen möchten, serialisieren Sie sie in Ihrer Abfrage in Text (z. B. mitJSON_SERIALIZE(column_name)oderJSON_QUERY).Unbeschränkte
NUMBER-Spalten und berechnete numerische Ausdrücke werden BigQuery-STRINGzugeordnet, um die volle Genauigkeit ohne Kürzung oder Überlauf beizubehalten. EingeschränkteNUMBER(p, s)-Spalten werdenNUMERICzugeordnet (wenn die Genauigkeit kleiner oder gleich 38 und die Skalierung kleiner oder gleich 9 ist) oderBIGNUMERIC(wenn die Skalierung größer als 9 oder die Anzahl der Ganzzahlziffern größer als 29 ist).Bei
CHAR(n)- undNCHAR(n)-Spalten mit fester Länge werden nachgestellte Leerzeichen bis zur Länge n beibehalten, wenn sie BigQuery-STRINGzugeordnet werden.Bei Datumsangaben und Zeitstempeln vor dem 15. Oktober 1582 kann es aufgrund der historischen Umstellung auf den gregorianischen Kalender zu einer Verschiebung um 10 Tage kommen. Wenn Sie genaue historische Datumsangaben vor 1582 beibehalten möchten, wandeln Sie sie in der
EXTERNAL_QUERY-Anweisung inVARCHAR2um.
Unterstützte Oracle-Umgebungen und -Versionen
Die Abfrageföderation unterstützt Oracle-Datenbanken in den folgenden Bereitstellungsumgebungen:
- Oracle-Datenbank@Google Cloud
- Oracle Exadata Database Service
- Lokale Oracle-Instanzen, die über Cloud VPN, Cloud Interconnect oder eine öffentliche IP-Adresse über das Internet mit Google Cloud verbunden sind
Die Abfrageföderation unterstützt die folgenden Oracle-Versionen:
- Oracle Database 23.x (23ai)
- Oracle Database 21.x
- Oracle Database 19.x (19c)
Hinweis
Achten Sie darauf, dass Ihr BigQuery-Administrator eine Oracle-Verbindung erstellt und für Sie freigegeben hat.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Verbindungsnutzer (roles/bigquery.connectionUser) für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Abfragen von Oracle benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Daten abfragen
Verwenden Sie die Funktion EXTERNAL_QUERY, um eine föderierte Abfrage aus einer GoogleSQL-Abfrage an Oracle zu senden.
Das folgende Beispiel ist eine föderierte Abfrage, die Kundendatensätze in BigQuery mit dem Namen mydataset.customers mit Live-Bestelldatensätzen aus einer Oracle-Datenbank verknüpft:
SELECT bq_cust.customer_id, bq_cust.customer_name, oracle_orders.order_id, oracle_orders.order_status, oracle_orders.order_total FROM mydataset.customers AS bq_cust JOIN EXTERNAL_QUERY( 'projects/my-project/locations/us-central1/connections/oracle_prod_conn', '''SELECT customer_id, order_id, order_status, order_total FROM orders WHERE order_date >= SYSDATE - 1''') AS oracle_orders ON bq_cust.customer_id = oracle_orders.customer_id;
Oracle-Tabellenschema ansehen
Sie können die Oracle-Datenwörterbuchansichten über EXTERNAL_QUERY abfragen, um Datenbankmetadaten zu prüfen, Tabellen zu ermitteln und Spaltenschemas zu überprüfen, bevor Sie Analysen ausführen.
Alle zugänglichen Tabellen auflisten
SELECT * FROM EXTERNAL_QUERY( 'projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID', '''SELECT owner, table_name, tablespace_name, status FROM all_tables ORDER BY owner, table_name''');
Spalten und Datentypen in einer Tabelle ansehen
SELECT * FROM EXTERNAL_QUERY( 'projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID', '''SELECT column_name, data_type, data_length, data_precision, data_scale, nullable FROM all_tab_columns WHERE owner = 'SCHEMA_NAME' AND table_name = 'TABLE_NAME' ORDER BY column_id''');
Datentypzuordnung
Wenn Sie eine föderierte Abfrage ausführen, konvertiert BigQuery die Daten aus Oracle gemäß der folgenden Tabelle in GoogleSQL-Datentypen:
| Oracle-Datentyp | BigQuery-Datentyp |
|---|---|
| Numerische Typen | |
NUMBER(p, s) (p ≤ 38, s ≤ 9) |
NUMERIC |
NUMBER(p, s) (s > 9 oder p > 38) |
BIGNUMERIC |
NUMBER (unbeschränkte oder gleitende Skala) |
STRING |
FLOAT, FLOAT(p) |
FLOAT64 |
BINARY_FLOAT |
FLOAT64 |
BINARY_DOUBLE |
FLOAT64 |
| Zeichen- und Stringtypen | |
CHAR(n) |
STRING |
NCHAR(n) |
STRING |
VARCHAR2(n) |
STRING |
NVARCHAR2(n) |
STRING |
CLOB |
STRING |
NCLOB |
STRING |
LONG |
STRING |
| Binäre Typen | |
RAW(n) |
BYTES |
BLOB |
BYTES |
LONG RAW |
BYTES |
| Datums-, Uhrzeit- und Intervalltypen | |
DATE |
DATETIME |
TIMESTAMP, TIMESTAMP(p) |
DATETIME |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP |
TIMESTAMP WITH LOCAL TIME ZONE |
TIMESTAMP |
INTERVAL YEAR TO MONTH |
STRING |
INTERVAL DAY TO SECOND |
STRING |
| Zeilenidentifikationstypen | |
ROWID |
STRING |
UROWID |
STRING |
| Semistrukturierte, Vektor- und XML-Typen | |
JSON (textbasiert/OSON mit Textserialisierung) |
STRING |
VECTOR |
STRING |
XMLTYPE |
STRING |
Preise
Die Kosten für die Ausführung einer föderierten Abfrage hängen von drei Faktoren ab:
- Die Rechenkosten für die Ausführung der Abfrage in Oracle (werden von Ihrem Oracle-Datenbankanbieter oder Ihrer Hosting-Umgebung in Rechnung gestellt)
- Die Bandbreitenkosten für die Übertragung der Abfrageergebnisse von Oracle zu BigQuery (Gebühren für ausgehenden Traffic von Ihrem Datenbank-Hostanbieter)
- Die Rechenkosten für die Ausführung der Abfrage in BigQuery
Alle Oracle-bezogenen Kosten hängen vom Typ des Oracle-Dienstes und der Hosting-Umgebung ab, die Sie verwenden. Um die Bandbreitenkosten zu begrenzen, empfehlen wir, die Abfrage in der EXTERNAL_QUERY-Anweisung so zu schreiben, dass alle Spalten und Zeilen ausgeschlossen werden, die nicht für die Berechnung des Endergebnisses erforderlich sind.
Für die Ausführung föderierter Abfragen in BigQuery fallen keine zusätzlichen Kosten an. Weitere Informationen zu den Preisen von BigQuery finden Sie unter Preise.
Wenn Ihre Verbindung Netzwerkkomponenten von Google Cloud verwendet, können auch die folgenden Preise gelten:
Nächste Schritte
- Verbindung zu Oracle herstellen
- Informationen zu föderierten Abfragen
- Verbindungen verwalten