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
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 Implementación de un conector de origen de datos o Uso del AWS Serverless Application Repository para implementar un conector de origen de datos.
Antes de usar este conector, debe configurar una VPC y un grupo de seguridad. Para obtener más información, consulte Creación de una VPC para un conector de origen de datos.
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.
-
Se emite una consulta SQL en una o más tablas de Vertica.
-
El conector analiza la consulta SQL para enviar la parte relevante a Vertica a través de la conexión JDBC.
-
Las cadenas de conexión usan el nombre de usuario y la contraseña almacenados en AWS Secrets Manager para acceder a Vertica.
-
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; -
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. -
Athena analiza el bucket de Amazon S3 para determinar el número de archivos que se van a leer para el conjunto de resultados.
-
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.
-
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
osg3
). -
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
osubnet2
). -
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
ypassword
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
Recursos adicionales de
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