Conector para Vertica de Amazon Athena - Amazon Athena

Conector para Vertica de Amazon Athena

Vertica es una plataforma de bases de datos en columnas que se puede implementar en la nube o en las instalaciones que admite almacenamiento de datos a escala de exabyte. Puede utilizar el conector Amazon Athena Vertica en consultas federadas para consultar orígenes de datos Vertica desde Athena. Por ejemplo, puede ejecutar consultas analíticas a través de un almacenamiento de datos en Vertica y un lago de datos en Amazon S3.

Requisitos previos

Limitaciones

  • Dado que el conector de Vertica de Athena usa Amazon S3 Select para leer archivos Parquet de Amazon S3, el rendimiento del conector puede ser lento. Cuando consulte tablas grandes, le recomendamos usar una consulta CREAR TABLA COMO (SELECCIONAR...) y predicados SQL.

  • Actualmente, debido a un problema conocido en la consulta federada de Athena, el conector hace que Vertica exporte todas las columnas de la tabla consultada a Amazon S3, pero solo las columnas consultadas se pueden ver en los resultados de la consola de Athena.

  • Las operaciones de escritura de DDL no son compatibles.

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

Flujo de trabajo

En el siguiente diagrama, se muestra el flujo de trabajo de una consulta que usa el conector de Vertica.

Flujo de trabajo de una consulta de Vertica de Amazon Athena
  1. Se emite una consulta SQL en una o más tablas de Vertica.

  2. El conector analiza la consulta SQL para enviar la parte relevante a Vertica a través de la conexión JDBC.

  3. Las cadenas de conexión usan el nombre de usuario y la contraseña almacenados en AWS Secrets Manager para acceder a Vertica.

  4. El conector envuelve la consulta SQL con un comando EXPORT de Vertica, como se muestra en el siguiente ejemplo.

    EXPORT TO PARQUET (directory = 's3://amzn-s3-demo-bucket/folder_name, Compression='Snappy', fileSizeMB=64) OVER() as SELECT PATH_ID, ... SOURCE_ITEMIZED, SOURCE_OVERRIDE FROM DELETED_OBJECT_SCHEMA.FORM_USAGE_DATA WHERE PATH_ID <= 5;
  5. Vertica procesa la consulta SQL y envía el conjunto de resultados a un bucket de Amazon S3. Para obtener un mejor rendimiento, Vertica usa la opción EXPORT para paralelizar la operación de escritura de varios archivos Parquet.

  6. Athena analiza el bucket de Amazon S3 para determinar el número de archivos que se van a leer para el conjunto de resultados.

  7. Athena hace varias llamadas a la función de Lambda y usa Amazon S3 Select para leer los archivos Parquet del conjunto de resultados. Varias llamadas permiten a Athena paralelizar la lectura de los archivos de Amazon S3 y lograr un rendimiento de hasta 100 GB por segundo.

  8. Athena procesa los datos que devuelve Vertica con los datos escaneados del lago de datos y devuelve el resultado.

Términos

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

  • Instancia de base de datos: cualquier instancia de una base de datos de Vertica implementada en Amazon EC2.

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

Parámetros

El conector de Vertica de Amazon Athena expone varias opciones de configuración a través de variables de entorno de Lambda. Puede usar las siguientes variables de entorno de Lambda para configurar el conector.

  • AthenaCatalogName: nombre de la función de Lambda

  • ExportBucket: el bucket de Amazon S3 en el que se exportan los resultados de consulta de Vertica.

  • SpillBucket: nombre del bucket de Amazon S3 en el que esta función puede verter datos.

  • SpillPrefix: el prefijo de la ubicación de SpillBucket en la que esta función puede verter datos.

  • SecurityGroupIds: uno o más ID que corresponden al grupo de seguridad que se debe aplicar a la función de Lambda (por ejemplo, sg1, sg2 o sg3).

  • SubnetIds: uno o más ID de subred correspondientes a la subred que la función de Lambda puede usar para acceder al origen de datos (por ejemplo, subnet1 o subnet2).

  • SecretNameOrPrefix: el nombre o prefijo de un conjunto de nombres de Secrets Manager al que tiene acceso esta función (por ejemplo, vertica-*)

  • VerticaConnectionString: los detalles de conexión de Vertica que se usarán de forma predeterminada si no se ha definido ninguna conexión específica del catálogo. Opcionalmente, la cadena puede usar la sintaxis de AWS Secrets Manager (por ejemplo, ${secret_name}).

  • ID de VPC: el ID de la VPC que se asocia a la función de Lambda.

Cadena de conexión

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

vertica://jdbc:vertica://host_name:port/database?user=vertica-username&password=vertica-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 Vertica.

Tipo de controlador Clase
Controlador compuesto VerticaCompositeHandler
Controlador de metadatos VerticaMetadataHandler
Controlador de registros VerticaRecordHandler

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.

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 username y password de 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 nombres secretos

La siguiente cadena tiene los nombres secretos ${vertica-username} y ${vertica-password}.

vertica://jdbc:vertica://host_name:port/database?user=${vertica-username}&password=${vertica-password}

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.

vertica://jdbc:vertica://host_name:port/database?user=sample-user&password=sample-password

Actualmente, el conector de Vertica reconoce las propiedades vertica-username y vertica-password de JDBC.

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 encabezados posibles, consulte PutObject en la referencia de la API de Amazon Simple Storage Service.

Compatibilidad con tipos de datos

En la siguiente tabla, se muestran los tipos de datos admitidos para el conector de Vertica.

Booleano
BigInt
Short
Entero
Largo
Flotante
Doble
Date
Varchar
Bytes
BigDecimal
TimeStamp como Varchar

Rendimiento

La función de Lambda inserta proyecciones para reducir los datos analizados por la consulta. Las cláusulas LIMIT reducen la cantidad de datos analizados; sin embargo, si no proporciona un predicado, debe tener en cuenta que las consultas SELECT con una cláusula LIMIT analizan al menos 16 MB de datos. El conector para Vertica resiste las limitaciones debidas a la simultaneidad.

Consultas de acceso directo

El conector para Vertica 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 Vertica, puede utlizar la siguiente sintaxis:

SELECT * FROM TABLE( system.query( query => 'query string' ))

En el siguiente ejemplo de consulta, se envía una consulta a un origen de datos de Vertica. 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' ))

Información sobre licencias

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

Recursos adicionales de

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

Para obtener más información acerca de este conector, consulte el sitio correspondiente en GitHub.com y Consulta de un origen de datos de Vertica en Amazon Athena mediante el SDK de consulta federada de Athena en el Blog de macrodatos de AWS.