Compartir vía


Ejecución de consultas federadas en Oracle

En esta página se describe cómo configurar la federación de Lakehouse para ejecutar consultas federadas en datos de Oracle que Azure Databricks no administra. Para más información sobre La federación de Lakehouse, consulte ¿Qué es La federación de Lakehouse?

Para conectarse a la base de datos de Oracle mediante La federación de Lakehouse, debe crear lo siguiente en el metastore del catálogo de Unity de Azure Databricks:

  • Una conexión a la base de datos de Oracle.
  • Un catálogo externo que refleja tu base de datos de Oracle en Unity Catalog, permitiéndote usar la sintaxis de consulta y las herramientas de gobernanza de datos de Unity Catalog para gestionar el acceso de usuarios de Azure Databricks a la base de datos.

Limitations

  • La federación de Lakehouse solo admite conexiones de seguridad de la capa de transporte (TLS) a Oracle Cloud. Las conexiones a otras bases de datos de Oracle usan el cifrado de red nativo (NNE).

  • Hay un problema conocido al conectarse a instancias 11.2.0.3.0 y posteriores que no tienen un valor de zona horaria de Etc/UTC (Error: ORA-01882: timezone region not found).

    • Solución alternativa: Use la configuración de spark.databricks.connector.oracle.timezoneAsRegion, que se corresponde directamente con la propiedad del controlador JDBC de oracle.jdbc.timezoneAsRegion.
    • Advertencia: La solución alternativa puede provocar un comportamiento incorrecto del horario de verano (DST). Para obtener ayuda, póngase en contacto con el soporte técnico de Oracle.

License

El controlador Oracle y otros archivos jar necesarios de Oracle se rigen por la licencia FDHUT sin clics.

Antes de empezar

Antes de comenzar, confirme que cumple los requisitos de esta sección.

Requisitos de Databricks

Requisitos del área de trabajo:

  • Área de trabajo habilitada para el catálogo de Unity.

Requisitos de proceso:

  • Conectividad de red desde su recurso de computación a los sistemas de bases de datos de destino. Consulte Recomendaciones de redes para la federación de Lakehouse.
  • El proceso de Azure Databricks debe usar Databricks Runtime 16.1 o superior y Estándar o modo de accesoDedicado.
  • Los almacenes de SQL deben ser pro o sin servidor y deben usar 2024.50 o superior.

Permisos necesarios:

  • Para crear una conexión, debe ser un administrador de metastore o un usuario con el privilegio CREATE CONNECTION en el metastore de catálogo de Unity asociado al área de trabajo.
  • Para crear un catálogo externo, debe tener el permiso CREATE CATALOG en la metastore y ser el propietario de la conexión o tener el privilegio CREATE FOREIGN CATALOG en la conexión.

Los requisitos de permisos adicionales se especifican en cada sección basada en tareas que se indica a continuación.

Requisitos de Oracle

Para las conexiones que usan cifrado de red nativo, debe habilitar NNE del lado del servidor (nivel ACCEPTED como mínimo). Consulte Configuración del cifrado de datos de red en la documentación de Oracle. Esto no se aplica a las conexiones de Oracle Cloud, que usan TLS en su lugar.

Creación de una conexión de Azure Databricks

Una conexión especifica una ruta de acceso y credenciales para acceder a un sistema de base de datos externo. Para crear una conexión, puede usar el Explorador de catálogos o el comando CREATE CONNECTION SQL en un cuaderno de Azure Databricks o en el editor de consultas SQL de Databricks.

Note

También puede usar la API REST de Databricks o la CLI de Databricks para crear una conexión. Consulte POST /api/2.1/unity-catalog/connections y comandos de Unity Catalog.

Permisos necesarios: administrador o usuario de Metastore con el privilegio CREATE CONNECTION.

Explorador de catálogos

  1. En el área de trabajo de Azure Databricks, haga clic en el icono Datos.Catálogo.
  2. En el panel izquierdo, expanda el menú Datos externos y seleccione Conexiones.
  3. Haga clic en Crear conexión.
  4. En la página Datos básicos de la conexión del asistente para Configurar conexión, escriba un nombre de conexión fácil de usar Nombre de conexión.
  5. Seleccione un Tipo de conexión de Oracle.
  6. (Opcional) Agregue un comentario.
  7. Haga clic en Siguiente.
  8. En la página de autenticación , escriba lo siguiente para la instancia de Oracle:
    • Host: por ejemplo, oracle-demo.123456.rds.amazonaws.com
    • Puerto: por ejemplo, 1521
    • Usuario: por ejemplo, oracle_user
    • Contraseña: por ejemplo, password123
    • Protocolo de cifrado: Native Network Encryption (valor predeterminado) o Transport Layer Security
  9. Haga clic en Crear conexión.
  10. En la página Datos básicos del catálogo, escribe un nombre para el catálogo externo. Un catálogo externo refleja una base de datos en un sistema de datos externo para que pueda consultar y administrar el acceso a los datos de esa base de datos mediante Azure Databricks y unity Catalog.
  11. (Opcional) Haga clic en Probar conexión para confirmar que funciona.
  12. Haga clic en Crear catálogo.
  13. En la página Access, seleccione las áreas de trabajo en las que los usuarios pueden acceder al catálogo que creó. Puede seleccionar Todas las áreas de trabajo tienen accesoo haga clic en Asignar a áreas de trabajo, seleccione las áreas de trabajo y, a continuación, haga clic en Asignar.
  14. Cambia el Propietario que podrá administrar el acceso a todos los objetos del catálogo. Comienza a escribir una entidad de seguridad en el cuadro de texto y, después, haz clic en la entidad de seguridad dentro de los resultados devueltos.
  15. Concede Privilegios en el catálogo. Haga clic en Conceder:
    1. Especifica las Entidades de seguridad que tendrán acceso a los objetos del catálogo. Comienza a escribir una entidad de seguridad en el cuadro de texto y, después, haz clic en la entidad de seguridad dentro de los resultados devueltos.
    2. Selecciona los Preajustes de privilegios que vas a conceder a cada entidad de seguridad. A todos los usuarios de la cuenta se les concede BROWSE de forma predeterminada.
      • Seleccione Data Reader en el menú desplegable para conceder privilegios read sobre objetos en el catálogo.
      • Seleccione Editor de datos en el menú desplegable para conceder los privilegios read y modify en objetos del catálogo.
      • Seleccione manualmente los privilegios que se van a conceder.
    3. Haga clic en Conceder.
  16. Haga clic en Siguiente.
  17. En la página Metadatos, especifica pares clave-valor de etiquetas. Para obtener más información, consulte Aplicar etiquetas a los objetos securitizables de Unity Catalog.
  18. (Opcional) Agregue un comentario.
  19. Haz clic en Guardar.

SQL

Ejecute el comando siguiente en un cuaderno o en el editor de consultas SQL de Databricks:

CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>',
  encryption_protocol '<protocol>' -- optional
);

Databricks recomienda que utilice los secretos de Azure Databricks en lugar de cadenas de texto sin formato para valores confidenciales como las credenciales. Por ejemplo:

CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>'),
  encryption_protocol '<protocol>' -- optional
)

Si debe usar cadenas de texto no cifrado en comandos SQL de cuaderno, evite truncar la cadena mediante el escape de caracteres especiales como $ con \. Por ejemplo: \$.

Para obtener información sobre cómo configurar secretos, consulte Administración de secretos.

Creación de un catálogo externo

Note

Si usa la interfaz de usuario para crear una conexión con el origen de datos, se incluye la creación de catálogos externos y puede omitir este paso.

Un catálogo externo refleja una base de datos en un sistema de datos externo para que pueda consultar y administrar el acceso a los datos de esa base de datos mediante Azure Databricks y unity Catalog. Para crear un catálogo externo, use una conexión al origen de datos que ya se ha definido.

Para crear un catálogo externo, puede usar el Explorador de catálogos o el comando CREATE FOREIGN CATALOG SQL en un cuaderno de Azure Databricks o en el editor de consultas SQL. También puede usar la API REST de Databricks o la CLI de Databricks para crear un catálogo. Consulte POST /api/2.1/unity-catalog/catalogs y Comandos del catálogo de Unity.

Permisos necesarios:CREATE CATALOG permiso en el metastore y la propiedad de la conexión o el privilegio CREATE FOREIGN CATALOG en la conexión.

Explorador de catálogos

  1. En el área de trabajo de Azure Databricks, haga clic en el icono Datos.Catálogo para abrir el Explorador de catálogos.

  2. En la parte superior del panel Catálogo, haga clic en el icono Icono agregar o másAgregar y seleccione Agregar un catálogo en el menú.

    Como alternativa, en la página Acceso rápido, haga clic en el botón Catálogos y, a continuación, haga clic en el botón Crear catálogo.

  3. Siga las instrucciones para crear catálogos externos en Crear catálogos.

SQL

Ejecute el siguiente comando SQL en un cuaderno o en un editor de consultas SQL. Los elementos entre corchetes son opcionales. Reemplace los valores de marcador de posición:

  • <catalog-name>: nombre del catálogo en Azure Databricks.
  • <connection-name>: el objeto de conexión que especifica el origen de datos, la ruta de acceso y las credenciales de acceso.
  • <service-name>: nombre del servicio que quiere reflejar como catálogo en Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (service_name '<service-name>');

Delegaciones admitidas

Se admiten las siguientes delegaciones:

  • Filters
  • Projections
  • Limit
  • Aggregates
  • Offset
  • Cast
  • Contiene, Comienza con, Termina con

Asignaciones de tipo de datos

Al leer de Oracle a Spark, los tipos de datos se asignan de la siguiente manera:

Tipo de Oracle Tipo de Spark
MARCA DE TIEMPO CON TIMEZONE, MARCA DE TIEMPO CON LOCAL TIMEZONE TimestampType
FECHA, MARCA DE TIEMPO TimestampType/TimestampNTZType*
NÚMERO, FLOTANTE DecimalType**
flotante binario FloatType
DOBLE BINARIO DoubleType
CHAR, NCHAR, VARCHAR2, NVARCHAR2 StringType

* DATE y TIMESTAMP se asignan a Spark TimestampType si spark.sql.timestampType = TIMESTAMP_LTZ (predeterminado). Se asignan a TimestampNTZType si spark.sql.timestampType = TIMESTAMP_NTZ.

** NUMBER sin especificar precisión se asignará a DecimalType(38, 10) porque no hay compatibilidad con un decimal de punto flotante puro en Spark.