Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo configurar la federación de Lakehouse para ejecutar consultas federadas en datos de MySQL que no están administrados por Azure Databricks. Para obtener más información sobre Lakehouse Federation, consulte ¿Qué es Lakehouse Federation?.
Para conectarse a su base de datos MySQL mediante la federación de Lakehouse, debe crear lo siguiente en el metastore Unity Catalog para Azure Databricks:
- Una conexión a la base de datos MySQL.
- Un catálogo externo que refleje la base de datos MySQL en Unity Catalog para que pueda usar la sintaxis de consulta y las herramientas de gobernanza de datos de Unity Catalog para administrar el acceso de usuario de Azure Databricks a la base de datos.
Antes de empezar
Requisitos del área de trabajo:
- Área de trabajo habilitada para Unity Catalog.
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 Lakehouse Federation.
- El cómputo de Azure Databricks debe usar Databricks Runtime 13.3 LTS o superior y el modo de acceso Estándar o Dedicado.
- Los almacenes de SQL deben ser pro o sin servidor y deben usar 2023.40 o superior.
Permisos necesarios:
- Para crear una conexión, debe ser administrador del metastore o usuario con el privilegio
CREATE CONNECTION
en el metastore de Unity Catalog adjunto al área de trabajo. - Para crear un catálogo externo, debe tener el permiso
CREATE CATALOG
en el metastore, y ser el propietario de la conexión o tener el privilegioCREATE 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.
SSL es necesario para crear una conexión.
Crear una conexión
Una conexión especifica una ruta de acceso y las 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 SQL CREATE CONNECTION
en un cuaderno de Azure Databricks o el editor de consultas de Databricks SQL.
Nota:
También puede usar la API REST de Databricks o la CLI de Databricks para crear una conexión. Vea POST/api/2.1/unity-catalog/connections y Comandos de Unity Catalog.
Permisos necesarios: administrador del metastore o usuario con el privilegio CREATE CONNECTION
.
Explorador de catálogo
En el área de trabajo de Azure Databricks, haga clic en
Catálogo.
En la parte superior del panel Catálogo, haga clic en el icono
Agregar y seleccione Agregar una conexión en el menú.
Como alternativa, en la página de Acceso rápido, haga clic en el botón Datos externos>, vaya a la pestaña Conexiones y haga clic en Crear conexión.
En la página Conceptos básicos de conexión del asistente para Configurar la conexión, escribe un Nombre de conexión intuitivo.
Seleccione un Tipo de conexión de MySQL.
(Opcional) Agregue un comentario.
Haga clic en Next.
En la página Autenticación , escriba las siguientes propiedades de conexión para la instancia de MySQL:
-
Host: Por ejemplo,
mysql-demo.lb123.us-west-2.rds.amazonaws.com
-
Puerto: por ejemplo,
3306
-
Usuario: por ejemplo,
mysql_user
-
Contraseña: por ejemplo,
password123
-
Host: Por ejemplo,
(Opcional): seleccione Confiar en el certificado de servidor. Esto se deselecciona de forma predeterminada. Cuando se selecciona, la capa de transporte usa SSL para cifrar el canal y omite la cadena de certificados para validar la confianza. Deje este conjunto en el valor predeterminado a menos que tenga una necesidad específica de omitir la validación de confianza.
Haga clic en Crear conexión.
En la página Aspectos básicos del catálogo, escriba 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.
(Opcional) Haga clic en Probar conexión para confirmar que funcione.
Haga clic en Crear catálogo.
En la página Access, seleccione las áreas de trabajo en las que los usuarios pueden acceder al catálogo que creó. Puedes seleccionar Todas las áreas de trabajo tienen acceso, o hacer clic en Asignar a áreas de trabajo, seleccionar las áreas de trabajo y luego hacer clic en Asignar.
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.
Concede Privilegios en el catálogo. Haz clic en Conceder:
- 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.
- 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
ymodify
en objetos del catálogo. - Seleccione manualmente los privilegios que se van a conceder.
- Seleccione Data Reader en el menú desplegable para conceder privilegios
- Haz clic en Conceder.
Haga clic en Next.
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.
(Opcional) Agregue un comentario.
Haz clic en Guardar.
SQL
Ejecute el siguiente comando en un cuaderno o en el editor de consultas de Databricks SQL.
CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
Se recomienda usar secretos de Azure Databricks en lugar de cadenas de texto no cifrado para valores confidenciales, como las credenciales. Por ejemplo:
CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
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 más información sobre la configuración de secretos, consulte Administración de secretos.
Creación de un catálogo externo
Nota:
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 SQL CREATE FOREIGN CATALOG
en un cuaderno de Azure Databricks o el editor de consultas de Databricks SQL. También puede usar la API de REST de Databricks o la CLI de Databricks para crear un catálogo. Vea POST /api/2.1/unity-catalog/catalogs y Comandos de Unity Catalog.
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álogo
En el área de trabajo de Azure Databricks, haga clic en
Catálogo para abrir el Explorador de catálogos.
En la parte superior del panel Catálogo, haga clic en el icono
Agregar 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.
Siga las instrucciones para crear catálogos externos en Crear catálogos.
SQL
Ejecute el siguiente comando SQL en un cuaderno o en el editor de Databricks 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.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;
Delegaciones admitidas
Se admiten las siguientes delegaciones en todos los procesos:
- Filtros
- Proyecciones
- Límite
- Funciones: parcial, solo para expresiones de filtro. (Funciones de cadena; funciones matemáticas; funciones de fecha, hora y marca de tiempo, y otras funciones diversas, como Alias, Cast, SortOrder)
Las siguientes instrucciones se admiten en Databricks Runtime 13.3 LTS y posterior, y en almacenes de SQL:
- Agregados
- Operadores booleanos
- Las siguientes funciones matemáticas (no se admiten si ANSI está deshabilitado): +, -, *, %, /
- Ordenación, cuando se usa con límite
No se admiten las siguientes delegaciones:
- Combinaciones
- Funciones de Windows
Asignaciones de tipo de datos
Al leer de MySQL a Spark, los tipos de datos se asignan de la siguiente manera:
Tipo de MySQL | Tipo de Spark |
---|---|
bigint (si no tiene signo), decimal | TipoDecimal |
tinyint*, int, integer, mediumint, smallint | IntegerType |
tinyint(1) | Tipo Booleano |
bigint (si tiene signo) | LongType |
FLOAT | TipoFlotante |
doble | DoubleType |
char, enum, set | Tipo de Caracter |
varchar | VarcharType |
json, longtext, mediumtext, text, tinytext | tipo de cadena |
binario, blob, varbinary, varchar binario | TipoBinario |
bit, booleano | Tipo Booleano |
fecha, año | TipoFecha |
datetime, time, timestamp** | TimestampType/TimestampNTZType |
*
tinyint(1) signed
y tinyint(1) unsigned
se tratan como un valor booleano y se convierten en BooleanType
. Vea Referencia de Conector/J en la documentación de MySQL.
**Al leer desde MySQL, Timestamp
de MySQL se asigna a TimestampType
de Spark si preferTimestampNTZ = false
(valor predeterminado).
Timestamp
de MySQL se asigna a TimestampNTZType
si preferTimestampNTZ = true
.