Conector Snowflake de Amazon Athena - Amazon Athena

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.

Conector Snowflake de Amazon Athena

El conector de Snowflake de Amazon Athena permite que Amazon Athena ejecute consultas SQL en los datos almacenados en la base de datos SQL de Snowflake o en instancias de RDS mediante JDBC.

Requisitos previos

Limitaciones

  • Las operaciones de escritura de DDL no son compatibles.

  • En una configuración de multiplexor, el bucket de vertido y el prefijo se comparten en todas las instancias de base de datos.

  • Cualquier límite de Lambda relevante. Para obtener más información, consulte Cuotas de Lambda en la Guía para desarrolladores de AWS Lambda .

  • Actualmente, se admiten vistas de Snowflake con una sola división.

  • En Snowflake, dado que los nombres de los objetos distinguen entre mayúsculas y minúsculas, dos tablas pueden tener el mismo nombre en minúsculas y mayúsculas (por ejemplo, EMPLOYEE y employee). En Consulta federada de Athena, los nombres de las tablas de esquemas se proporcionan a la función de Lambda en minúsculas. Para evitar este problema, puede proporcionar sugerencias de consulta @schemaCase para recuperar los datos de las tablas que tienen nombres que distinguen entre mayúsculas y minúsculas. A continuación, se muestran dos consultas de ejemplo con sugerencias de consulta.

    SELECT * FROM "lambda:snowflakeconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=upper"
    SELECT * FROM "lambda:snowflakeconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=lower"

Términos

Los siguientes términos hacen referencia al conector de Snowflake.

  • Instancia de base de datos: cualquier instancia de base de datos implementada en las instalaciones, en Amazon EC2 o en Amazon RDS.

  • Controlador: un controlador de Lambda que accede a la instancia de base de datos. Un controlador puede ser para los metadatos o para los registros de datos.

  • Controlador de metadatos: un controlador de Lambda que recupera los metadatos de la instancia de base de datos.

  • Controlador de registros: un controlador de Lambda que recupera registros de datos de la instancia de base de datos.

  • Controlador compuesto: un controlador de Lambda que recupera tanto los metadatos como los registros de datos de la instancia de base de datos.

  • Propiedad o parámetro: una propiedad de base de datos que usan los controladores para extraer información de la base de datos. Estas propiedades se configuran como variables de entorno de Lambda.

  • Cadena de conexión: una cadena de texto que se usa para establecer una conexión con una instancia de base de datos.

  • Catálogo: un AWS Glue catálogo que no está registrado en Athena y que es un prefijo obligatorio para la propiedad. connection_string

  • Controlador de multiplexación: un controlador de Lambda que puede aceptar y usar varias conexiones a bases de datos.

Parámetros

Use las variables de entorno de Lambda de esta sección para configurar el conector de Snowflake.

Cadena de conexión

Use una cadena de conexión JDBC con el siguiente formato para conectarse a una instancia de base de datos.

snowflake://${jdbc_connection_string}

Uso de un controlador de multiplexación

Puede usar un multiplexor para conectarse a varias instancias de base de datos con una sola función de Lambda. Las solicitudes se enrutan por nombre de catálogo. Use las siguientes clases en Lambda.

Controlador Clase
Controlador compuesto SnowflakeMuxCompositeHandler
Controlador de metadatos SnowflakeMuxMetadataHandler
Controlador de registros SnowflakeMuxRecordHandler

Parámetros del controlador de multiplexación

Parámetro Descripción
$catalog_connection_string Obligatorio. Una cadena de conexión de instancia de base de datos. Agregue el prefijo a la variable de entorno con el nombre del catálogo usado en Athena. Por ejemplo, si el catálogo registrado en Athena es mysnowflakecatalog, el nombre de la variable de entorno será mysnowflakecatalog_connection_string.
default Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:${AWS_LAMBDA_FUNCTION_NAME}.

Las siguientes propiedades de ejemplo son para una función de Lambda de Snowflake MUX que admite dos instancias de base de datos: snowflake1 (la predeterminada) y snowflake2.

Propiedad Valor
default snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1&${Test/RDS/Snowflake1}
snowflake_catalog1_connection_string snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1${Test/RDS/Snowflake1}
snowflake_catalog2_connection_string snowflake://jdbc:snowflake://snowflake2.host:port/?warehouse=warehousename&db=db1&schema=schema1&user=sample2&password=sample2

Proporcionar credenciales

Para proporcionar un nombre de usuario y una contraseña para la base de datos en la cadena de conexión JDBC, puede usar las propiedades de la cadena de conexión o AWS Secrets Manager.

  • Cadena de conexión: se pueden especificar un nombre de usuario y una contraseña como propiedades en la cadena de conexión JDBC.

    importante

    Como práctica recomendada en materia de seguridad, no utilice credenciales codificadas en las variables de entorno ni en las cadenas de conexión. Para obtener información sobre cómo transferir los secretos codificados a AWS Secrets Manager, consulte Mover los secretos codificados a AWS Secrets Manager en la Guía del usuario.AWS Secrets Manager

  • AWS Secrets Manager— Para utilizar la función Athena Federated Query, AWS Secrets Manager la VPC conectada a la función Lambda debe tener acceso a Internet o un punto final de VPC para conectarse a Secrets Manager.

    Puede introducir el nombre de un secreto en la cadena de conexión JDBC AWS Secrets Manager . El conector reemplaza el nombre del secreto por los valores username y password de Secrets Manager.

    Para las instancias de bases de datos de Amazon RDS, esta compatibilidad está estrechamente integrada. Si utiliza Amazon RDS, le recomendamos encarecidamente que utilice la rotación AWS Secrets Manager de credenciales. Si la base de datos no usa Amazon RDS, guarde las credenciales como archivos JSON con el siguiente formato:

    {"username": "${username}", "password": "${password}"}
Ejemplo de cadena de conexión con nombre secreto

La siguiente cadena tiene el nombre secreto ${Test/RDS/Snowflake1}.

snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1${Test/RDS/Snowflake1}&...

El conector usa el nombre secreto para recuperar los secretos y proporcionar el nombre de usuario y la contraseña, como en el siguiente ejemplo.

snowflake://jdbc:snowflake://snowflake1.host:port/warehouse=warehousename&db=db1&schema=schema1&user=sample2&password=sample2&...

Actualmente, Snowflake reconoce las propiedades user y password de JDBC. También acepta el nombre de usuario y la contraseña con el formato nombre de usuario/contraseña sin las claves user o password.

Uso de un controlador de conexión única

Puede usar los siguientes controladores de registros y metadatos de conexión única para conectarse a una sola instancia de Snowflake.

Tipo de controlador Clase
Controlador compuesto SnowflakeCompositeHandler
Controlador de metadatos SnowflakeMetadataHandler
Controlador de registros SnowflakeRecordHandler

Parámetros de controlador de conexión única

Parámetro Descripción
default Obligatorio. La cadena de conexión predeterminada.

Los controladores de conexión única admiten una instancia de base de datos y deben proporcionar un parámetro de cadena de conexión default. Se omiten todas las demás cadenas de conexión.

La siguiente propiedad de ejemplo es para una sola instancia de Snowflake compatible con una función de Lambda.

Propiedad Valor
default snowflake://jdbc:snowflake://snowflake1.host:port/?secret=Test/RDS/Snowflake1

Parámetros de vertido

El SDK de Lambda puede verter datos en Amazon S3. Todas las instancias de bases de datos a las que se accede mediante la misma función de Lambda se vierten en la misma ubicación.

Parámetro Descripción
spill_bucket Obligatorio. Nombre del bucket de vertido.
spill_prefix Obligatorio. Prefijo de la clave del bucket de vertido.
spill_put_request_headers (Opcional) Un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud putObject de Amazon S3 que se usa para el vertido (por ejemplo, {"x-amz-server-side-encryption" : "AES256"}). Para ver otros posibles encabezados, consulta la referencia PutObjectde la API de Amazon Simple Storage Service.

Compatibilidad con tipos de datos

En la siguiente tabla, se muestran los tipos de datos correspondientes para JDBC y Apache Arrow.

JDBC Arrow
Booleano Bit
Entero Pequeño
Short Smallint
Entero Int
Largo Bigint
float Float4
Doble Float8
Date DateDay
Timestamp DateMilli
Cadena Varchar
Bytes Varbinary
BigDecimal Decimal
ARRAY Enumeración

Conversiones de tipos de datos

Además de las conversiones de JDBC a Arrow, el conector lleva a cabo otras conversiones para que los tipos de datos de origen de Snowflake y Athena sean compatibles. Estas conversiones ayudan a garantizar que las consultas se ejecuten correctamente. En la siguiente tabla, se muestran estas conversiones.

Tipo de datos de origen (Snowflake) Tipo de datos convertido (Athena)
TIMESTAMP TIMESTAMPMILLI
FECHA TIMESTAMPMILLI
INTEGER INT
DECIMAL BIGINT
TIMESTAMP_NTZ TIMESTAMPMILLI

Todos los demás tipos de datos no admitidos se convierten a VARCHAR.

Particiones y divisiones

Las particiones se usan para determinar cómo generar divisiones para el conector. Athena crea una columna sintética de tipo varchar que representa el esquema de partición de la tabla para ayudar al conector a generar divisiones. El conector no modifica la definición de la tabla real.

Rendimiento

Para obtener un rendimiento óptimo, use filtros en las consultas siempre que sea posible. Además, recomendamos encarecidamente la creación de particiones nativas para recuperar enormes conjuntos de datos que tengan una distribución uniforme de particiones. La selección de un subconjunto de columnas acelera significativamente el tiempo de ejecución de las consultas y reduce la cantidad de datos analizados. El conector Snowflake resiste las limitaciones debidas a la simultaneidad.

El conector Snowflake de Athena inserta predicados para reducir los datos analizados en la consulta. Los predicados simples, las expresiones complejas y las cláusulas LIMIT se insertan en el conector para reducir la cantidad de datos analizados y disminuir el tiempo de ejecución de las consultas.

Cláusulas LIMIT

Una instrucción LIMIT N reduce los datos analizados en la consulta. Con la inserción LIMIT N, el conector devuelve solo las filas N a Athena.

Predicados

Un predicado es una expresión de la cláusula WHERE de una consulta SQL que da como resultado un valor booleano y filtra las filas en función de varias condiciones. El conector Snowflake de Athena puede combinar estas expresiones e insertarlas directamente en Snowflake para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Snowflake de Athena admiten la inserción de predicados:

  • Booleano: AND, OR, NOT.

  • Igualdad: EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, IS_DISTINCT_FROM, NULL_IF, IS_NULL.

  • Aritmética: ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.

  • Otros: LIKE_PATTERN, IN.

Ejemplo de inserción combinada

Para mejorar las capacidades de consulta, combine los tipos de inserciones, como en el siguiente ejemplo:

SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') LIMIT 10;

Información sobre licencias

Al utilizar este conector, usted reconoce la inclusión de componentes de terceros, cuya lista puede consultarse en el archivo pom.xml de este conector, y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo LICENSE.txt de GitHub .com.

Véase también

Para obtener información sobre la versión más reciente del controlador JDBC, consulte el archivo pom.xml del conector Snowflake en .com. GitHub

Para obtener información adicional sobre este conector, visite el sitio correspondiente en .com. GitHub