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 esta página se describe cómo configurar la federación de Lakehouse para ejecutar consultas federadas en datos de Snowflake 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 su base de datos de Snowflake mediante Lakehouse Federation, debe crear lo siguiente en el metastore de Unity Catalog de Azure Databricks:
- Una conexión a la base de datos de Snowflake.
- Un catálogo externo que refleje la base de datos de Snowflake en Unity Catalog, de modo 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.
Obtenga información sobre cómo ejecutar consultas federadas en datos de Snowflake mediante Okta como proveedor de OAuth externo. En esta página se tratan los flujos de usuario a máquina (U2M) y de máquina a máquina (M2M).
Para ver otros métodos de autenticación, consulte las páginas siguientes:
- OAuth integrado de Snowflake
- OAuth con el identificador de Entra de Microsoft
- Token de acceso de OAuth
- Clave privada PEM
- Autenticación básica (nombre de usuario y contraseña)
Puede ejecutar consultas federadas en Snowflake mediante federación de consultas o federación de catálogo.
En la federación de consultas, JDBC pasa la consulta del Catálogo de Unity a la base de datos externa. Esto es ideal para los informes a petición o el trabajo de prueba de concepto en las canalizaciones de ETL.
En la federación del catálogo, la consulta de Unity Catalog se ejecuta directamente sobre el almacenamiento de archivos. Este enfoque es útil para la migración incremental sin adaptación de código o como un modelo híbrido a largo plazo para las organizaciones que deben mantener algunos datos en Snowflake junto con sus datos registrados en el Catálogo de Unity. Consulte Habilitar la federación del catálogo de Snowflake.
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 CONNECTIONen el metastore de Unity Catalog adjunto al área de trabajo. - Para crear un catálogo externo, debe tener el permiso
CREATE CATALOGen el metastore, y ser el propietario de la conexión o tener el privilegioCREATE FOREIGN CATALOGen la conexión.
Los requisitos de permisos adicionales se especifican en cada sección basada en tareas que se indica a continuación.
¿Qué es OAuth externo en Snowflake?
OAuth externo es un método de autenticación que permite usar servidores externos que usan OAuth 2.0 para acceder a Snowflake. En lugar de un usuario o una aplicación que inicie sesión directamente en Snowflake, se autentican con el proveedor de OAuth (por ejemplo, Okta, Microsoft Entra ID o PingFederate).
A continuación, el proveedor de OAuth emite un token de acceso, que Databricks presenta a Snowflake. Snowflake verifica entonces la firma y las declaraciones del token con la integración de seguridad configurada y concede acceso.
Determinación de un flujo de OAuth
Para elegir el flujo de OAuth correcto para el conector de Snowflake, debe comprender los dos tipos principales: U2M (usuario a máquina) y M2M (máquina a máquina).
U2M es un flujo de autorización en el que la aplicación (Azure Databricks) recibe permiso para actuar en nombre del usuario. Este flujo es interactivo, lo que significa que se solicita al usuario que inicie sesión al crear una conexión externa y la aplicación recibe un token de acceso con ámbito de los permisos del usuario.
M2M es un flujo no interactivo que se usa cuando una aplicación necesita acceder a los recursos directamente sin intervención del usuario. En este flujo, la aplicación debe registrarse en el proveedor de OAuth con un conjunto de permisos, independientemente de cualquier usuario específico.
En un área de trabajo de Azure Databricks, OAuth hace referencia a la autenticación U2M y OAuth Machine to Machine hace referencia a la autenticación M2M.
Configuración de Okta
La configuración exacta de Okta depende de las necesidades y directivas de su empresa. Los pasos descritos en estas secciones y siguientes sirven como guía para obtener una configuración funcional de OAuth y representar un ejemplo sencillo y práctico, no un recurso de Okta exhaustivo. Consulte la documentación de Okta para obtener una cobertura detallada de su plataforma y características.
Creación de un cliente de OAuth
El cliente compatible con OAuth en Okta representa una aplicación que necesita interactuar con el servidor de autorización de Okta para obtener tokens. En nuestro caso, el cliente representa Azure Databricks.
En la consola de administración de Okta, vaya a Aplicaciones y haga clic en Crear integración de aplicaciones.
Elija el método de inicio de sesión OIDC (OpenID Connect).
Seleccione el tipo de aplicación:
- (solo U2M) Elija Aplicación nativa.
- (solo M2M) Elija Aplicación web.
Haga clic en Siguiente.
Escriba un nombre para la aplicación.
Seleccione el tipo de concesión:
- (solo U2M) Elija Código de autorización y Actualizar token.
- (solo M2M) Elija Credenciales de cliente.
(solo U2M) Agregue
https://<WORKSPACE>/login/oauth/snowflake.htmlcomo URI de redirección de inicio de sesión.Elija un valor deseado para el acceso controlado. Con fines de prueba, permitir que todos los usuarios de su organización accedan son suficientes.
Mantenga el acceso inmediato con el modo de agente de federación habilitado.
Haz clic en Guardar.
Se le redirigirá a la página de la aplicación recién creada.
En la sección Credenciales de cliente, tome nota del valor ID de cliente.
Haga clic en Editar y seleccione Secreto de cliente y, a continuación, haga clic en Guardar.
Copie el secreto y almacene este valor para más adelante.
Si opta por deshabilitar el acceso inmediato con el modo de agente de federación, debe asignar un usuario en la pestaña de asignación. Para obtener más información, consulte la documentación de Okta.
Creación de un servidor de autorización
En la consola de administración de Okta, expanda la sección Seguridad y haga clic en API.
Haga clic en Agregar servidor de autorización.
Escriba un nombre.
Para el público, use la dirección URL y el host de JDBC de Snowflake, manteniendo el esquema de dirección URL (el
httpsprefijo).Haz clic en Guardar. Se le redirigirá al servidor de autorización recién creado.
En la pestaña Ámbitos , haga clic en Agregar ámbito. Establezca el nombre en el ámbito de Snowflake deseado (por ejemplo,
session:role:PUBLIC). Haga clic en Crear.Haga clic en Directivas de acceso y, a continuación, haga clic en Agregar nueva directiva de acceso.
Escriba un nombre y una descripción para la política.
Asigne la directiva al cliente que creó y haga clic en Crear.
En la directiva de acceso, haga clic en Agregar regla.
Especificar el nombre de la regla.
Seleccione los tipos de concesión autorizados:
- (solo U2M) Elija Código de autorización.
- (solo M2M) Elija Credenciales de cliente.
En el caso de los ámbitos, puede seleccionar Cualquier ámbito o elegir el ámbito deseado creado anteriormente.
(solo U2M) Si desea recibir tokens de actualización, incluya
offline_accessen la lista de ámbitos.Configure las opciones adicionales según sea necesario.
Por último, haga clic en Crear regla.
Recuperar información de Okta
Tome nota de la siguiente información:
Id. de cliente y secreto de cliente: recupere estos datos de la aplicación cliente que creó.
Metadatos de OIDC (OpenID Connect):
- En la página del servidor de autorización, haga clic en el vínculo URI de metadatos de la pestaña Configuración .
- (solo U2M) Copie el valor authorization_endpoint en el formato siguiente:
https://<OKTA_ENV_ID>.okta.com/oauth2/<AUTH_SERVER_ID>/v1/authorize - (solo M2M) Copie el vínculo URI de metadatos . Las conexiones M2M de Snowflake en Databricks leen estos metadatos directamente y recuperan automáticamente toda la información necesaria.
- Copie el valor del emisor : se necesitará durante la configuración de Snowflake.
Creación de una integración de seguridad
Este paso configura una integración de seguridad en Snowflake para que Snowflake pueda comunicarse de forma segura con Okta, validar tokens y proporcionar el acceso a datos adecuado en función del rol asociado al token de acceso de OAuth.
Flujo U2M
Conéctese a su cuenta de Snowflake como usuario con el
ACCOUNTADMINrol .Ejecute el comando
CREATE SECURITY INTEGRATION. Por ejemplo:CREATE SECURITY INTEGRATION <OKTA_U2M_SECURITY_INTEGRATION_NAME> TYPE = EXTERNAL_OAUTH ENABLED = TRUE EXTERNAL_OAUTH_TYPE = OKTA EXTERNAL_OAUTH_ISSUER = '<OKTA_OAUTH_ISSUER_URL>' EXTERNAL_OAUTH_JWS_KEYS_URL = '<OKTA_OAUTH_ISSUER_URL>/v1/keys' EXTERNAL_OAUTH_AUDIENCE_LIST = ('<SNOWFLAKE_APPLICATION_ID_URI>') EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub' EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'EMAIL_ADDRESS';En el ejemplo se utiliza la reclamación y el atributo de asignación de correo electrónico. Esto requiere que el correo electrónico del usuario de Snowflake coincida con el correo electrónico del usuario de Okta.
ALTER USER <SNOWFLAKE_USER> SET EMAIL = '<YOUR_EMAIL>';Puede usar diferentes reclamaciones, dependiendo de sus requisitos.
Flujo M2M
Conéctese a su cuenta de Snowflake como usuario con el
ACCOUNTADMINrol .Ejecute el comando
CREATE SECURITY INTEGRATION. Por ejemplo:CREATE OR REPLACE SECURITY INTEGRATION <OKTA_M2M_SECURITY_INTEGRATION_NAME> TYPE = EXTERNAL_OAUTH ENABLED = TRUE EXTERNAL_OAUTH_TYPE = OKTA EXTERNAL_OAUTH_ISSUER = '<OKTA_OAUTH_ISSUER_URL>' EXTERNAL_OAUTH_JWS_KEYS_URL = '<OKTA_OAUTH_ISSUER_URL>/v1/keys' EXTERNAL_OAUTH_AUDIENCE_LIST = ('<SNOWFLAKE_APPLICATION_ID_URI>') EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub' EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name';Debe crear un nuevo usuario que no sea humano en Snowflake para representar al cliente que se conecta a la base de datos. Establezca el nombre de inicio de sesión en el identificador de cliente del cliente de OAuth.
CREATE OR REPLACE USER <OKTA_M2M_CLIENT_USER> LOGIN_NAME = '<CLIENT_ID>' DEFAULT_ROLE = 'PUBLIC';
Creación de una conexión
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.
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.
Flujo U2M
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 Datos básicos de la conexión del asistente para Configurar conexión, escriba un Nombre de conexión fácil de usar.
Seleccione un Tipo de conexión de Snowflake.
En Tipo de autenticación, seleccione
OAuthen el menú desplegable.(Opcional) Agregue un comentario.
Haga clic en Siguiente.
Escriba los siguientes detalles de autenticación y conexión para el almacenamiento de Snowflake:
-
Host: por ejemplo,
snowflake-demo.east-us-2.azure.snowflakecomputing.com -
Puerto: por ejemplo,
443 -
Usuario: por ejemplo,
snowflake-user -
Punto de conexión de autorización:
https://<OKTA_ENV_ID>.okta.com/oauth2/<AUTH_SERVER_ID>/v1/authorize - Secreto de Cliente: el secreto de cliente que guardó al crear la integración de seguridad.
- ID de cliente: el identificador de cliente que guardó al crear la integración de seguridad.
-
Ámbito de OAuth:
session:role:PUBLIC offline_access -
Proveedor de OAuth:
Okta - Inicie sesión con Okta: haga clic e inicie sesión en Snowflake con sus credenciales de Okta.
-
Host: por ejemplo,
Haga clic en Siguiente.
Escriba los siguientes detalles de conexión para la conexión:
- Almacén de Snowflake: el nombre del almacén que desea utilizar.
- (Opcional) Usar proxy: indica si quiere conectarse a Snowflake mediante un servidor proxy.
- (Opcional) Host de proxy: host del proxy usado para conectarse a Snowflake. También debe seleccionar Usar proxy y especificar Puerto proxy.
- (Opcional) Puerto de proxy: puerto del proxy usado para conectarse a Snowflake. También debe seleccionar Usar proxy y especificar host de proxy.
- (Opcional) Rol Snowflake: rol de seguridad predeterminado que se usará para la sesión después de conectarse.
Haga clic en Crear conexión.
En la página Datos básicos del catálogo, escriba un nombre para el catálogo externo.
(Opcional) Haga clic en Probar conexión para confirmar que funciona.
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ó. Puede seleccionar Todas las áreas de trabajo tienen acceso o hacer clic en Asignar a áreas de trabajo, seleccionar las áreas de trabajo y, a continuación, hacer clic en Asignar.
Cambie el propietario que puede administrar el acceso a todos los objetos del catálogo. Comience a escribir una entidad de seguridad en el cuadro de texto y, a continuación, haga clic en la entidad de seguridad en los resultados devueltos.
Concede Privilegios en el catálogo. Haga clic en Conceder:
- Especifique los Principales que pueden acceder a los objetos del catálogo. Comience a escribir una entidad de seguridad en el cuadro de texto y, a continuación, haga clic en la entidad de seguridad en 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
BROWSEde forma predeterminada.- Seleccione Data Reader en el menú desplegable para conceder privilegios
readsobre objetos en el catálogo. - Seleccione Editor de datos en el menú desplegable para conceder los privilegios
readymodifyen objetos del catálogo. - Seleccione manualmente los privilegios que se van a conceder.
- Seleccione Data Reader en el menú desplegable para conceder privilegios
- Haga clic en Conceder.
Haga clic en Siguiente.
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.
Flujo M2M: Explorador de catálogos
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 Datos básicos de la conexión del asistente para Configurar conexión, escriba un Nombre de conexión fácil de usar.
Seleccione un Tipo de conexión de Snowflake.
En Tipo de autenticación, seleccione
OAuth Machine to Machineen el menú desplegable.(Opcional) Agregue un comentario.
Haga clic en Siguiente.
Escriba los siguientes detalles de autenticación para la conexión:
-
Host: por ejemplo,
snowflake-demo.east-us-2.azure.snowflakecomputing.com -
Puerto: por ejemplo,
443 -
Punto de conexión de metadatos de Openid:
https://<OKTA_ENV_ID>.okta.com/oauth2/<AUTH_SERVER_ID>/.well-known/oauth-authorization-server - Secreto de Cliente: el secreto de cliente que guardó al crear la integración de seguridad.
- ID de cliente: el identificador de cliente que guardó al crear la integración de seguridad.
-
Ámbito de OAuth:
session:role:PUBLIC
-
Host: por ejemplo,
Haga clic en Siguiente.
Introduzca los siguientes detalles para su conexión:
- Almacén de Snowflake: el nombre del almacén que desea utilizar.
- (Opcional) Host de proxy: host del proxy usado para conectarse a Snowflake. También debe seleccionar Usar proxy y especificar Puerto proxy.
- (Opcional) Usar proxy: indica si quiere conectarse a Snowflake mediante un servidor proxy.
- (Opcional) Puerto de proxy: puerto del proxy usado para conectarse a Snowflake. También debe seleccionar Usar proxy y especificar host de proxy.
- (Opcional) Rol Snowflake: rol de seguridad predeterminado que se usará para la sesión después de conectarse.
Haga clic en Crear conexión.
En la página Datos básicos del catálogo, escriba un nombre para el catálogo externo.
(Opcional) Haga clic en Probar conexión para confirmar que funciona.
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ó. Puede seleccionar Todas las áreas de trabajo tienen acceso o hacer clic en Asignar a áreas de trabajo, seleccionar las áreas de trabajo y, a continuación, hacer clic en Asignar.
Cambie el propietario que puede administrar el acceso a todos los objetos del catálogo. Comience a escribir una entidad de seguridad en el cuadro de texto y, a continuación, haga clic en la entidad de seguridad en los resultados devueltos.
Concede Privilegios en el catálogo. Haga clic en Conceder:
- Especifique los Principales que pueden acceder a los objetos del catálogo. Comience a escribir una entidad de seguridad en el cuadro de texto y, a continuación, haga clic en la entidad de seguridad en 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
BROWSEde forma predeterminada.- Seleccione Data Reader en el menú desplegable para conceder privilegios
readsobre objetos en el catálogo. - Seleccione Editor de datos en el menú desplegable para conceder los privilegios
readymodifyen objetos del catálogo. - Seleccione manualmente los privilegios que se van a conceder.
- Seleccione Data Reader en el menú desplegable para conceder privilegios
- Haga clic en Conceder.
Haga clic en Siguiente.
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.
Flujo de M2M: SQL
Ejecute el siguiente comando en un cuaderno o en el editor de consultas de Databricks SQL.
CREATE CONNECTION <connection-name>
TYPE SNOWFLAKE
OPTIONS (
host '<hostname>',
port '443',
sfWarehouse '<warehouse-name>',
client_id '<client-id>',
client_secret '<client-secret>',
openid_metadata_endpoint '<oidc-metadata-endpoint>',
oauth_scope 'session:role:PUBLIC'
);
A continuación, puede crear un catálogo externo mediante la nueva conexión ejecutando el siguiente comando:
CREATE FOREIGN CATALOG <catalog-name>
USING CONNECTION <connection-name>
OPTIONS (database = '<database>');
Identificadores de base de datos con distinción entre mayúsculas y minúsculas
El campo database del catálogo externo se asigna a un identificador de base de datos de Snowflake. Si el identificador de la base de datos de Snowflake no distingue mayúsculas de minúsculas, se conserva el uso de mayúsculas y minúsculas en el catálogo externo <database-name>. Sin embargo, si el identificador de base de datos de Snowflake distingue mayúsculas de minúsculas, debe encapsular el catálogo externo <database-name> entre comillas dobles para conservar el caso.
Por ejemplo:
databasese convierte enDATABASE"database"se convierte endatabase"database"""se convierte endatabase"Para escapar una comilla doble, use otra comilla doble.
"database""produce un error porque la comilla doble no se escapa correctamente.
Para obtener más información, consulte Requisitos de identificador en la documentación de Snowflake.
Delegaciones admitidas
Se admiten las siguientes delegaciones:
- Filtros
- Proyecciones
- Limit
- Se une
- Agregados (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StddevSamp, Sum, VariancePop, VarianceSamp)
- Funciones (funciones de cadena, funciones matemáticas, funciones de datos, hora y marca de tiempo y otras funciones varias, como Alias, Cast, SortOrder)
- Funciones de Windows (DenseRank, Rank, RowNumber)
- Ordenación
Mapeo de tipos de datos
Al leer de Snowflake a Spark, los tipos de datos se asignan de la siguiente manera:
| Tipo de Snowflake | Tipo de Spark |
|---|---|
| decimal, número, numérico | DecimalType |
| bigint, byteint, int, integer, smallint, tinyint | IntegerType |
| float, float4, float8 | FloatType (tipo de flotante) |
| double, doble precisión, real | DoubleType |
| char, carácter, cadena, texto, tiempo, varchar | tipo de cadena |
| binary | TipoBinario |
| boolean | Tipo Booleano |
| date | TipoFecha |
| datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz | Tipo de marca de tiempo |
Limitaciones
- El punto de conexión de OAuth de Snowflake debe ser accesible desde direcciones IP del plano de control de Azure Databricks. Consulte Direcciones IP salientes del plano de control de Azure Databricks. Snowflake admite la configuración de directivas de red en el nivel de integración de seguridad, lo que permite una directiva de red independiente que permite la conectividad directa desde el plano de control de Azure Databricks al punto de conexión de OAuth para la autorización.