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
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
En Snowflake, genere un usuario
snowflakeUser
y una contraseñasnowflakePassword
.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 clavesfUser
. -
Al seleccionar pares clave/valor, cree un par para
snowflakePassword
con la clavesfPassword
. -
Al seleccionar los pares clave/valor, puede proporcionar su almacén de Snowflake con la clave
sfWarehouse
.
-
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.comAl seleccionar un secreto AWS, proporcione un
secretName
.
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 Amazon VPC
-
Necesitará la configuración de Amazon VPC adecuada para Snowflake. Para obtener más información sobre cómo configurar su Amazon VPC, consulte AWS PrivateLink & Snowflake
en la documentación de Snowflake. -
Necesitará la configuración de Amazon VPC adecuada para AWS Glue. Configuración de puntos de conexión de la VPC de tipo interfaz (AWS PrivateLink) para AWS Glue (AWS PrivateLink).
-
Deberá crear una conexión al Catálogo de datos de AWS Glue que proporcione la información de conexión de Amazon VPC (además del identificador de un secreto de 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:
. Para obtener más información sobre los identificadores de cuenta, consulte los identificadores de cuentaaccount_identifier
.snowflakecomputing.comen 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 quepem_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 rotationen la documentación de Snowflake. query
— Obligatorio cuando se lee con una consulta. Se usa para leer. La consulta exacta (instrucciónSELECT
) 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 Pushdownen 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
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
ywrite_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ámetroquery
). No se admiten otros tipos de consultas (comoSHOW
,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
.