Esegui query federate Oracle
In qualità di data analyst, puoi eseguire query sui dati relazionali che risiedono in Oracle direttamente da BigQuery in tempo reale, senza copiare o spostare i dati.
La federazione Oracle di BigQuery utilizza l'API BigQuery Connection per connettersi ai motori del database Oracle. Puoi quindi utilizzare la funzione EXTERNAL_QUERY per inviare la query SQL direttamente a Oracle per l'esecuzione e i risultati vengono trasmessi direttamente.
Limitazioni
Le query federate di Oracle sono soggette alle seguenti limitazioni:
- Puoi eseguire solo query di sola lettura tramite la funzione
EXTERNAL_QUERY. Le istruzioni DDL (Data Definition Language) e DML (Data Manipulation Language) non sono supportate. - La federazione è accessibile solo tramite la funzione
EXTERNAL_QUERY. La creazione di tabelle esterne BigQuery o di set di dati permanenti che vengono mappati direttamente alle tabelle Oracle non è supportata. - La latenza delle query federate potrebbe essere notevolmente superiore rispetto all'esecuzione della query direttamente in Oracle.
- Il servizio di connessione sottostante potrebbe ibernare le connessioni inattive. La prima query che utilizza una connessione Oracle dopo un periodo di inattività potrebbe richiedere più di un minuto per l'esecuzione durante l'inizializzazione del connettore.
- Il peering DNS non è supportato. Devi connetterti utilizzando un indirizzo IP o un nome host completamente risolvibile all'interno della tua rete VPC.
- La query SQL Oracle deve specificare alias di colonna espliciti per tutte le colonne che contengono risultati o espressioni di funzioni (ad esempio,
SELECT COUNT(*) AS total_count). Le espressioni senza alias producono nomi di colonna con caratteri speciali non validi nelle definizioni dello schema della tabella BigQuery. - Quando l'utilizzo dell'API Compute Engine nel progetto di query è limitato dai Controlli di servizio VPC, la query federata non va a buon fine se la connessione utilizza un collegamento di rete. Assicurati che siano configurate regole di traffico in entrata e in uscita dei Controlli di servizio VPC appropriate.
Non sono supportati altri pushdown SQL per Oracle. I filtri e le aggregazioni nella query BigQuery esterna non vengono inseriti nella query interna all'interno della funzione
EXTERNAL_QUERY. Devi specificare i predicati e le proiezioni delle colonne direttamente all'interno dell'istruzione SQL Oracle interna per limitare le righe e le colonne trasferite sulla rete.È supportata solo l'autenticazione con nome utente e password del database Oracle. I provider di identità di terze parti, Kerberos, RADIUS e l'autenticazione IAM di Oracle Cloud Infrastructure (OCI) non sono supportati.
I tipi Oracle complessi o proprietari, come i tipi definiti dall'utente (UDT), i tipi spaziali (
SDO_GEOMETRY), i tipi di raccolta (VARRAY, tabelle nidificate),SYS.ANYDATA,REF,BFILEe le colonneJSONbinarie (OSON) non sono supportati. Per eseguire una query su una colonnaJSONbinaria, serializzala in testo nella query (ad esempio conJSON_SERIALIZE(column_name)oJSON_QUERY).Le colonne
NUMBERnon vincolate e le espressioni numeriche calcolate vengono mappate a BigQuerySTRINGper preservare la precisione completa senza troncamento o overflow. Le colonneNUMBER(p, s)con vincoli vengono mappate aNUMERIC(quando la precisione è inferiore o uguale a 38 e la scala è inferiore o uguale a 9) oBIGNUMERIC(quando la scala è maggiore di 9 o le cifre intere sono maggiori di 29).Le colonne
CHAR(n)eNCHAR(n)di lunghezza fissa conservano il padding degli spazi vuoti finali fino alla lunghezza n quando vengono mappate aSTRINGdi BigQuery.Le date e i timestamp precedenti al 15 ottobre 1582 potrebbero subire uno spostamento del calendario di 10 giorni a causa della transizione storica al calendario gregoriano. Per conservare le date storiche esatte precedenti al 1582, esegui il cast in
VARCHAR2nell'istruzioneEXTERNAL_QUERY.
Ambienti e versioni Oracle supportati
La federazione delle query supporta i database Oracle nei seguenti ambienti di deployment:
- Oracle Database @ Google Cloud
- Oracle Exadata Database Service
- Istanze Oracle on-premise connesse a Google Cloud tramite Cloud VPN, Cloud Interconnect o IP pubblico su internet
La federazione delle query supporta le seguenti versioni di Oracle:
- Oracle Database 23.x (23ai)
- Oracle Database 21.x
- Oracle Database 19.x (19c)
Prima di iniziare
Assicurati che l'amministratore di BigQuery abbia creato una connessione Oracle e l'abbia condivisa con te.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per eseguire query su Oracle, chiedi all'amministratore di concederti il ruolo IAM BigQuery Connection User (roles/bigquery.connectionUser) nel progetto.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Esegui query sui dati
Per inviare una query federata a Oracle da una query GoogleSQL, utilizza la funzione EXTERNAL_QUERY.
L'esempio seguente è una query federata che unisce i record dei clienti in BigQuery denominati mydataset.customers con i record degli ordini in tempo reale di un database Oracle:
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;
Visualizza lo schema di una tabella Oracle
Puoi eseguire query sulle viste del dizionario dei dati Oracle tramite EXTERNAL_QUERY per ispezionare i metadati del database, scoprire le tabelle ed esaminare gli schemi delle colonne prima di eseguire l'analisi.
Elenca tutte le tabelle accessibili
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''');
Visualizza le colonne e i tipi di dati in una tabella
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''');
Mappatura dei tipi di dati
Quando esegui una query federata, BigQuery converte i dati di Oracle in tipi di dati GoogleSQL in base alla seguente tabella:
| Tipo di dati Oracle | Tipo di dati BigQuery |
|---|---|
| Tipi numerici | |
NUMBER(p, s) (p ≤ 38, s ≤ 9) |
NUMERIC |
NUMBER(p, s) (s > 9 o p > 38) |
BIGNUMERIC |
NUMBER (scala non vincolata o mobile) |
STRING |
FLOAT, FLOAT(p) |
FLOAT64 |
BINARY_FLOAT |
FLOAT64 |
BINARY_DOUBLE |
FLOAT64 |
| Tipi di caratteri e stringhe | |
CHAR(n) |
STRING |
NCHAR(n) |
STRING |
VARCHAR2(n) |
STRING |
NVARCHAR2(n) |
STRING |
CLOB |
STRING |
NCLOB |
STRING |
LONG |
STRING |
| Tipi di file binari | |
RAW(n) |
BYTES |
BLOB |
BYTES |
LONG RAW |
BYTES |
| Tipi di data, ora e intervallo | |
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 |
| Tipi di identificazione delle righe | |
ROWID |
STRING |
UROWID |
STRING |
| Tipi semistrutturati, vettoriali e XML | |
JSON (testuale/OSON con serializzazione del testo) |
STRING |
VECTOR |
STRING |
XMLTYPE |
STRING |
Prezzi
Il costo dell'esecuzione di una query federata si basa su tre fattori:
- Il costo di calcolo dell'esecuzione della query in Oracle (addebitato dal tuo provider di database Oracle o dal tuo ambiente di hosting)
- Il costo della larghezza di banda per il trasferimento dei risultati della query da Oracle a BigQuery (costi di rete in uscita del tuo provider host del database)
- Il costo di computing per l'esecuzione della query in BigQuery
I costi relativi a Oracle dipendono dal tipo di servizio Oracle e dall'ambiente di hosting che utilizzi. Per limitare i costi della larghezza di banda, ti consigliamo di scrivere la query nell'istruzione EXTERNAL_QUERY in modo che escluda tutte le colonne e le righe non necessarie per calcolare il risultato finale.
Non sono previsti costi aggiuntivi per l'esecuzione di query federate in BigQuery. Per saperne di più sui prezzi di BigQuery, consulta Prezzi.
Se la tua connessione utilizza componenti di networking Google Cloud , potrebbero essere applicati anche i seguenti prezzi:
- Prezzi di Virtual Private Cloud
- Prezzi di Cloud VPN
- Prezzi di Cloud NAT
- Prezzi di Cloud Interconnect
Passaggi successivi
- Scopri come connetterti a Oracle.
- Scopri di più sulle query federate.
- Scopri di più sulla gestione delle connessioni.