Ejecuta consultas federadas de Oracle
Como analista de datos, puedes consultar datos relacionales que se encuentran en Oracle directamente desde BigQuery en tiempo real, sin copiarlos ni moverlos.
La federación de BigQuery con Oracle usa la
API de BigQuery Connection para conectarse a los motores de base de datos de Oracle. Luego,
puedes usar la
función EXTERNAL_QUERY
para enviar tu consulta en SQL directamente a Oracle para su ejecución, y los
resultados se transmiten directamente de vuelta.
Limitaciones
Las consultas federadas de Oracle están sujetas a las siguientes limitaciones:
- Solo puedes ejecutar consultas de solo lectura a través de la función
EXTERNAL_QUERY. No se admiten las sentencias del lenguaje de definición de datos (DDL) ni del lenguaje de manipulación de datos (DML). - Solo se puede acceder a la federación a través de la función
EXTERNAL_QUERY. No se admite la creación de tablas externas de BigQuery ni conjuntos de datos permanentes que se asignen directamente a tablas de Oracle. - La latencia de la consulta federada puede ser bastante más alta que la ejecución de la consulta directamente en Oracle.
- Es posible que el servicio de conexión subyacente hiberne las conexiones inactivas. La primera consulta que usa una conexión de Oracle después de un período de inactividad puede tardar más de un minuto en ejecutarse mientras se inicializa el conector.
- No se admite el intercambio de tráfico de DNS. Debes conectarte con una dirección IP o un nombre de host que se pueda resolver por completo dentro de tu red de VPC.
- La consulta en SQL de Oracle debe especificar alias de columna explícitos para cualquier
columna que contenga resultados o expresiones de funciones (por ejemplo,
SELECT COUNT(*) AS total_count). Las expresiones sin alias producen nombres de columnas con caracteres especiales que no son válidos en las definiciones de esquema de tabla de BigQuery. - Cuando los Controles del servicio de VPC restringen el uso de la API de Compute Engine en el proyecto de consulta, la consulta federada falla si la conexión usa un adjunto de red. Asegúrate de que se configuren las reglas de entrada y salida adecuadas de los Controles del servicio de VPC.
No se admiten pushdowns de SQL adicionales para Oracle. Los filtros y las agregaciones de la consulta externa de BigQuery no se envían a la consulta interna dentro de la función
EXTERNAL_QUERY. Debes especificar predicados y proyecciones de columnas directamente dentro de la instrucción de SQL de Oracle interna para limitar las filas y columnas que se transfieren por la red.Solo se admite la autenticación con nombre de usuario y contraseña de la base de datos de Oracle. No se admiten los proveedores de identidad de terceros, Kerberos, RADIUS ni la autenticación de IAM de Oracle Cloud Infrastructure (OCI).
No se admiten los tipos complejos o de propiedad de Oracle, como los tipos definidos por el usuario (UDT), los tipos espaciales (
SDO_GEOMETRY), los tipos de colección (VARRAY, tablas anidadas),SYS.ANYDATA,REF,BFILEy las columnas binariasJSON(OSON). Para consultar una columnaJSONbinaria, serialízala en texto en tu consulta (por ejemplo, conJSON_SERIALIZE(column_name)oJSON_QUERY).Las columnas
NUMBERsin restricciones y las expresiones numéricas calculadas se asignan aSTRINGde BigQuery para conservar la precisión completa sin truncamiento ni desbordamiento. Las columnasNUMBER(p, s)restringidas se asignan aNUMERIC(cuando la precisión es menor o igual que 38 y la escala es menor o igual que 9) oBIGNUMERIC(cuando la escala es mayor que 9 o los dígitos enteros son mayores que 29).Las columnas
CHAR(n)yNCHAR(n)de longitud fija conservan el relleno de espacios en blanco finales hasta la longitud n cuando se asignan aSTRINGde BigQuery.Las fechas y marcas de tiempo anteriores al 15 de octubre de 1582 pueden experimentar un cambio de calendario de 10 días debido a la transición histórica del calendario gregoriano. Para conservar las fechas históricas exactas anteriores a 1582, conviértelas en
VARCHAR2en la declaraciónEXTERNAL_QUERY.
Entornos y versiones de Oracle compatibles
La federación de consultas admite bases de datos de Oracle en los siguientes entornos de implementación:
- Oracle Database@Google Cloud
- Oracle Exadata Database Service
- Instancias de Oracle locales conectadas a Google Cloud a través de Cloud VPN, Cloud Interconnect o una IP pública por Internet
La federación de consultas admite las siguientes versiones de Oracle:
- Oracle Database 23.x (23ai)
- Oracle Database 21.x
- Oracle Database 19.x (19c)
Antes de comenzar
Asegúrate de que el administrador de BigQuery haya creado una conexión de Oracle y la haya compartido contigo.
Roles obligatorios
Para obtener los permisos que
necesitas para consultar Oracle,
pídele a tu administrador que te otorgue el
rol de IAM de usuario de conexión de BigQuery (roles/bigquery.connectionUser) en el proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Consulta los datos
Para enviar una consulta federada a Oracle desde una consulta de GoogleSQL, usa la función EXTERNAL_QUERY.
En el siguiente ejemplo, se muestra una consulta federada que une los registros de clientes en
BigQuery llamados mydataset.customers con los registros de pedidos en tiempo real de
una base de datos de 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;
Visualiza un esquema de tabla de Oracle
Puedes consultar las vistas del diccionario de datos de Oracle a través de
EXTERNAL_QUERY para inspeccionar los metadatos de la base de datos, descubrir tablas y revisar
los esquemas de columnas antes de ejecutar los análisis.
Enumera todas las tablas accesibles
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''');
Visualiza columnas y tipos de datos en una tabla
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''');
Asignación de tipos de datos
Cuando ejecutas una consulta federada, BigQuery convierte los datos de Oracle en tipos de datos de GoogleSQL según la siguiente tabla:
| Tipo de datos de Oracle | Tipo de datos de BigQuery |
|---|---|
| Tipos numéricos | |
NUMBER(p, s) (p ≤ 38, s ≤ 9) |
NUMERIC |
NUMBER(p, s) (s > 9 o p > 38) |
BIGNUMERIC |
NUMBER (escala sin restricciones o flotante) |
STRING |
FLOAT, FLOAT(p) |
FLOAT64 |
BINARY_FLOAT |
FLOAT64 |
BINARY_DOUBLE |
FLOAT64 |
| Tipos de caracteres y cadenas | |
CHAR(n) |
STRING |
NCHAR(n) |
STRING |
VARCHAR2(n) |
STRING |
NVARCHAR2(n) |
STRING |
CLOB |
STRING |
NCLOB |
STRING |
LONG |
STRING |
| Tipos binarios | |
RAW(n) |
BYTES |
BLOB |
BYTES |
LONG RAW |
BYTES |
| Tipos de fecha, hora y de intervalo | |
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 |
| Tipos de identificación de filas | |
ROWID |
STRING |
UROWID |
STRING |
| Tipos de datos semiestructurados, vectoriales y XML | |
JSON (textual/OSON con serialización de texto) |
STRING |
VECTOR |
STRING |
XMLTYPE |
STRING |
Precios
El costo de ejecutar una consulta federada se basa en tres factores:
- El costo de procesamiento de la ejecución de la consulta en Oracle (que cobra tu proveedor de base de datos de Oracle o entorno de hosting)
- El costo del ancho de banda de la transferencia de los resultados de la consulta de Oracle a BigQuery (cargos de red de salida de tu proveedor de hosting de bases de datos)
- El costo de procesamiento de la ejecución de la consulta en BigQuery
Los costos relacionados con Oracle dependen del tipo de servicio de Oracle
y del entorno de hosting que uses. Para limitar el costo del ancho de banda, te
recomendamos que escribas la consulta en la sentencia EXTERNAL_QUERY de modo que
excluya todas las columnas y filas que no son necesarias para calcular el resultado final.
No se aplican costos adicionales por ejecutar consultas federadas en BigQuery. Para obtener más información sobre los precios de BigQuery, consulta Precios.
Si tu conexión usa componentes de redes de Google Cloud , también se podrían aplicar los siguientes precios:
- Precios de la nube privada virtual
- Precios de Cloud VPN
- Precios de Cloud NAT
- Precios de Cloud Interconnect
¿Qué sigue?
- Obtén información para conectarte a Oracle.
- Obtén más información sobre las consultas federadas.
- Obtén información sobre cómo administrar conexiones.