Compartir a través de


Ejecución de consultas federadas en Snowflake

En este artículo, se describe cómo configurar Lakehouse Federation para ejecutar consultas federadas en datos de Snowflake no 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 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.

Antes de empezar

Requisitos del área de trabajo:

  • Área de trabajo habilitada para Unity Catalog.

Requisitos de proceso:

  • Conectividad de red desde el clúster de Databricks Runtime o el almacén de SQL a los sistemas de base de datos de destino. Consulte Recomendaciones de redes para Lakehouse Federation.
  • Los clústeres de Azure Databricks deben usar Databricks Runtime 13.3 LTS o superior y el modo de acceso compartido o de usuario único.
  • Los almacenes de SQL deben ser Pro o Sin servidor y tienen que utilizar la versión 2023.40 o posteriores.

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 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.

  • Si planea autenticarse mediante OAuth, cree una integración de seguridad en la consola de Snowflake. Consulte la sección siguiente para obtener más información.

(Opcional) Creación de una integración de seguridad en la consola de Snowflake

Si quiere autenticarse mediante OAuth, siga este paso antes de crear una conexión de Snowflake. Para autenticarse mediante un nombre de usuario y una contraseña en su lugar, omita esta sección.

Nota:

Solo se admite la integración nativa de OAuth de Snowflake. No se admiten integraciones externas de OAuth como Okta o Microsoft Entra ID.

En la consola de Snowflake, ejecute CREATE SECURITY INTEGRATION. Reemplace los siguientes valores:

  • <integration-name>: un nombre único para la integración de OAuth.

  • <workspace-url>: dirección URL del área de trabajo de Azure Databricks. Debe establecer OAUTH_REDIRECT_URI en https://<workspace-url>/login/oauth/snowflake.html, donde <workspace-url> es la dirección URL única del área de trabajo de Azure Databricks donde creará la conexión de Snowflake.

  • <duration-in-seconds>: un período de tiempo para los tokens de actualización.

    Importante

    OAUTH_REFRESH_TOKEN_VALIDITY es un campo personalizado que se establece en 90 días de forma predeterminada. Una vez que expire el token de actualización, debe volver a autenticar la conexión. Establezca el campo en un período de tiempo razonable.

CREATE SECURITY INTEGRATION <integration-name>
TYPE = oauth
ENABLED = true
OAUTH_CLIENT = custom
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<workspace-url>/login/oauth/snowflake.html'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = <duration-in-seconds>
OAUTH_ENFORCE_PKCE = TRUE;

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

  1. En el área de trabajo de Azure Databricks, haga clic en Icono de catálogo Catálogo.

  2. En la parte superior del panel Catálogo, haga clic en el icono Icono agregar o más 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.

  3. Escriba un Nombre de conexión descriptivo.

  4. Seleccione un Tipo de conexión de Snowflake.

  5. Escriba las siguientes propiedades de conexión para el almacén de Snowflake.

    • Tipo de autenticación: OAuth o Username and password
    • Host: Por ejemplo, snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • Puerto: por ejemplo, 443
    • Almacén de Snowflake: por ejemplo, my-snowflake-warehouse
    • Usuario: por ejemplo, snowflake-user
    • (OAuth) id. de cliente: en la consola de Snowflake, ejecute SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>') para recuperar el identificador de cliente para la integración de seguridad.
    • (OAuth): secreto de cliente: en la consola de Snowflake, ejecute SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>') para recuperar el secreto de cliente para la integración de seguridad.
    • (OAuth) ámbito de cliente: refresh_token session:role:<role-name>. Especifique el rol Snowflake que se va a usar en <role-name>.
    • (Nombre de usuario y contraseña) Contraseña: por ejemplo, password123

    (OAuth) Se le pedirá que inicie sesión en Snowflake con sus credenciales de OAuth.

  6. (Opcional) Haga clic en Probar conexión para confirmar que funcione.

  7. (Opcional) Agregue un comentario.

  8. Haga clic en Crear.

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 '<port>',
  sfWarehouse '<warehouse-name>',
  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 snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

Para obtener más información sobre la configuración de secretos, consulte Administración de secretos.

Creación de un 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. 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 Catalog Explorer o el comando SQL CREATE FOREIGN CATALOG en un cuaderno de Azure Databricks o el editor de consultas SQL.

Nota:

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

  1. En el área de trabajo de Azure Databricks, haga clic en Icono de catálogo 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ás 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.

  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.
  • <database-name>: nombre de la base de datos que desea reflejar como un catálogo en Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

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:

  • database se convierte en DATABASE

  • "database" se convierte en database

  • "database""" se convierte en database"

    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
  • Límite
  • Combinaciones
  • 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

Asignaciones de tipo 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, number, numeric DecimalType
bigint, byteint, int, integer, smallint, tinyint IntegerType
float, float4, float8 FloatType
double, double precision, real DoubleType
char, character, string, text, time, varchar StringType
binary BinaryType
boolean BooleanType
date DateType
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz TimestampType

Limitaciones de OAuth

A continuación se muestran las limitaciones de soporte de OAuth:

  • El punto de conexión de OAuth de Snowflake debe ser accesible desde direcciones IP del plano de control de Databricks. Consulte salida 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 habilite la conectividad directa desde el plano de control de Databricks al punto de conexión de OAuth para la autorización.
  • Las opciones de configuración del puerto de proxy,Proxy host, Puerto Proxy , y Snowflake role no son admitidas. Especifique rol de Snowflake como parte del ámbito de OAuth.

Recursos adicionales