Conector para Redshift de Amazon Athena
El conector de Amazon Athena Redshift permite a Amazon Athena acceder a las bases de datos de Amazon Redshift y Amazon Redshift sin servidor, incluidas las vistas de Redshift sin servidor. Se puede conectar a cualquiera de los servicios con los ajustes de configuración de la cadena de conexión JDBC que se describen en esta página.
Este conector se puede registrar en el Catálogo de datos de Glue como un catálogo federado. Admite los controles de acceso a los datos definidos en Lake Formation a nivel de catálogo, base de datos, tabla, columna, fila y etiqueta. Este conector utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue.
Requisitos previos
Implemente el conector en su Cuenta de AWS mediante la consola de Athena o AWS Serverless Application Repository. Para obtener más información, consulte Cómo crear una conexión de origen de datos o Uso del AWS Serverless Application Repository para implementar un conector de origen de datos.
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.
-
Dado que Redshift no admite particiones externas, todos los datos especificados por una consulta se recuperan cada vez.
-
Al igual que Redshift, Athena considera que los espacios finales de los tipos
CHARde Redshift son semánticamente insignificantes a efectos de longitud y comparación. Tenga en cuenta que esto solo se aplica a los tiposCHAR, pero no a los tiposVARCHAR. Athena ignora los espacios finales del tipoCHAR, pero los considera importantes para el tipoVARCHAR.
Términos
Los siguientes términos hacen referencia al conector de Redshift.
-
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 catálogo ajeno a AWS Glue registrado en Athena 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
Utilice los parámetros de esta sección para configurar el conector Redshift.
Recomendamos configurar un conector de Redshift por medio de un objeto de conexiones de Glue. Para ello, establezca la variable de entorno glue_connection de la función de Lambda del conector de Amazon Redshift con el nombre de la conexión de Glue que se va a utilizar.
Propiedades de las conexiones de Glue
Utilice el siguiente comando para obtener el esquema de un objeto de conexión de Glue. Este esquema contiene todos los parámetros que puede utilizar para controlar su conexión.
aws glue describe-connection-type --connection-type REDSHIFT
Propiedades del entorno Lambda
glue_connection: especifica el nombre de la conexión de Glue asociada al conector federado.
nota
-
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
-
El conector de Redshift creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
-
El conector de Redshift creado por medio de conexiones de Glue solo es compatible con
ConnectionSchemaVersion2.
nota
Los conectores de orígenes de datos de Athena creados a partir del 3 de diciembre de 2024 utilizan conexiones de AWS Glue.
Los nombres y definiciones de los parámetros que se indican a continuación corresponden a conectores de orígenes de datos de Athena creados sin una conexión de Glue asociada. Utilice los siguientes parámetros solo cuando implemente de forma manual una versión anterior de un conector de origen de datos de Athena o cuando no se especifique la propiedad de entorno de glue_connection.
Propiedades del entorno Lambda
-
spill_bucket: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
-
spill_prefix: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada
spill_bucketllamadaathena-federation-spill. Le recomendamos configurar un ciclo de vida de almacenamiento de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas. -
spill_put_request_headers: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud
putObjectde Amazon S3 que se usa para el vertidos (por ejemplo,{"x-amz-server-side-encryption" : "AES256"}). Para ver otros encabezados posibles, consulte PutObject en la referencia de la API de Amazon Simple Storage Service. -
kms_key_id: (opcional) de forma predeterminada, los datos que se vierten a Amazon S3 se cifran mediante el modo de cifrado autenticado AES-GCM y una clave generada aleatoriamente. Para que la función de Lambda use claves de cifrado más seguras generadas por KMS, como
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, puede especificar un ID de clave de KMS. -
disable_spill_encryption: (opcional) cuando se establece en
True, desactiva el cifrado del vertido. El valor predeterminado esFalse, de modo que los datos que se vierten a S3 se cifran mediante AES-GCM, ya sea mediante una clave generada aleatoriamente o KMS para generar claves. La desactivación del cifrado de vertido puede mejorar el rendimiento, especialmente si su ubicación de vertido usa cifrado del servidor. -
disable_glue: (opcional) si está presente y se establece en true (verdadero), el conector no intentará recuperar metadatos complementarios de AWS Glue.
-
glue_catalog: (opcional) use esta opción para especificar un catálogo de AWS Glue entre cuentas. De forma predeterminada, el conector intenta obtener los metadatos de su propia cuenta de AWS Glue.
Cadena de conexión
Use una cadena de conexión JDBC con el siguiente formato para conectarse a una instancia de base de datos.
redshift://${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 | RedshiftMuxCompositeHandler |
| Controlador de metadatos | RedshiftMuxMetadataHandler |
| Controlador de registros | RedshiftMuxRecordHandler |
Parámetros del controlador de multiplexación
| Parámetro | Descripción |
|---|---|
$ |
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 myredshiftcatalog, el nombre de la variable de entorno será myredshiftcatalog_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 Redshift MUX que admite dos instancias de base de datos: redshift1 (la predeterminada) y redshift2.
| Propiedad | Valor |
|---|---|
default |
redshift://jdbc:redshift://redshift1.host:5439/dev?user=sample2&password=sample2 |
redshift_catalog1_connection_string |
redshift://jdbc:redshift://redshift1.host:3306/default?${Test/RDS/Redshift1} |
redshift_catalog2_connection_string |
redshift://jdbc:redshift://redshift2.host:3333/default?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 secretos codificados a AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.
-
AWS Secrets Manager: para utilizar la característica Consulta federada de Athena con AWS Secrets Manager, la VPC conectada a la función de Lambda debe tener acceso a Internet
o un punto de conexión de VPC para conectarse a Secrets Manager. Puede poner el nombre de un secreto en AWS Secrets Manager, en la cadena de conexión JDBC. El conector reemplaza el nombre del secreto por los valores
usernameypasswordde Secrets Manager.Para las instancias de bases de datos de Amazon RDS, esta compatibilidad está estrechamente integrada. Si usa Amazon RDS, le recomendamos encarecidamente que use AWS Secrets Manager y la rotación 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/ Redshift1}.
redshift://jdbc:redshift://redshift1.host:3306/default?...&${Test/RDS/Redshift1}&...
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.
redshift://jdbc:redshift://redshift1.host:3306/default?...&user=sample2&password=sample2&...
Actualmente, el conector de Redshift reconoce las propiedades user y password de JDBC.
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 |
| Marca de tiempo | DateMilli |
| Cadena | Varchar |
| Bytes | Varbinary |
| BigDecimal | Decimal |
| ARRAY | Enumeración |
Particiones y divisiones
Redshift no admite particiones externas. Para obtener información acerca de los problemas relacionados con el rendimiento, consulte Rendimiento.
Rendimiento
El conector Redshift de Athena inserta predicados para reducir los datos analizados en la consulta. Las cláusulas LIMIT, las cláusulas ORDER BY, los predicados simples y las expresiones complejas se insertan en el conector para reducir la cantidad de datos analizados y disminuir el tiempo de ejecución de las consultas. Sin embargo, seleccionar un subconjunto de columnas da como resultado que en ocasiones se prolongue el tiempo de ejecución de las consultas. Amazon Redshift es particularmente susceptible a la ralentización en la ejecución de consultas cuando se ejecutan varias de estas simultáneamente.
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.
Consultas N principales
Una consulta N principal especifica el orden del conjunto de resultados y un límite en la cantidad de filas devueltas. Puede usar este tipo de consulta para determinar los valores N principales máximos o N principales mínimos de sus conjuntos de datos. Con la inserción N principal, el conector devuelve solo las filas N ordenadas 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 Redshift de Athena puede combinar estas expresiones e insertarlas directamente en Redshift para mejorar la funcionalidad y reducir la cantidad de datos analizados.
Los siguientes operadores del conector Redshift 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%') ORDER BY col_a DESC LIMIT 10;
Para obtener información sobre cómo usar la inserción de predicados a fin de mejorar el rendimiento en las consultas federadas, incluido Amazon Redshift, consulte el artículo Mejorar las consultas federadas con la inserción de predicados en Amazon Athena
Consultas de acceso directo
El conector Redshift admite consultas de acceso directo. Las consultas de acceso directo utilizan una función de tabla para enviar la consulta completa al origen de datos para su ejecución.
Para usar consultas de acceso directo con Redshift, puede utilizar la siguiente sintaxis:
SELECT * FROM TABLE( system.query( query => 'query string' ))
El siguiente ejemplo de consulta envía una consulta a un origen de datos en Redshift. La consulta selecciona todas las columnas de la tabla customer y limita los resultados a 10.
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
Recursos adicionales
Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo pom.xml
Para obtener más información acerca de este conector, consulte el sitio correspondiente