Conexiones Snowflake - AWS Glue

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Conexiones Snowflake

Puede usar Glue for Spark AWS para leer y escribir en tablas de Snowflake en Glue 4.0 AWS y versiones posteriores. Puede leer desde Snowflake con una consulta SQL. Puede conectarse a Snowflake mediante un usuario y una contraseña. Puede consultar las credenciales de Snowflake almacenadas en AWS Secrets Manager a través del catálogo de datos de Glue AWS. Las credenciales de Snowflake del catálogo de datos para Glue for Spark AWS se almacenan por separado de las credenciales de Snowflake del catálogo de datos para los rastreadores. Debe elegir un tipo de conexión SNOWFLAKE y no un tipo de conexión JDBC configurado para conectarse a Snowflake.

Para obtener más información acerca de Snowflake, consulte el sitio web de Snowflake. Para obtener más información sobre Snowflake en AWS, consulte Snowflake Data Warehouse en Amazon Web Services.

Configuración de las conexiones de Snowflake

No hay requisitos previos AWS para conectarse a las bases de datos de Snowflake disponibles a través de Internet.

Si lo desea, puede realizar la siguiente configuración para gestionar las credenciales de conexión con Glue AWS.

Para gestionar sus credenciales de conexión con Glue AWS
  1. En Snowflake, genere un usuario snowflakeUser y una contraseña snowflakePassword.

  2. En AWS Secrets Manager, cree un secreto con sus credenciales de Snowflake. Para crear un secreto en Secrets Manager, siga el tutorial disponible en Crear un secreto AWS Secrets Manager en la documentación AWS Secrets Manager. Después de crear el secreto, conserve el nombre secreto, secretName, para el siguiente paso.

    • Al seleccionar pares clave/valor, cree un par para snowflakeUser con la clave sfUser.

    • Al seleccionar pares clave/valor, cree un par para snowflakePassword con la clave sfPassword.

    • Al seleccionar los pares clave/valor, puede proporcionar su almacén de Snowflake con la clave sfWarehouse.

  3. En el catálogo de datos de Glue AWS, cree una conexión mediante los pasos que se indican en Adición de una conexión de AWS Glue. Tras crear la conexión, conserve el nombre de la conexión, connectionName, para el siguiente paso.

    • Al seleccionar un tipo de conexión, seleccione Snowflake.

    • Al seleccionar la URL de Snowflake, proporcione la URL de su instancia de Snowflake. La URL utilizará un nombre de host en el formulario account_identifier.snowflakecomputing.com.

    • Al seleccionar un secreto AWS, proporcione un secretName.

  4. En la configuración del trabajo de Glue AWS, proporcione connectionName como una conexión de red adicional.

En las siguientes situaciones, es posible que necesite lo siguiente:

  • Para Snowflake alojado en AWS en una VPC de Amazon

    • Necesitará la configuración de VPC de Amazon adecuada para Snowflake. Para obtener más información sobre cómo configurar su VPC de Amazon, consulte AWS PrivateLink & Snowflake en la documentación de Snowflake.

    • Necesitará la configuración de VPC de Amazon adecuada para Glue AWS AWS Glue y puntos de conexión de VPC de interfaz (AWS PrivateLink).

    • Deberá crear una conexión al catálogo de datos de Glue AWS que proporcione la información de conexión de VPC de Amazon (además del identificador de un secreto AWS Secrets Manager que defina sus credenciales de seguridad de Snowflake). Su URL cambiará cuando utilice AWS PrivateLink, tal y como se describe en la documentación de Snowflake vinculada en un artículo anterior.

    • Necesitará que la configuración de su trabajo incluya la conexión de catálogo de datos como una conexión de red adicional.

Lectura de tablas de Snowflake

Requisitos previos: una tabla de Snowflake de la que quiera leer. Necesitará el nombre de la tabla Snowflake, tableName. Necesitará la URL de SnowflakesnowflakeUrl, el nombre de usuario snowflakeUser y la contraseña snowflakePassword. Si su usuario de Snowflake no tiene establecido un espacio de nombres predeterminado, necesitará el nombre de la base de datos de Snowflake databaseName y el nombre del esquema schemaName. Además, si su usuario de Snowflake no tiene un conjunto de almacenes predeterminado, necesitará un nombre de almacén warehouseName.

Por ejemplo:

Requisitos previos adicionales: complete los pasos para gestionar credenciales de conexión con Glue AWS para configurar snowflakeUrl, snowflakeUsername y snowflakePassword. Para revisar estos pasos, consulte la sección anterior Configuración de las conexiones de Snowflake. Para seleccionar con qué conexión de red adicional nos vamos a conectar, utilizaremos el parámetro connectionName.

snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

Además, puede usar los parámetros autopushdown y query para leer una parte de una tabla de Snowflake. Esto puede ser considerablemente más eficiente que filtrar los resultados después de haberlos cargado en Spark. Considere un ejemplo en el que todas las ventas se almacenan en la misma tabla, pero solo necesita analizar las ventas de una tienda determinada los días festivos. Si esa información está almacenada en la tabla, podría utilizar la función de inserción de predicados para recuperar los resultados de la siguiente manera:

snowflake_node = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "autopushdown": "on", "query": "select * from sales where store='1' and IsHoliday='TRUE'", "connectionName": "snowflake-glue-conn", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

Escribir en tablas de Snowflake

Requisitos previos: una base de datos de Snowflake a la que desearía escribir. Necesitará un nombre de tabla actual o deseado, tableName. Necesitará la URL de SnowflakesnowflakeUrl, el nombre de usuario snowflakeUser y la contraseña snowflakePassword. Si su usuario de Snowflake no tiene establecido un espacio de nombres predeterminado, necesitará el nombre de la base de datos de Snowflake databaseName y el nombre del esquema schemaName. Además, si su usuario de Snowflake no tiene un conjunto de almacenes predeterminado, necesitará un nombre de almacén warehouseName.

Por ejemplo:

Requisitos previos adicionales: complete los pasos para gestionar credenciales de conexión con Glue AWS para configurar snowflakeUrl, snowflakeUsername y snowflakePassword. Para revisar estos pasos, consulte la sección anterior Configuración de las conexiones de Snowflake. Para seleccionar con qué conexión de red adicional nos vamos a conectar, utilizaremos el parámetro connectionName.

glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", }, )

Referencia de la opción de conexión Snowflake

El tipo de conexión Snowflake tiene las siguientes opciones de conexión:

Puede recuperar algunos de los parámetros de esta sección desde una conexión de catálogo de datos (sfUrl, sfUser, sfPassword), en cuyo caso no tendrá que proporcionarlos. Puede hacerlo al proporcionar el parámetro connectionName.

Puede recuperar algunos de los parámetros de esta sección desde un secreto AWS Secrets Manager (sfUser, sfPassword), en cuyo caso no tendrá que proporcionarlos. El secreto debe proporcionar el contenido debajo de las claves sfUser y sfPassword. Puede hacerlo al proporcionar el parámetro secretId.

Los siguientes parámetros se utilizan generalmente cuando se conecta a Snowflake.

  • sfDatabase — Obligatorio si el usuario predeterminado no está configurado en Snowflake. Se utiliza para lectura/escritura. La base de datos que se utilizará en la sesión después de conectarse.

  • sfSchema — Obligatorio si el usuario predeterminado no está configurado en Snowflake. Se utiliza para lectura/escritura. El esquema que se utilizará en la sesión después de conectarse.

  • sfWarehouse — Obligatorio si el usuario predeterminado no está configurado en Snowflake. Se utiliza para lectura/escritura. El almacén virtual predeterminado que se utilizará en la sesión después de la conexión.

  • sfRole — Obligatorio si el usuario predeterminado no está configurado en Snowflake. Se utiliza para lectura/escritura. Rol de seguridad predeterminado que se utilizará en la sesión después de conectarse.

  • sfUrl — (Obligatorio) Se utiliza para lectura/escritura. Especifica el nombre de host para su cuenta en el siguiente formato: account_identifier.snowflakecomputing.com. Para obtener más información sobre los identificadores de cuenta, consulte los identificadores de cuenta en la documentación de Snowflake.

  • sfUser — (Obligatorio) Se utiliza para lectura/escritura. Nombre de inicio de sesión del usuario de Snowflake.

  • sfPassword: (Obligatorio a menos que pem_private_key se proporcione) Se utiliza para lectura/escritura. Contraseña del usuario de Snowflake.

  • dbtable — Obligatorio cuando se trabaja con tablas completas. Se utiliza para lectura/escritura. Nombre de la tabla que se va a leer o de la tabla en la que se escriben los datos. Al leer, se recuperan todas las columnas y registros.

  • pem_private_key: se utiliza para lectura/escritura. Cadena de clave privada codificada en b64 sin cifrar. La clave privada para el usuario de Snowflake. Es habitual copiarla de un archivo PEM. Para obtener más información, consulte Key-pair authentication and key-pair rotation en la documentación de Snowflake.

  • query — Obligatorio cuando se lee con una consulta. Se usa para leer. La consulta exacta (instrucción SELECT) que se va a ejecutar

Las siguientes opciones se utilizan para configurar comportamientos específicos durante el proceso de conexión a Snowflake.

  • preactions — Se utiliza para lectura/escritura. Valores válidos: lista de declaraciones SQL separadas por punto y coma como cadena. Las declaraciones SQL se ejecutan antes de que los datos se transfieran entre Glue AWS y Snowflake. Si una instrucción contiene %s, el %s se sustituye por el nombre de la tabla a la que se hace referencia para la operación.

  • postactions — Se utiliza para lectura/escritura. Las declaraciones SQL se ejecutan después de transferir los datos entre Glue AWS y Snowflake. Si una instrucción contiene %s, el %s se sustituye por el nombre de la tabla a la que se hace referencia para la operación.

  • autopushdown — Predeterminado: "on". Valores válidos: "on", "off". Este parámetro controla si la inserción de visualización automática de consultas está habilitada. Si la función pushdown está habilitada, cuando se ejecuta una consulta en Spark, si parte de la consulta se puede “enviar” al servidor de Snowflake, se empuja hacia abajo. Esto mejora el rendimiento de algunas consultas. Para obtener información sobre si la consulta se puede enviar hacia abajo, consulte Pushdown en la documentación de Snowflake.

Además, algunas de las opciones disponibles en el conector Snowflake Spark pueden ser compatibles con Glue AWS. Para obtener más información sobre las opciones disponibles en el conector Snowflake Spark, consulte Configuración de las opciones de configuración del conector en la documentación de Snowflake.

Limitaciones del conector Snowflake

La conexión a Snowflake con Glue for Spark AWS está sujeta a las siguientes limitaciones.

  • Este conector no admite marcadores de trabajo. Para más información acerca de los marcadores de trabajo, consulte Seguimiento de los datos procesados mediante marcadores de trabajo.

  • Este conector no admite las lecturas y escrituras de Snowflake en las tablas del catálogo de datos de Glue AWS mediante los métodos create_dynamic_frame.from_catalog y write_dynamic_frame.from_catalog.

  • Este conector no admite la conexión a Snowflake con credenciales distintas del usuario y la contraseña.

  • Este conector no es compatible con los trabajos de streaming.

  • Este conector admite consultas basadas en declaraciones SELECT al recuperar información (por ejemplo, con el parámetro query). No se admiten otros tipos de consultas (como SHOW, DESC o declaraciones DML).

  • Snowflake limita el tamaño del texto de consulta (es decir, las instrucciones SQL) enviada a través de los clientes de Snowflake a 1 MB por instrucción. Para obtener más información, consulte Límites del tamaño del texto de la consulta.