Carga datos de Oracle en BigQuery
Puedes cargar datos de Oracle a BigQuery con el conector del Servicio de transferencia de datos de BigQuery para Oracle. Con el Servicio de transferencia de datos de BigQuery, puedes programar trabajos de transferencia recurrentes que agreguen tus datos más recientes de Oracle a BigQuery.
Limitaciones
Las transferencias de Oracle están sujetas a las siguientes limitaciones:
- La cantidad máxima de conexiones simultáneas a una base de datos de Oracle es limitada y, como resultado, la cantidad de ejecuciones de transferencias simultáneas a una sola base de datos de Oracle se limita a esa cantidad máxima.
- Debes configurar un adjunto de red en los casos en que una IP pública no esté disponible para una conexión de base de datos de Oracle, con los siguientes requisitos:
- Se debe poder acceder a la fuente de datos desde la subred en la que reside el adjunto de red.
- El adjunto de red no debe estar en la subred dentro del rango
240.0.0.0/24. - Los adjuntos de red no se pueden borrar si hay conexiones activas con el adjunto. Para borrar un adjunto de red, comunícate con la Atención al cliente de Cloud.
- Para la multirregión
us, el adjunto de red debe estar en la regiónus-central1. Para la multirregióneu, el adjunto de red debe estar en la regióneurope-west4.
- El tiempo de intervalo mínimo entre transferencias recurrentes de Oracle es de 15 minutos. El intervalo predeterminado para una transferencia recurrente es de 24 horas.
- Una sola configuración de transferencia solo puede admitir una ejecución de transferencia de datos en un momento determinado. En el caso de que se programe una segunda transferencia de datos para que se ejecute antes de que se complete la primera, solo se completará la primera transferencia de datos, y se omitirán las demás transferencias de datos que se superpongan con la primera.
- Para evitar que se omitan transferencias dentro de una misma configuración de transferencia, te recomendamos que aumentes la duración del tiempo entre las transferencias de datos grandes configurando la Frecuencia de repetición.
- Durante una transferencia de datos, el conector de Oracle identifica las columnas clave indexadas y particionadas para transferir tus datos en lotes paralelos. Por este motivo, te recomendamos que especifiques columnas de clave primaria o que uses columnas indexadas en tu tabla para mejorar el rendimiento y reducir la tasa de errores en tus transferencias de datos.
- Si tienes restricciones de clave principal o indexada, solo se admiten los siguientes tipos de columnas para crear lotes paralelos:
INTEGERTINYINTSMALLINTFLOATREALDOUBLENUMERICBIGINTDECIMALDATE
- Las transferencias de datos de Oracle que no usan columnas indexadas o de clave principal no pueden admitir más de 2,000,000 de registros por tabla.
- Si tienes restricciones de clave principal o indexada, solo se admiten los siguientes tipos de columnas para crear lotes paralelos:
- Si la conexión de red configurada y la instancia de máquina virtual (VM) se encuentran en regiones diferentes, es posible que haya movimiento de datos entre regiones cuando transfieras datos desde Oracle.
Limitaciones de la transferencia incremental
Las transferencias incrementales de Oracle están sujetas a las siguientes limitaciones:- Solo puedes elegir
TIMESTAMPcolumnas como columnas de marca de agua. - La transferencia incremental solo se admite para los recursos con columnas de marcas de agua válidas.
- Los valores de una columna de marca de agua deben aumentar de forma monótona.
- Las transferencias incrementales no pueden sincronizar las operaciones de eliminación en la tabla de origen.
- Una sola configuración de transferencia solo puede admitir la transferencia incremental o completa.
- No puedes actualizar los objetos de la lista
assetdespués de la primera ejecución de la incorporación incremental. - No puedes cambiar el modo de escritura en una configuración de transferencia después de la primera ejecución de la transferencia incremental.
- No puedes cambiar la columna de marca de agua ni la clave principal después de la primera ejecución de la transferencia incremental.
Opciones de transferencia de datos
En las siguientes secciones, se proporciona más información sobre las opciones de transferencia de datos cuando configuras una transferencia de datos de Oracle.
Configuración de TLS
El conector de Oracle admite la configuración de seguridad a nivel de transporte (TLS) para encriptar tus transferencias de datos a BigQuery. El conector de Oracle admite los siguientes parámetros de configuración de TLS:
- Encriptar datos y verificar la CA y el nombre de host: Este modo realiza una validación completa del servidor con TLS a través del protocolo TCPS. Encripta todos los datos en tránsito y verifica que el certificado del servidor de la base de datos esté firmado por una autoridad certificadora (AC) de confianza. Este modo también verifica que el nombre de host al que te conectas coincida exactamente con el nombre común (CN) o con un nombre alternativo del sujeto (SAN) en el certificado del servidor. Este modo evita que los atacantes usen un certificado válido para un dominio diferente y se hagan pasar por tu servidor de base de datos.
- Si tu nombre de host no coincide con el CN o el SAN del certificado, la conexión fallará. Debes configurar una resolución de DNS para que coincida con el certificado o usar un modo de seguridad diferente.
- Usa este modo para obtener la opción más segura y evitar ataques de intermediarios (PITM).
- Encriptar datos y verificar solo la AC: Este modo encripta todos los datos con TLS a través del protocolo TCPS y verifica que el certificado del servidor esté firmado por una AC en la que confía el cliente. Sin embargo, este modo no verifica el nombre de host del servidor. Este modo se conecta correctamente siempre que el certificado sea válido y lo haya emitido una VA de confianza, independientemente de si el nombre de host del certificado coincide con el nombre de host al que te conectas.
- Usa este modo si deseas asegurarte de conectarte a un servidor cuyo certificado esté firmado por una CA de confianza, pero el nombre de host no se puede verificar o no tienes control sobre la configuración del nombre de host.
- Solo encriptación: Este modo encripta todos los datos transferidos entre el cliente y el servidor con la encriptación de red nativa de Oracle a través del puerto TCP estándar. No realiza ninguna validación de certificado ni de nombre de host.
- Este modo proporciona cierto nivel de seguridad, ya que protege los datos en tránsito, pero puede ser vulnerable a los ataques de PITM.
- Usa este modo si necesitas asegurarte de que todos los datos estén encriptados, pero no puedes o no quieres verificar la identidad del servidor. Te recomendamos que uses este modo cuando trabajes con VPC privadas.
- Sin encriptación ni verificación: En este modo, no se encriptan los datos ni se realiza ninguna verificación de certificado o nombre de host. Todos los datos se envían como texto sin formato.
- No recomendamos usar este modo en un entorno en el que se manejan datos sensibles.
- Solo recomendamos usar este modo para realizar pruebas en una red aislada en la que la seguridad no sea un problema.
Certificado de servidor de confianza (PEM)
Si usas el modo Encrypt data, and verify CA and hostname o el modo Encrypt data, and verify CA, también puedes proporcionar uno o más certificados codificados en PEM. Estos certificados son necesarios en algunos casos en los que el Servicio de transferencia de datos de BigQuery necesita verificar la identidad del servidor de la base de datos durante la conexión TLS:
- Si usas un certificado firmado por una CA privada dentro de tu organización o un certificado autofirmado, debes proporcionar la cadena de certificados completa o el certificado autofirmado único. Esto es necesario para los certificados emitidos por las AC internas de los servicios administrados del proveedor de servicios en la nube, como el Servicio de Base de datos Relacionales de Amazon (RDS).
- Si tu certificado de servidor de base de datos está firmado por una CA pública (por ejemplo, Let's Encrypt, DigiCert o GlobalSign), no es necesario que proporciones un certificado. Los certificados raíz de estas AC públicas están preinstalados y el Servicio de transferencia de datos de BigQuery confía en ellos.
Puedes proporcionar certificados codificados en PEM en el campo Certificado PEM de confianza cuando creas una configuración de transferencia de Oracle, con los siguientes requisitos:
- El certificado debe ser una cadena de certificados válida codificada con PEM.
- El certificado debe ser completamente correcto. Si falta algún certificado en la cadena o el contenido es incorrecto, la conexión TLS fallará.
- Para un solo certificado, puedes proporcionar un certificado único autofirmado desde el servidor de la base de datos.
- Para una cadena de certificados completa emitida por una CA privada, debes proporcionar la cadena de confianza completa. Esto incluye el certificado del servidor de la base de datos y los certificados de CA intermedios y raíz.
Transferencias completas o incrementales
Para especificar cómo se cargan los datos en BigQuery, selecciona la preferencia de escritura Completa o Incremental en la configuración de transferencia cuando configures una transferencia de Oracle. Las transferencias incrementales son compatibles con la vista previa.
Puedes seleccionar Completa para transferir todos los datos de tus conjuntos de datos de Oracle con cada transferencia de datos.Como alternativa, puedes seleccionar Incremental (Vista previa) para transferir solo los datos que se modificaron desde la última transferencia de datos, en lugar de cargar todo el conjunto de datos con cada transferencia. Si seleccionas Incremental para tu transferencia de datos, debes especificar los modos de escritura Anexar o Upsert para definir cómo se escriben los datos en BigQuery durante una transferencia de datos incremental. En las siguientes secciones, se describen los modos de escritura disponibles.
Modo de escritura Append
El modo de escritura Append solo inserta filas nuevas en tu tabla de destino. Esta opción agrega estrictamente los datos transferidos sin verificar si existen registros, por lo que este modo puede provocar la duplicación de datos en la tabla de destino.
Cuando seleccionas el modo Append, debes seleccionar una columna de marca de agua. Se requiere una columna de marca de agua para que el conector de Oracle haga un seguimiento de los cambios en la tabla de origen.
En el caso de las transferencias de Oracle, te recomendamos que selecciones una columna que solo se actualice cuando se cree el registro y que no cambie con las actualizaciones posteriores. Por ejemplo, la columnaCREATED_AT.
Modo de escritura Upsert
El modo de escritura Upsert actualiza una fila o inserta una fila nueva en la tabla de destino verificando si hay una clave primaria. Puedes especificar una clave principal para permitir que el conector de Oracle determine qué cambios son necesarios para mantener tu tabla de destino actualizada con tu tabla de origen. Si la clave principal especificada está presente en la tabla de BigQuery de destino durante una transferencia de datos, el conector de Oracle actualiza esa fila con datos nuevos de la tabla de origen. Si no hay una clave principal durante una transferencia de datos, el conector de Oracle inserta una fila nueva.
Cuando seleccionas el modo Upsert, debes seleccionar una columna de marca de agua y una clave primaria:
- Se requiere una columna de marca de agua para que el conector de Oracle haga un seguimiento de los cambios en la tabla de origen.
- Selecciona una columna de marca de agua que se actualice cada vez que se modifique una fila. Recomendamos columnas similares a las columnas
UPDATED_AToLAST_MODIFIED.
- Selecciona una columna de marca de agua que se actualice cada vez que se modifique una fila. Recomendamos columnas similares a las columnas
- La clave primaria puede ser una o más columnas de tu tabla que son necesarias para que el conector de Oracle determine si debe insertar o actualizar una fila.
- Selecciona las columnas que contengan valores no nulos que sean únicos en todas las filas de la tabla. Te recomendamos que incluyas columnas con identificadores generados por el sistema, códigos de referencia únicos (por ejemplo, IDs de incremento automático) o IDs de secuencia inmutables basados en el tiempo.
- Para evitar la posible pérdida o corrupción de datos, las columnas de clave principal que selecciones deben tener valores únicos. Si tienes dudas sobre la singularidad de la columna de clave primaria que elegiste, te recomendamos que uses el modo de escritura Append.
Antes de comenzar
En las siguientes secciones, se describen los pasos que debes seguir antes de crear una transferencia de Oracle.
Requisitos previos de Oracle
- Crea una credencial de usuario en la base de datos de Oracle.
- Otorga privilegios de sistema
Create Sessional usuario para permitir la creación de sesiones. - Asigna un espacio de tabla a la cuenta de usuario.
También debes tener la siguiente información de base de datos de Oracle cuando crees una transferencia de Oracle.
| Nombre del parámetro | Descripción |
|---|---|
database |
Es el nombre de la base de datos. |
host |
Nombre de host o dirección IP de la base de datos. |
port |
Número de puerto de la base de datos. |
username |
Nombre de usuario para acceder a la base de datos. |
password |
Contraseña para acceder a la base de datos. |
Requisitos previos de BigQuery
- Verifica si completaste todas las acciones necesarias para habilitar el Servicio de transferencia de datos de BigQuery
- Crea un conjunto de datos de BigQuery para almacenar tus datos.
- Si quieres configurar las notificaciones de ejecución de transferencias para Pub/Sub, verifica que tengas el permiso
pubsub.topics.setIamPolicyde Identity and Access Management (IAM). Los permisos de Pub/Sub no son necesarios si solo configuras las notificaciones por correo electrónico. Para obtener más información, consulta la sección sobre notificaciones de ejecución del Servicio de transferencia de datos de BigQuery.
Roles de BigQuery requeridos
Para obtener los permisos que necesitas para crear una transferencia de datos del Servicio de transferencia de datos de BigQuery,
pídele a tu administrador que te otorgue el
rol de IAM de administrador de BigQuery (roles/bigquery.admin)
en tu proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene los permisos necesarios para crear una transferencia de datos del Servicio de transferencia de datos de BigQuery. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para crear una transferencia de datos del Servicio de transferencia de datos de BigQuery:
-
Permisos del Servicio de transferencia de datos de BigQuery:
-
bigquery.transfers.update -
bigquery.transfers.get
-
-
Permisos de BigQuery:
-
bigquery.datasets.get -
bigquery.datasets.getIamPolicy -
bigquery.datasets.update -
bigquery.datasets.setIamPolicy -
bigquery.jobs.create
-
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Para obtener más información, consulta Cómo otorgar acceso a bigquery.admin.
Carga datos de Oracle en BigQuery
Agrega datos de Oracle a BigQuery configurando una transferencia con una de las siguientes opciones:
Console
Ve a la página Transferencia de datos en la Google Cloud consola.
Haz clic en Crear transferencia.
En la sección Tipo de fuente, para Fuente, selecciona Oracle.
En la sección Detalles de la fuente de datos, haz lo siguiente:
- En Adjunto de red, selecciona un adjunto de red existente o haz clic en Crear adjunto de red.
- En Host, ingresa el nombre de host o la IP de la base de datos.
- En Puerto, ingresa el número de puerto que usa la base de datos
de Oracle para las conexiones entrantes, como
1521. - En Nombre de la base de datos, ingresa el nombre de la base de datos de Oracle.
- En Tipo de conexión, ingresa el tipo de URL de conexión, ya sea
SERVICE,SIDoTNS. - En Nombre de usuario, ingresa el nombre del usuario que inicia la conexión de la base de datos de Oracle.
- En Contraseña, ingresa la contraseña del usuario que inicia la conexión de la base de datos de Oracle.
- En Modo TLS, selecciona una opción en el menú desplegable. Para obtener más información sobre los modos de TLS, consulta Configuración de TLS.
- En Certificado PEM de confianza, ingresa el certificado público de la autoridad certificadora (AC) que emitió el certificado TLS del servidor de la base de datos. Para obtener más información, consulta Certificado de servidor de confianza (PEM).
- En Ingestion type, selecciona Full o Incremental.
- Si seleccionas Incremental (Vista previa), en Write mode, selecciona Append o Upsert. Para obtener más información sobre los diferentes modos de escritura, consulta Transferencias completas o incrementales.
- En Oracle objects to transfer, haz clic en Browse:
- Selecciona los objetos que se transferirán al conjunto de datos de destino de BigQuery. También puedes ingresar de forma manual cualquier objeto que quieras incluir en la transferencia de datos en este campo.
- Si seleccionaste Append como modo de escritura incremental, debes seleccionar una columna como columna de marca de agua.
- Si seleccionaste Upsert como modo de escritura incremental, debes seleccionar una columna como columna de marca de agua y, luego, seleccionar una o más columnas como clave primaria.
En la sección Configuración de destino, en Conjunto de datos, selecciona el conjunto de datos que creaste para almacenar tus datos.
En la sección Nombre de configuración de la transferencia (Transfer config name), en Nombre visible (Display name), ingresa el nombre de la transferencia de datos.
En la sección Opciones de programación, haz lo siguiente:
- En la lista Frecuencia de repetición, selecciona una opción para especificar la frecuencia con la que se ejecuta esta transferencia de datos. Para especificar una frecuencia de repetición personalizada, selecciona Personalizado. Si seleccionas Según demanda, esta transferencia se ejecuta cuando activas la transferencia de forma manual.
- Si corresponde, selecciona Comenzar ahora o Comenzar a la hora definida y detalla una fecha de inicio y una hora de ejecución.
Opcional: En la sección Opciones de notificación, haz lo siguiente:
- Para habilitar las notificaciones por correo electrónico, haz clic en el botón de activación Notificación por correo electrónico. Si habilitas esta opción, el administrador de transferencias recibirá una notificación por correo electrónico cuando falle la ejecución de una transferencia.
- Si quieres habilitar las notificaciones de ejecución de transferencias de Pub/Sub para esta transferencia, haz clic en el botón de activación Notificaciones de Pub/Sub. Puedes seleccionar el nombre del tema o hacer clic en Crear un tema para crear uno.
Haz clic en Guardar.
bq
Ingresa el comando bq mk y suministra la marca de creación de transferencias --transfer_config.
bq mk --transfer_config --project_id=PROJECT_ID --data_source=DATA_SOURCE --display_name=DISPLAY_NAME --target_dataset=DATASET --params='PARAMETERS'
Donde:
- PROJECT_ID (opcional): Tu ID del proyecto de Google Cloud .
Si no se proporciona
--project_idpara especificar un proyecto en particular, se usa el proyecto predeterminado. - DATA_SOURCE: La fuente de datos:
oracle. - DISPLAY_NAME es el nombre visible de la configuración de transferencia. El nombre de la transferencia de datos puede ser cualquier valor que te permita identificarla si es necesario hacerle modificaciones más tarde.
- DATASET es el conjunto de datos de destino para la configuración de transferencia.
PARAMETERS son los parámetros de la configuración de transferencia creada en formato JSON. Por ejemplo:
--params='{"param":"param_value"}'Los siguientes son los parámetros para una transferencia de datos de Oracle:connector.networkAttachment(opcional): nombre del adjunto de red para conectarse a la base de datos de Oracle.connector.authentication.Username: el nombre de usuario de la cuenta de Oracleconnector.authentication.Password: la contraseña de la cuenta de Oracle.connector.database: Es el nombre de la base de datos de Oracle.connector.endpoint.host: El nombre de host o la IP de la base de datos.connector.endpoint.port: El número de puerto que usa la base de datos de Oracle para las conexiones entrantes, como1520.connector.connectionType: Es el tipo de URL de conexión, ya seaSERVICE,SIDoTNS.connector.tls.mode: Especifica una configuración de TLS para usar con esta transferencia:ENCRYPT_VERIFY_CA_AND_HOSTpara encriptar datos y verificar la CA y el nombre de hostENCRYPT_VERIFY_CApara encriptar datos y verificar solo la ACENCRYPT_VERIFY_NONEsolo para la encriptación de datosDISABLEpara indicar que no hay encriptación ni verificación
connector.tls.trustedServerCertificate: Proporciona uno o más certificados codificados con PEM (opcional). Solo es obligatorio siconnector.tls.modeesENCRYPT_VERIFY_CA_AND_HOSToENCRYPT_VERIFY_CA.ingestionType: EspecificaFULLoINCREMENTAL. Las transferencias incrementales son compatibles con la versión preliminar. Para obtener más información, consulta Transferencias completas o incrementales.writeMode: EspecificaWRITE_MODE_APPENDoWRITE_MODE_UPSERT.watermarkColumns: Especifica columnas en tu tabla como columnas de marca de agua. Este campo es obligatorio para las transferencias incrementales.primaryKeys: Especifica columnas en tu tabla como claves primarias. Este campo es obligatorio para las transferencias incrementales.assets: La ruta de acceso a los objetos de Oracle que se transferirán a BigQuery, mediante el siguiente formato:DATABASE_NAME/SCHEMA_NAME/TABLE_NAME
Cuando se especifican varios recursos durante una transferencia incremental, los valores de los campos watermarkColumns y primaryKeys corresponden a la posición de los valores en el campo assets. En el siguiente ejemplo, dep_id corresponde a la tabla DB1/USER1/DEPARTMENT, mientras que report_by y report_title corresponden a la tabla DB1/USER1/EMPLOYEES.
"primaryKeys":[['dep_id'], ['report_by','report_title']], "assets":["DB1/USER1/DEPARTMENT","DB1/USER1/EMPLOYEES"],
Por ejemplo, el siguiente comando crea una transferencia de datos de Oracle en el proyecto predeterminado con todos los parámetros obligatorios:
bq mk --transfer_config --target_dataset=mydataset --data_source=oracle --display_name='My Transfer' --params='{"assets":["DB1/USER1/DEPARTMENT","DB1/USER1/EMPLOYEES"], "connector.authentication.username": "User1", "connector.authentication.password":"ABC12345", "connector.database":"DB1", "connector.endpoint.host":"192.168.0.1", "connector.endpoint.port":1520, "connector.connectionType":"SERVICE", "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST", "connector.tls.trustedServerCertificate": "PEM-encoded certificate", "connector.networkAttachment": "projects/dev-project1/regions/us-central1/networkattachments/na1" "ingestionType":"incremental", "writeMode":"WRITE_MODE_APPEND", "watermarkColumns":["createdAt","createdAt"], "primaryKeys":[['dep_id'], ['report_by','report_title']]}'
API
Usa el método projects.locations.transferConfigs.create y suministra una instancia del recurso TransferConfig.
Para ejecutar manualmente una transferencia de datos fuera de tu programa habitual, puedes iniciar una ejecución de reabastecimiento.
Asignación de tipos de datos
En la siguiente tabla, se asignan los tipos de datos de Oracle a los tipos de datos de BigQuery correspondientes.
| Tipo de datos de Oracle | Tipo de datos de BigQuery |
|---|---|
BFILE |
BYTES |
BINARY_DOUBLE |
FLOAT |
BINARY_FLOAT |
FLOAT |
BLOB |
BYTES |
CHAR |
STRING |
CLOB |
STRING |
DATE |
DATETIME |
FLOAT |
FLOAT |
INTERVAL DAY TO SECOND |
STRING |
INTERVAL YEAR TO MONTH |
STRING |
LONG |
STRING |
LONG RAW |
BYTES |
NCHAR |
STRING |
NCLOB |
STRING |
NUMBER (without precision and scale) |
STRING |
NUMBER (with precision and scale lower than the BigQuery Numeric range) |
NUMERIC |
NUMBER (with precision and scale lower than the BigQuery BigNumeric range) |
BIGNUMERIC |
NUMBER (with precision and scale greater than the BigQuery BigNumeric range) |
STRING |
NVARCHAR2 |
STRING |
RAW |
BYTES |
ROWID |
STRING |
TIMESTAMP |
DATETIME |
TIMESTAMP WITH LOCAL TIME ZONE |
DATETIME |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP |
UROWID |
STRING |
VARCHAR |
STRING |
VARCHAR2 |
STRING |
Soluciona problemas con la configuración de una transferencia
Si tienes problemas para configurar tu transferencia de datos, consulta Problemas de transferencia de Oracle.
Precios
Para obtener información sobre los precios de las transferencias de Oracle, consulta Precios del Servicio de transferencia de datos.
¿Qué sigue?
- Si deseas obtener una descripción general del Servicio de transferencia de datos de BigQuery, consulta la página sobre la introducción al Servicio de transferencia de datos de BigQuery.
- Para obtener información sobre el uso de las transferencias (por ejemplo, cómo obtener información sobre una configuración de transferencia, mostrar distintas configuraciones o visualizar su historial de ejecuciones), consulta Trabaja con transferencias.
- Obtén más información sobre cómo cargar datos con operaciones entre nubes.