

# Uso de consulta federada de Amazon Athena
<a name="federated-queries"></a>

Si tiene datos en orígenes distintos de Amazon S3, puede utilizar la consulta federada de Athena para consultar los datos en el lugar o crear canalizaciones que extraen datos de varios orígenes de datos y almacenarlos en Amazon S3. Con la consulta federada de Athena, puede ejecutar consultas SQL en datos almacenados en orígenes de datos relaciones, no relacionales, personalizados y de objetos.

Athena utiliza *conectores de origen de datos* que se ejecutan en AWS Lambda para ejecutar consultas federadas. Un conector de origen de datos es un fragmento de código que puede traducirse entre el origen de datos de destino y Athena. Puede pensar en un conector como una extensión del motor de consultas de Athena. Existen conectores de orígenes de datos de Athena para orígenes de datos como Amazon CloudWatch Logs, Amazon DynamoDB, Amazon DocumentDB y Amazon RDS, y orígenes de datos relacionales compatibles con JDBC como MySQL y PostgreSQL con licencia Apache 2.0. También puede utilizar el SDK de Athena Query Federation para escribir conectores personalizados. Para elegir, configurar e implementar un conector de origen de datos en su cuenta, puede utilizar las consolas Athena y Lambda o AWS Serverless Application Repository. Después de implementar conectores de origen de datos, el conector se asocia a un catálogo que puede especificar en consultas SQL. Puede combinar instrucciones SQL de varios catálogos y abarcar varios orígenes de datos con una sola consulta.

Cuando se envía una consulta en un origen de datos, Athena invoca el conector correspondiente para identificar partes de las tablas que deben leerse, administrar el paralelismo y derribar los predicados de filtro. Según el usuario que envía la consulta, los conectores pueden proporcionar o restringir el acceso a elementos de datos específicos. Los conectores usan Apache Arrow como formato para devolver los datos solicitados en una consulta, lo que permite que los conectores se implementen en lenguajes como C, C\$1\$1, Java, Python y Rust. Dado que los conectores se ejecutan en Lambda, se pueden utilizar para acceder a datos desde cualquier origen de datos en la nube o en las instalaciones accesible desde Lambda.

Para escribir su propio conector de origen de datos, puede utilizar el SDK de Athena Query Federation para personalizar uno de los conectores prediseñados que Amazon Athena proporciona y mantiene. Puede modificar una copia del código de origen desde el [repositorio de GitHub](https://github.com/awslabs/aws-athena-query-federation/wiki/Available-Connectors) y luego, utilizar la [herramienta de publicación de conectores](https://github.com/awslabs/aws-athena-query-federation/wiki/Connector_Publish_Tool) para crear su propio paquete de AWS Serverless Application Repository. 

**nota**  
Es posible que los desarrolladores de terceros hayan utilizado el SDK de Athena Query Federation para escribir conectores de origen de datos. Trabaje con su proveedor de conectores en caso de problemas de soporte o licencia con estos conectores de origen de datos. no prueba ni admite estos conectores AWS. 

Para obtener una lista de conectores de orígenes de datos escritos y probados por Athena, consulte [Conectores de orígenes de datos disponibles](connectors-available.md).

Para obtener información sobre cómo escribir su propio conector de origen de datos, consulte [Ejemplo de conector Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-example) en GitHub.

## Consideraciones y limitaciones
<a name="connect-to-a-data-source-considerations"></a>
+ **Versiones del motor**: la consulta federada de Athena solo se admite en la versión 2 o una versión posterior del motor de Athena. Para obtener más información acerca de las versiones de motor Athena, consulte [Control de versiones del motor Athena](engine-versions.md).
+ **Vistas**: puede crear y consultar vistas en orígenes de datos federados. Las vistas federadas se almacenan en el AWS Glue, no en el origen de datos subyacente. Para obtener más información, consulte [Consulta de vistas federadas](running-federated-queries.md#running-federated-queries-federated-views).
+ **Identificadores delimitados**: los identificadores delimitados (también conocidos como identificadores entre comillas) comienzan y finalizan con comillas dobles ("). Actualmente, los identificadores delimitados no son compatibles con las consultas federadas en Athena.
+ **Operaciones de escritura**: las operaciones de escritura como [INSERT INTO](insert-into.md) no son compatibles. Si se intenta hacerlo, puede aparecer el mensaje de error This operation is currently not supported for external catalogs (Esta operación no es compatible actualmente con catálogos externos).
+  **Precios**: para obtener información sobre precios, consulte [Precios de Amazon Athena](https://aws.amazon.com/athena/pricing/).
+ **Controlador JDBC**: para utilizar el controlador JDBC con consultas federadas o un [metaalmacén externo de Hive](connect-to-data-source-hive.md), incluya `MetadataRetrievalMethod=ProxyAPI` en su cadena de conexión JDBC. Para obtener información acerca del controlador JDBC, consulte [Conexión a Amazon Athena con JDBC](connect-with-jdbc.md). 
+ **Secrets Manager**: para utilizar la característica de consulta federada de Athena con AWS Secrets Manager, debe configurar un punto de conexión privado de Amazon VPC para Secrets Manager. Para obtener más información, consulte [Creación de un punto de conexión privado de VPC de Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint-create) en la *Guía del usuario de AWS Secrets Manager*.

## Permisos necesarios
<a name="connect-to-a-data-source-permissions"></a>

Los conectores de origen de datos pueden requerir acceso a los siguientes recursos para funcionar correctamente. Si utiliza un conector prediseñado, compruebe la información del conector para asegurarse de que ha configurado correctamente la VPC. Además, asegúrese de que las entidades principales de IAM que ejecutan consultas y crean conectores dispongan de privilegios para las acciones necesarias. Para obtener más información, consulte [Permiso de acceso a la consulta federada de Athena: políticas de ejemplo](federated-query-iam-access.md).
+ **Amazon S3**: además de escribir los resultados de la consulta en la ubicación de resultados de la consulta de Athena en Amazon S3, los conectores de datos también escriben en un bucket de vertido en Amazon S3. Se requiere conectividad y permisos para esta ubicación de Amazon S3. Recomendamos emplear cifrado para los datos temporales almacenados en disco en cada conector y [configurar el ciclo de vida de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) para programar la expiración de los datos que ya no sean necesarios.
+ **Athena**: los orígenes de datos necesitan conectividad con Athena y viceversa para verificar el estado de la consulta y evitar el sobreescaneo.
+ **AWS Glue Data Catalog** – se requiere conectividad y permisos si el conector utiliza el catálogo de datos para metadatos complementarios o principales.
+ **Amazon ECR**: las funciones de Lambda del conector del origen de datos utilizan una imagen de Amazon ECR de un repositorio de Amazon ECR. El usuario que implemente el conector debe tener los permisos `ecr:BatchGetImage` y `ecr:GetDownloadUrlForLayer`. Para obtener más información, consulte [Permisos de Amazon ECR](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#gettingstarted-images-permissions) en la *Guía para desarrolladores de AWS Lambda*.

## Videos
<a name="connect-to-a-data-source-videos"></a>

Vea los siguientes videos para obtener más información sobre el uso de la consulta federada de Athena.

**Video: Analyze Results of Federated Query in Amazon Athena in Quick**  
En el siguiente video, se muestra cómo analizar los resultados de una consulta federada de Athena en Quick.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/HyM5d0TmwAQ/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/HyM5d0TmwAQ)


**Video: Canalización de análisis de juegos**  
En el siguiente video, se muestra cómo implementar una canalización de datos escalable sin servidor para capturar, almacenar y analizar datos de telemetría de juegos y servicios mediante consultas federadas de Amazon Athena.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/xcS-flUMVbs/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/xcS-flUMVbs)


# Conectores de orígenes de datos disponibles
<a name="connectors-available"></a>

En esta sección se muestran los conectores de origen de datos de Athena prediseñados que se pueden utilizar para consultar una variedad de orígenes de datos externos en Amazon S3. Para utilizar un conector en sus consultas de Athena, configúrelo e impleméntelo en su cuenta. 

## Consideraciones y limitaciones
<a name="connectors-available-considerations"></a>
+ Algunos conectores creados previamente requieren que se cree una VPC y un grupo de seguridad antes de utilizar el conector. Para obtener información sobre la creación de las VPC, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md). 
+ Para utilizar la característica de consulta federada de Athena con AWS Secrets Manager, debe configurar un punto de conexión privado de Amazon VPC para Secrets Manager. Para obtener más información, consulte [Creación de un punto de conexión privado de VPC de Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint-create) en la *Guía del usuario de AWS Secrets Manager*. 
+ En el caso de los conectores que no admiten la inserción de predicados, las consultas que incluyen un predicado tardan más en ejecutarse. Para conjuntos de datos pequeños, se escanean muy pocos datos y las consultas tardan un promedio de 2 minutos, aproximadamente. Sin embargo, para conjuntos de datos grandes, muchas consultas pueden agotar el tiempo de espera.
+ Algunos orígenes de datos federados utilizan una terminología diferente de la de Athena para referirse a objetos de datos. Para obtener más información, consulte [Descripción de los calificadores de nombres de tablas federadas](tables-qualifiers.md).
+ Actualizamos nuestros conectores periódicamente en función de las actualizaciones de la base de datos o del proveedor de orígenes de datos. No admitimos orígenes de datos que se encuentren al final de su vida útil para recibir soporte.
+ En el caso de los conectores que no admiten la paginación al enumerar tablas, el servicio web puede agotar el tiempo de espera si la base de datos tiene muchas tablas y metadatos. Los siguientes conectores admiten la paginación de las tablas de listados:
  + DocumentDB
  + DynamoDB
  + MySQL
  + OpenSearch
  + Oracle
  + PostgreSQL
  + Redshift
  + SQL Server

## Modos de resolución de casos en el SDK de federación
<a name="case-resolver-modes"></a>

El SDK de federación admite los siguientes modos estandarizados de resolución de mayúsculas y minúsculas para nombres de esquemas y tablas:
+ `NONE`: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados.
+ `LOWER`: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.
+ `UPPER`: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
+ `ANNOTATION`: este modo se mantiene únicamente por compatibilidad con versiones anteriores y es compatible exclusivamente con los conectores existentes de Snowflake y SAP HANA.
+ `CASE_INSENSITIVE_SEARCH`: realiza búsquedas que no distinguen entre mayúsculas y minúsculas en los nombres de esquemas y tablas.

## Compatibilidad de los conectores con los modos de resolución de mayúsculas y minúsculas
<a name="connector-support-matrix"></a>

### Compatibilidad con el modo básico
<a name="basic-mode-support"></a>

Todos los conectores JDBC son compatibles con los siguientes modos básicos:
+ `NONE`
+ `LOWER`
+ `UPPER`

### Compatibilidad con el modo de anotación
<a name="annotation-mode-support"></a>

Solo los siguientes conectores son compatibles con el modo de `ANNOTATION`:
+ Snowflake
+ SAP HANA

**nota**  
Se recomienda usar CASE\$1INSENSITIVE\$1SEARCH en lugar de ANNOTATION.

### Compatibilidad con búsquedas sin distinción entre mayúsculas y minúsculas
<a name="case-insensitive-search-support"></a>

Los siguientes conectores admiten `CASE_INSENSITIVE_SEARCH`:
+ DataLake Gen2
+ Snowflake
+ Oracle
+ Synapse
+ MySQL
+ PostgreSQL
+ Redshift
+ ClickHouse
+ SQL Server
+ DB2

## Limitaciones de los modos de resolución de mayúsculas y minúsculas
<a name="case-resolver-limitations"></a>

Tenga en cuenta las siguientes limitaciones al usar los modos de resolución de mayúsculas y minúsculas:
+ Al usar el modo `LOWER`, el nombre del esquema y todas las tablas dentro de este deben estar en minúsculas.
+ Al usar el modo `UPPER`, el nombre del esquema y todas las tablas dentro de este deben estar en mayúsculas.
+ Cuando se utiliza `CASE_INSENSITIVE_SEARCH`:
  + Los nombres de los esquemas deben ser únicos
  + Los nombres de las tablas dentro de un esquema deben ser únicos (por ejemplo, no se puede tener tanto “Apple” como “APPLE”)
+ Límites de la integración de Glue:
  + Glue solo admite nombres en minúsculas
  + Solo funcionarán los modos `NONE` o `LOWER` al registrar la función de Lambda en GlueDataCatalog/LakeFormation.

## Información adicional
<a name="connectors-available-additional-resources"></a>
+ Para obtener información sobre la implementación de un conector de origen de datos de Athena, consulte [Uso de consulta federada de Amazon Athena](federated-queries.md). 
+ Para obtener información sobre las consultas que utilizan conectores de orígenes de datos de Athena, consulte [Ejecución de consultas federadas](running-federated-queries.md).

**Topics**
+ [Consideraciones y limitaciones](#connectors-available-considerations)
+ [Modos de resolución de casos en el SDK de federación](#case-resolver-modes)
+ [Compatibilidad de los conectores con los modos de resolución de mayúsculas y minúsculas](#connector-support-matrix)
+ [Limitaciones de los modos de resolución de mayúsculas y minúsculas](#case-resolver-limitations)
+ [Información adicional](#connectors-available-additional-resources)
+ [Azure Data Lake Storage](connectors-adls-gen2.md)
+ [Azure Synapse](connectors-azure-synapse.md)
+ [Cloudera Hive](connectors-cloudera-hive.md)
+ [Cloudera Impala](connectors-cloudera-impala.md)
+ [CloudWatch](connectors-cloudwatch.md)
+ [Métricas de CloudWatch](connectors-cwmetrics.md)
+ [CMDB](connectors-cmdb.md)
+ [Db2](connectors-ibm-db2.md)
+ [Db2 iSeries](connectors-ibm-db2-as400.md)
+ [DocumentDB](connectors-docdb.md)
+ [DynamoDB](connectors-dynamodb.md)
+ [Google BigQuery](connectors-bigquery.md)
+ [Google Cloud Storage](connectors-gcs.md)
+ [HBase](connectors-hbase.md)
+ [Hortonworks](connectors-hortonworks.md)
+ [Kafka](connectors-kafka.md)
+ [MSK](connectors-msk.md)
+ [MySQL](connectors-mysql.md)
+ [Neptune](connectors-neptune.md)
+ [OpenSearch](connectors-opensearch.md)
+ [Oracle](connectors-oracle.md)
+ [PostgreSQL](connectors-postgresql.md)
+ [Redis OSS](connectors-redis.md)
+ [Redshift](connectors-redshift.md)
+ [SAP HANA](connectors-sap-hana.md)
+ [Snowflake](connectors-snowflake.md)
+ [SQL Server](connectors-microsoft-sql-server.md)
+ [Teradata](connectors-teradata.md)
+ [Timestream](connectors-timestream.md)
+ [TPC-DS](connectors-tpcds.md)
+ [Vertica](connectors-vertica.md)

**nota**  
El conector [AthenaJdbcConnector](https://serverlessrepo.aws.amazon.com/applications/us-east-1/292517598671/AthenaJdbcConnector) (versión más reciente, 2022.4.1) ha quedado obsoleto. En su lugar, use un conector específico para bases de datos, como los de [MySQL](connectors-mysql.md), [Redshift](connectors-redshift.md) o [PostgreSQL](connectors-postgresql.md).

# Conector de Azure Data Lake Storage (ADLS) Gen2 de Amazon Athena
<a name="connectors-adls-gen2"></a>

El conector Gen2 de [Azure Data Lake Storage (ADLS)](https://docs.microsoft.com/en-us/azure/databricks/data/data-sources/azure/adls-gen2/) de Amazon Athena permite que Amazon Athena ejecute consultas SQL en los datos almacenados en ADLS. Athena no puede acceder directamente a los archivos almacenados en el lago de datos. 

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.
+ **Flujo de trabajo**: el conector implementa la interfaz JDBC, que utiliza el controlador `com.microsoft.sqlserver.jdbc.SQLServerDriver`. El conector pasa las consultas al motor de Azure Synapse, que luego accede al lago de datos. 
+ **Gestión de datos y S3**: por lo general, el conector de Lambda consulta los datos directamente sin transferirlos a Amazon S3. Sin embargo, cuando los datos devueltos por la función de Lambda superan los límites de Lambda, los datos se escriben en el bucket de distribución de Amazon S3 que especifique para que Athena pueda leer el exceso.
+ **Autenticación AAD**: la AAD se puede utilizar como método de autenticación para el conector de Azure Synapse. Para utilizar AAD, la cadena de conexión JDBC que utiliza el conector debe contener los parámetros URL `authentication=ActiveDirectoryServicePrincipal`, `AADSecurePrincipalId` y `AADSecurePrincipalSecret`. Estos parámetros se pueden transferir directamente o mediante Secrets Manager.

## Requisitos previos
<a name="connectors-datalakegentwo-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-adls-gen2-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Los tipos de datos de marca de fecha y hora en condiciones de filtro se deben convertir a los tipos de datos adecuados.

## Términos
<a name="connectors-adls-gen2-terms"></a>

Los siguientes términos hacen referencia al conector de Azure Data Lake Storage Gen2.
+ **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.

## Parameters
<a name="connectors-adls-gen2-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Azure Data Lake Storage Gen2.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="adls-gen2-gc"></a>

Recomendamos configurar un conector de Azure Data Lake Storage Gen2 mediante un objeto de conexiones de Glue. Para ello, configure la variable de entorno `glue_connection` de la función de Lambda del conector de Azure Data Lake Storage Gen2 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 DATALAKEGEN2
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Azure Data Lake Storage Gen2 creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Azure Data Lake Storage Gen2 creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="adls-gen2-legacy"></a>

#### Cadena de conexión
<a name="connectors-adls-gen2-connection-string"></a>

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

```
datalakegentwo://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-adls-gen2-using-a-multiplexing-handler"></a>

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 | DataLakeGen2MuxCompositeHandler | 
| Controlador de metadatos | DataLakeGen2MuxMetadataHandler | 
| Controlador de registros | DataLakeGen2MuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-adls-gen2-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 mydatalakegentwocatalog, el nombre de la variable de entorno será mydatalakegentwocatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de DataLakeGen2 MUX que admite dos instancias de base de datos: `datalakegentwo1` (la predeterminada) y `datalakegentwo2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | datalakegentwo://jdbc:sqlserver://adlsgentwo1.hostname:port;databaseName=database\$1name;\$1\$1secret1\$1name\$1 | 
| datalakegentwo\$1catalog1\$1connection\$1string | datalakegentwo://jdbc:sqlserver://adlsgentwo1.hostname:port;databaseName=database\$1name;\$1\$1secret1\$1name\$1 | 
| datalakegentwo\$1catalog2\$1connection\$1string | datalakegentwo://jdbc:sqlserver://adlsgentwo2.hostname:port;databaseName=database\$1name;\$1\$1secret2\$1name\$1 | 

##### Proporcionar credenciales
<a name="connectors-adls-gen2-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${secret1_name}`.

```
datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=database_name;${secret1_name}
```

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.

```
datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=database_name;user=user_name;password=password
```

#### Uso de un controlador de conexión única
<a name="connectors-adls-gen2-using-a-single-connection-handler"></a>

Puede usar los siguientes controladores de registros y metadatos de conexión única para conectarse a una sola instancia de Azure Data Lake Storage Gen2.


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | DataLakeGen2CompositeHandler | 
| Controlador de metadatos | DataLakeGen2MetadataHandler | 
| Controlador de registros | DataLakeGen2RecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-adls-gen2-single-connection-handler-parameters"></a>


****  

| 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 Azure Data Lake Storage Gen2 compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | datalakegentwo://jdbc:sqlserver://hostname:port;databaseName=;\$1\$1secret\$1name\$1 | 

#### Parámetros de vertido
<a name="connectors-adls-gen2-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-adls-gen2-data-type-support"></a>

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


****  

| ADLS Gen2 | Arrow | 
| --- | --- | 
| bit | TINYINT | 
| tinyint | SMALLINT | 
| smallint | SMALLINT | 
| int | INT | 
| bigint | BIGINT | 
| decimal | DECIMAL | 
| numérico | FLOAT8 | 
| smallmoney | FLOAT8 | 
| money | DECIMAL | 
| float[24] | FLOAT4 | 
| float[53] | FLOAT8 | 
| real | FLOAT4 | 
| datetime | Date(MILLISECOND) | 
| datetime2 | Date(MILLISECOND) | 
| smalldatetime | Date(MILLISECOND) | 
| date | Date(DAY) | 
| hora | VARCHAR | 
| datetimeoffset | Date(MILLISECOND) | 
| char[n] | VARCHAR | 
| varchar[n/max] | VARCHAR | 

## Particiones y divisiones
<a name="connectors-adls-gen2-partitions-and-splits"></a>

Azure Data Lake Storage Gen2 usa almacenamiento de blobs de Gen2 compatible con Hadoop para almacenar archivos de datos. Los datos de estos archivos se consultan desde el motor de Azure Synapse. El motor de Azure Synapse trata los datos de Gen2 almacenados en los sistemas de archivos como tablas externas. Las particiones se implementan en función del tipo de datos. Si los datos ya se partieron y distribuyeron dentro del sistema de almacenamiento de Gen2, el conector recupera los datos como una sola división.

## Rendimiento
<a name="connectors-adls-gen2-performance"></a>

El conector Azure Data Lake Storage Gen2 muestra un rendimiento de consulta más lento cuando ejecuta varias consultas a la vez y está sujeto a limitaciones.

El conector Azure Data Lake Storage Gen2 de Athena inserta predicados para reducir los datos analizados en la consulta. 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.

### Predicados
<a name="connectors-datalakegentwo-performance-predicates"></a>

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 Azure Data Lake Storage Gen2 de Athena puede combinar estas expresiones e insertarlas directamente en Azure Data Lake Storage Gen2 para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Azure Data Lake Storage Gen2 de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-datalakegentwo-performance-pushdown-example"></a>

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%');
```

## Consultas de acceso directo
<a name="connectors-datalakegentwo-passthrough-queries"></a>

El conector de Azure Data Lake Storage Gen2 admite [consultas de acceso directo](federated-query-passthrough.md). 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 Azure Data Lake Storage Gen2, 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 de Azure Data Lake Storage Gen2. 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
<a name="connectors-datalakegentwo-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-datalakegen2/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-datalakegen2/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-datalakegentwo-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-datalakegen2/pom.xml) para el conector de Azure Data Lake Storage Gen2 en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-datalakegen2) en GitHub.com.

# Conector Azure Synapse de Amazon Athena
<a name="connectors-azure-synapse"></a>

El conector de Amazon Athena de [Azure Synapse Analytics](https://docs.microsoft.com/en-us/azure/synapse-analytics/overview-what-is) permite que Amazon Athena ejecute consultas SQL en las bases de datos de Azure Synapse mediante JDBC.

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
<a name="connectors-synapse-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-azure-synapse-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ En condiciones de filtro, debe enviar los tipos de datos `Date` y `Timestamp` al tipo de dato correspondiente.
+ Para buscar valores negativos de tipo `Real` y `Float`, use el operador `<=` o `>=`.
+ Los tipos de datos `binary`, `varbinary`, `image` y `rowversion` no son compatibles.

## Términos
<a name="connectors-azure-synapse-terms"></a>

Los siguientes términos hacen referencia al conector de Synapse.
+ **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.

## Parameters
<a name="connectors-azure-synapse-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de Synapse.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-azure-synapse-gc"></a>

Recomendamos configurar un conector de Synapse 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 Synapse 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 SYNAPSE
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Synapse creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Synapse creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas (recomendado)
<a name="connectors-azure-synapse-legacy"></a>

#### Cadena de conexión
<a name="connectors-azure-synapse-connection-string"></a>

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

```
synapse://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-azure-synapse-using-a-multiplexing-handler"></a>

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 | SynapseMuxCompositeHandler | 
| Controlador de metadatos | SynapseMuxMetadataHandler | 
| Controlador de registros | SynapseMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-azure-synapse-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 mysynapsecatalog, el nombre de la variable de entorno será mysynapsecatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de Synapse MUX que admite dos instancias de base de datos: `synapse1` (la predeterminada) y `synapse2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | synapse://jdbc:synapse://synapse1.hostname:port;databaseName=<database\$1name>;\$1\$1secret1\$1name\$1 | 
| synapse\$1catalog1\$1connection\$1string | synapse://jdbc:synapse://synapse1.hostname:port;databaseName=<database\$1name>;\$1\$1secret1\$1name\$1 | 
| synapse\$1catalog2\$1connection\$1string | synapse://jdbc:synapse://synapse2.hostname:port;databaseName=<database\$1name>;\$1\$1secret2\$1name\$1 | 

##### Proporcionar credenciales
<a name="connectors-azure-synapse-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto \$1\$1secret\$1name\$1.

```
synapse://jdbc:synapse://hostname:port;databaseName=<database_name>;${secret_name}
```

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.

```
synapse://jdbc:synapse://hostname:port;databaseName=<database_name>;user=<user>;password=<password>
```

#### Uso de un controlador de conexión única
<a name="connectors-azure-synapse-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | SynapseCompositeHandler | 
| Controlador de metadatos | SynapseMetadataHandler | 
| Controlador de registros | SynapseRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-azure-synapse-single-connection-handler-parameters"></a>


****  

| 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 Synapse compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | synapse://jdbc:sqlserver://hostname:port;databaseName=<database\$1name>;\$1\$1secret\$1name\$1 | 

#### Configuración de la autenticación con Active Directory
<a name="connectors-azure-synapse-configuring-active-directory-authentication"></a>

El conector Azure Synapse de Amazon Athena es compatible con la autenticación de Microsoft Active Directory. Antes de empezar, debe configurar un usuario administrativo en el portal de Microsoft Azure y, a continuación, usar AWS Secrets Manager para crear un secreto.

**Para configurar el usuario de administración de Active Directory**

1. Con una cuenta que tenga privilegios administrativos, inicie sesión en el portal de Microsoft Azure en [https://portal.azure.com/](https://portal.azure.com/).

1. En el cuadro de búsqueda, escriba **Azure Synapse Analytics** y, a continuación, elija **Azure Synapse Analytics**.  
![\[Elija Azure Synapse Analytics.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-azure-synapse-1.png)

1. Abra el menú de la izquierda.  
![\[Elija el menú del portal de Azure.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-azure-synapse-2.png)

1. En el panel de navegación, elija **Azure Active Directory**.

1. En la pestaña **Configurar administrador**, configure el **administrador de Active Directory** como un usuario nuevo o existente.  
![\[Uso de la pestaña Configurar administrador\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-azure-synapse-3.png)

1. En AWS Secrets Manager, guarde las credenciales de nombre de usuario y contraseña del administrador. Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte [Creación de un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

**Para ver el secreto en Secrets Manager**

1. Abra la consola de Secrets Manager en [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. En el panel de navegación, elija **Secretos**.

1. En la página **Secretos**, elija el vínculo al secreto.

1. En la página de detalles del secreto, elija **Recuperar valor del secreto**.  
![\[Visualización de los secretos en AWS Secrets Manager.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-azure-synapse-4.png)

##### Modificación de la cadena de conexión
<a name="connectors-azure-synapse-modifying-the-connection-string"></a>

Para habilitar la autenticación de Active Directory para el conector, modifique la cadena de conexión mediante la siguiente sintaxis:

```
synapse://jdbc:synapse://hostname:port;databaseName=database_name;authentication=ActiveDirectoryPassword;{secret_name}
```

##### Uso de ActiveDirectoryServicePrincipal
<a name="connectors-azure-synapse-using-activedirectoryserviceprincipal"></a>

El conector Azure Synapse de Amazon Athena también es compatible con `ActiveDirectoryServicePrincipal`. Para habilitarlo, modifique la cadena de la siguiente manera.

```
synapse://jdbc:synapse://hostname:port;databaseName=database_name;authentication=ActiveDirectoryServicePrincipal;{secret_name}
```

Para `secret_name`, especifique el ID de la aplicación o del cliente como el nombre de usuario y el secreto de la identidad principal de un servicio en la contraseña.

#### Parámetros de vertido
<a name="connectors-azure-synapse-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-azure-synapse-data-type-support"></a>

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


****  

| Synapse | Arrow | 
| --- | --- | 
| bit | TINYINT | 
| tinyint | SMALLINT | 
| smallint | SMALLINT | 
| int | INT | 
| bigint | BIGINT | 
| decimal | DECIMAL | 
| numérico | FLOAT8 | 
| smallmoney | FLOAT8 | 
| money | DECIMAL | 
| float[24] | FLOAT4 | 
| float[53] | FLOAT8 | 
| real | FLOAT4 | 
| datetime | Date(MILLISECOND) | 
| datetime2 | Date(MILLISECOND) | 
| smalldatetime | Date(MILLISECOND) | 
| date | Date(DAY) | 
| hora | VARCHAR | 
| datetimeoffset | Date(MILLISECOND) | 
| char[n] | VARCHAR | 
| varchar[n/max] | VARCHAR | 
| nchar[n] | VARCHAR | 
| nvarchar[n/max] | VARCHAR | 

## Particiones y divisiones
<a name="connectors-azure-synapse-partitions-and-splits"></a>

Una partición se representa mediante una sola columna de partición del tipo `varchar`. Synapse admite la partición por rango, por lo que la partición se implementa al extraer la columna de particiones y el rango de particiones de las tablas de metadatos de Synapse. Estos valores de rango se usan para crear las divisiones.

## Rendimiento
<a name="connectors-azure-synapse-performance"></a>

La selección de un subconjunto de columnas ralentiza significativamente el tiempo de ejecución de las consultas. El conector presenta limitaciones significativas debido a la simultaneidad.

El conector Synapse de Athena inserta predicados para reducir los datos analizados en la consulta. 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.

### Predicados
<a name="connectors-synapse-performance-predicates"></a>

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 Synapse de Athena puede combinar estas expresiones e insertarlas directamente en Synapse para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Synapse de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-synapse-performance-pushdown-example"></a>

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%');
```

## Consultas de acceso directo
<a name="connectors-synapse-passthrough-queries"></a>

El conector Synapse admite [consultas de acceso directo](federated-query-passthrough.md). 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 utilizar consultas de acceso directo, puede utilizar 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 Synapse. 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
<a name="connectors-synapse-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-synapse/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-synapse/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-synapse-additional-resources"></a>
+ Para obtener información sobre cómo utilizar Quick y Amazon Athena Federated Query a fin de crear paneles y visualizaciones de los datos almacenados en las bases de datos de Microsoft Azure Synapse, consulte el artículo [“Perform multi-cloud analytics using Quick, Amazon Athena Federated Query, and Microsoft Azure Synapse”](https://aws.amazon.com/blogs/business-intelligence/perform-multi-cloud-analytics-using-amazon-quicksight-amazon-athena-federated-query-and-microsoft-azure-synapse/) en el *blog de macrodatos de AWS*.
+ Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-synapse/pom.xml) para el conector de Synapse en GitHub.com.
+ Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-synapse) en GitHub.com.

# Conector Cloudera Hive de Amazon Athena
<a name="connectors-cloudera-hive"></a>

El conector Cloudera Hive de Amazon Athena permite que Athena ejecute consultas SQL en la distribución de [Cloudera Hive](https://www.cloudera.com/products/open-source/apache-hadoop/apache-hive.html) con Hadoop. El conector transforma las consultas SQL de Athena en la sintaxis HiveQL equivalente. 

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

## Requisitos previos
<a name="connectors-hive-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).
+ Antes de usar este conector, debe configurar una VPC y un grupo de seguridad. Para obtener más información, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md).

## Limitaciones
<a name="connectors-cloudera-hive-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.

## Términos
<a name="connectors-cloudera-hive-terms"></a>

Los siguientes términos hacen referencia al conector de Cloudera Hive.
+ **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.

## Parameters
<a name="connectors-cloudera-hive-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de Cloudera Hive.

### Conexiones de Glue (recomendado)
<a name="connectors-cloudera-hive-gc"></a>

Recomendamos configurar un conector de Cloudera Hive 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 Cloudera Hive 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 CLOUDERAHIVE
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Cloudera Hive creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Cloudera Hive creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-cloudera-hive-legacy"></a>

#### Cadena de conexión
<a name="connectors-cloudera-hive-connection-string"></a>

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

```
hive://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-cloudera-hive-multiplexing-handler"></a>

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 | HiveMuxCompositeHandler | 
| Controlador de metadatos | HiveMuxMetadataHandler | 
| Controlador de registros | HiveMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-cloudera-hive-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 myhivecatalog, el nombre de la variable de entorno será myhivecatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de Hive MUX que admite dos instancias de base de datos: `hive1` (la predeterminada) y `hive2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | hive://jdbc:hive2://hive1:10000/default;\$1\$1Test/RDS/hive1\$1 | 
| hive2\$1catalog1\$1connection\$1string | hive://jdbc:hive2://hive1:10000/default;\$1\$1Test/RDS/hive1\$1 | 
| hive2\$1catalog2\$1connection\$1string | hive://jdbc:hive2://hive2:10000/default;UID=sample&PWD=sample | 

##### Proporcionar credenciales
<a name="connectors-cloudera-hive-credentials"></a>

Para proporcionar un nombre de usuario y una contraseña para la base de datos en la cadena de conexión de JDBC, el conector Cloudera Hive necesita un secreto de AWS Secrets Manager. Para usar la función Consulta federada de Athena con AWS Secrets Manager, la VPC conectada a la función de Lambda debe tener [acceso a Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para conectarse a Secrets Manager.

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

**Ejemplo de cadena de conexión con nombre secreto**  
La siguiente cadena tiene el nombre secreto `${Test/RDS/hive1}`.

```
hive://jdbc:hive2://hive1:10000/default;...&${Test/RDS/hive1}&...
```

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.

```
hive://jdbc:hive2://hive1:10000/default;...&UID=sample2&PWD=sample2&...
```

Actualmente, el conector de Cloudera Hive reconoce las propiedades `UID` y `PWD` de JDBC.

#### Uso de un controlador de conexión única
<a name="connectors-cloudera-hive-single-connection-handler"></a>

Puedes usar los siguientes controladores de registros y metadatos de conexión única para conectarte a una sola instancia de Cloudera Hive.


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | HiveCompositeHandler | 
| Controlador de metadatos | HiveMetadataHandler | 
| Controlador de registros | HiveRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-cloudera-hive-single-connection-handler-parameters"></a>


****  

| 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 Cloudera Hive compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| predeterminado | hive://jdbc:hive2://hive1:10000/default;secret=\$1\$1Test/RDS/hive1\$1 | 

#### Parámetros de vertido
<a name="connectors-cloudera-hive-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-cloudera-hive-data-type-support"></a>

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


****  

| JDBC | Cloudera Hive | Arrow | 
| --- | --- | --- | 
| Booleano | Booleano | Bit | 
| Entero | TINYINT | Pequeño | 
| Short | SMALLINT | Smallint | 
| Entero | INT | Int | 
| Largo | BIGINT | Bigint | 
| float | float4 | Float4 | 
| Double | float8 | Float8 | 
| Date | date | DateDay | 
| Marca de tiempo | marca de tiempo | DateMilli | 
| Cadena | VARCHAR | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | Decimal | Decimal | 
| ARRAY | N/D (ver nota) | Enumeración | 

**nota**  
Actualmente, Cloudera Hive no admite los tipos agregados `ARRAY`, `MAP`, `STRUCT` o `UNIONTYPE`. Las columnas de tipos agregados se tratan como columnas `VARCHAR` en SQL.

## Particiones y divisiones
<a name="connectors-cloudera-hive-partitions-and-splits"></a>

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
<a name="connectors-cloudera-hive-performance"></a>

Cloudera Hive admite particiones estáticas. El conector Cloudera Hive de Athena puede recuperar datos de estas particiones en paralelo. Si quiere consultar conjuntos de datos muy grandes con una distribución uniforme de particiones, se recomienda encarecidamente la partición estática. El conector Cloudera Hive resiste las limitaciones debidas a la simultaneidad.

El conector Cloudera Hive 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
<a name="connectors-hive-performance-limit-clauses"></a>

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
<a name="connectors-hive-performance-predicates"></a>

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 Cloudera Hive de Athena puede combinar estas expresiones e insertarlas directamente en Cloudera Hive para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Cloudera Hive de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad:** EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-hive-performance-pushdown-example"></a>

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;
```

## Consultas de acceso directo
<a name="connectors-hive-passthrough-queries"></a>

El conector de Cloudera Hive admite [consultas de acceso directo](federated-query-passthrough.md). 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 Cloudera Hive, 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 de Cloudera Hive. 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
<a name="connectors-hive-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-hive/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-hive/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-hive-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-hive/pom.xml) para el conector de Cloudera Hive en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudera-hive) en GitHub.com.

# Conector Cloudera Impala de Amazon Athena
<a name="connectors-cloudera-impala"></a>

El conector de Cloudera Impala de Amazon Athena permite que Athena ejecute consultas SQL en la distribución de [Cloudera Impala](https://docs.cloudera.com/cdw-runtime/cloud/impala-overview/topics/impala-overview.html). El conector transforma las consultas SQL de Athena en la sintaxis equivalente de Impala.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

## Requisitos previos
<a name="connectors-impala-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).
+ Antes de usar este conector, debe configurar una VPC y un grupo de seguridad. Para obtener más información, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md).

## Limitaciones
<a name="connectors-cloudera-impala-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.

## Términos
<a name="connectors-cloudera-impala-terms"></a>

Los siguientes términos hacen referencia al conector de Cloudera Impala.
+ **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.

## Parameters
<a name="connectors-cloudera-impala-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Cloudera Impala.

### Conexiones de Glue (recomendado)
<a name="connectors-cloudera-impala-gc"></a>

Recomendamos configurar un conector de Cloudera Impala 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 Cloudera Impala 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 CLOUDERAIMPALA
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Cloudera Impala creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Cloudera Impala creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-cloudera-impala-legacy"></a>

#### Cadena de conexión
<a name="connectors-cloudera-impala-connection-string"></a>

Use una cadena de conexión JDBC con el siguiente formato para conectarse a un clúster de Impala.

```
impala://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-cloudera-impala-using-a-multiplexing-handler"></a>

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 | ImpalaMuxCompositeHandler | 
| Controlador de metadatos | ImpalaMuxMetadataHandler | 
| Controlador de registros | ImpalaMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-cloudera-impala-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | Obligatorio. Cadena de conexión de clúster de Impala para un catálogo de Athena. 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 myimpalacatalog, el nombre de la variable de entorno será myimpalacatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de Impala MUX que admite dos instancias de base de datos: `impala1` (la predeterminada) y `impala2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | impala://jdbc:impala://some.impala.host.name:21050/?\$1\$1Test/impala1\$1 | 
| impala\$1catalog1\$1connection\$1string | impala://jdbc:impala://someother.impala.host.name:21050/?\$1\$1Test/impala1\$1 | 
| impala\$1catalog2\$1connection\$1string | impala://jdbc:impala://another.impala.host.name:21050/?UID=sample&PWD=sample | 

##### Proporcionar credenciales
<a name="connectors-cloudera-impala-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${Test/impala1host}`.

```
impala://jdbc:impala://Impala1host:21050/?...&${Test/impala1host}&...
```

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.

```
impala://jdbc:impala://Impala1host:21050/?...&UID=sample2&PWD=sample2&...
```

Actualmente, Cloudera Impala reconoce las propiedades `UID` y `PWD` de JDBC.

#### Uso de un controlador de conexión única
<a name="connectors-cloudera-impala-using-a-single-connection-handler"></a>

Puedes usar los siguientes controladores de registros y metadatos de conexión única para conectarte a una sola instancia de Cloudera Impala.


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | ImpalaCompositeHandler | 
| Controlador de metadatos | ImpalaMetadataHandler | 
| Controlador de registros | ImpalaRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-cloudera-impala-single-connection-handler-parameters"></a>


****  

| 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 Cloudera Impala compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | impala://jdbc:impala://Impala1host:21050/?secret=\$1\$1Test/impala1host\$1 | 

#### Parámetros de vertido
<a name="connectors-cloudera-impala-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-cloudera-impala-data-type-support"></a>

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


****  

| JDBC | Cloudera Impala | Arrow | 
| --- | --- | --- | 
| Booleano | Booleano | Bit | 
| Entero | TINYINT | Pequeño | 
| Short | SMALLINT | Smallint | 
| Entero | INT | Int | 
| Largo | BIGINT | Bigint | 
| float | float4 | Float4 | 
| Double | float8 | Float8 | 
| Date | date | DateDay | 
| Marca de tiempo | marca de tiempo | DateMilli | 
| Cadena | VARCHAR | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | Decimal | Decimal | 
| ARRAY | N/D (ver nota) | Enumeración | 

**nota**  
Actualmente, Cloudera Impala no admite los tipos agregados `ARRAY`, `MAP`, `STRUCT` o `UNIONTYPE`. Las columnas de tipos agregados se tratan como columnas `VARCHAR` en SQL.

## Particiones y divisiones
<a name="connectors-cloudera-impala-partitions-and-splits"></a>

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
<a name="connectors-cloudera-impala-performance"></a>

Cloudera Impala admite particiones estáticas. El conector Cloudera Impala de Athena puede recuperar datos de estas particiones en paralelo. Si quiere consultar conjuntos de datos muy grandes con una distribución uniforme de particiones, se recomienda encarecidamente la partición estática. El conector Cloudera Impala resiste las limitaciones debidas a la simultaneidad.

El conector Cloudera Impala 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
<a name="connectors-impala-performance-limit-clauses"></a>

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
<a name="connectors-impala-performance-predicates"></a>

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 Cloudera Impala de Athena puede combinar estas expresiones e insertarlas directamente en Cloudera Impala para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Cloudera Impala de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-impala-performance-pushdown-example"></a>

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;
```

## Consultas de acceso directo
<a name="connectors-impala-passthrough-queries"></a>

El conector de Cloudera Impala admite [consultas de acceso directo](federated-query-passthrough.md). 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 Cloudera Impala, 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 de Cloudera Impala. 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
<a name="connectors-impala-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-impala/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-impala/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-impala-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudera-impala/pom.xml) para el conector de Cloudera Impala en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudera-impala) en GitHub.com.

# Conector CloudWatch de Amazon Athena
<a name="connectors-cloudwatch"></a>

El conector Amazon Athena CloudWatch permite que Amazon Athena se comunique con CloudWatch para que pueda consultar los datos de registro con SQL.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

El conector asigna sus LogGroups como esquemas y cada LogStream como una tabla. El conector también asigna una vista especial `all_log_streams` que contiene todos los LogStreams del LogGroup. Esta vista le permite consultar todos los registros de un LogGroup a la vez en lugar de buscar a través de cada LogStream individualmente.

## Requisitos previos
<a name="connectors-cloudwatch-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Parameters
<a name="connectors-cloudwatch-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de CloudWatch.

### Conexiones de Glue (recomendado)
<a name="connectors-cloudwatch-gc"></a>

Recomendamos configurar un conector de CloudWatch 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 CloudWatch 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 CLOUDWATCH
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: 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 CloudWatch creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de CloudWatch creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-cloudwatch-legacy"></a>
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

El conector también admite [control de congestión de AIMD](https://en.wikipedia.org/wiki/Additive_increase/multiplicative_decrease) para gestionar los eventos de limitación de CloudWatch a través de la construcción `ThrottlingInvoker` del [SDK de federación de consultas de Amazon Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-federation-sdk). Para modificar el comportamiento de limitación predeterminado, puede configurar cualquiera de las siguientes variables de entorno opcionales:
+ **throttle\$1initial\$1delay\$1ms**: el retraso de llamada inicial aplicado tras el primer evento de congestión. El valor predeterminado es 10 milisegundos.
+ **throttle\$1max\$1delay\$1ms**: el retraso máximo entre llamadas. Puede derivar TPS dividiéndolo en 1000 ms. El valor predeterminado es 1000 milisegundos.
+ **throttle\$1decrease\$1factor**: el factor por el que Athena reduce la tarifa de llamadas. El valor predeterminado es 0,5
+ **throttle\$1increase\$1ms**: la velocidad a la que Athena disminuye el retraso de la llamada. El valor predeterminado es 10 milisegundos.

## Base de datos y tablas
<a name="connectors-cloudwatch-databases-and-tables"></a>

El conector de CloudWatch Athena asigna sus LogGroups como esquemas, es decir, bases de datos, y cada LogStream como una tabla. El conector también asigna una vista especial `all_log_streams` que contiene todos los LogStreams del LogGroup. Esta vista le permite consultar todos los registros de un LogGroup a la vez en lugar de buscar a través de cada LogStream individualmente.

Todas las tablas asignadas por el conector de Athena CloudWatch tienen el siguiente esquema. Este esquema coincide con los campos proporcionados por Registros de CloudWatch.
+ **log\$1stream**: `VARCHAR` que contiene el nombre del LogStream del que proviene la fila.
+ **time**: `INT64` que contiene la hora de la época en que se generó la línea de registro.
+ **message**: `VARCHAR` que contiene el mensaje de registro.

**Ejemplos**  
En el siguiente ejemplo, se muestra cómo llevar a cabo una consulta `SELECT` en un LogStream especificado.

```
SELECT * 
FROM "lambda:cloudwatch_connector_lambda_name"."log_group_path"."log_stream_name" 
LIMIT 100
```

En el siguiente ejemplo, se muestra cómo usar la vista de `all_log_streams` para llevar a cabo una consulta en todos los LogStreams de un LogGroup especificado. 

```
SELECT * 
FROM "lambda:cloudwatch_connector_lambda_name"."log_group_path"."all_log_streams" 
LIMIT 100
```

## Permisos necesarios
<a name="connectors-cloudwatch-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-cloudwatch.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudwatch/athena-cloudwatch.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **Lectura o escritura de Registros de CloudWatch**: el conector usa este permiso para leer los datos de registro y escribir sus registros de diagnóstico.

## Rendimiento
<a name="connectors-cloudwatch-performance"></a>

El conector de Athena CloudWatch intenta optimizar las consultas contra CloudWatch mediante la paralelización de los escaneos de las transmisiones de registro necesarias para su consulta. Para determinados filtros de periodos de tiempo, la inserción de predicados se lleva a cabo tanto dentro de la función de Lambda como dentro de Registros de CloudWatch.

Para obtener el mejor rendimiento, use solo minúsculas en los nombres de los grupos de registros y flujos de registros. El uso combinado de mayúsculas y minúsculas hace que el conector realice una búsqueda que no distinga mayúsculas de minúsculas, lo que requiere un mayor esfuerzo computacional.

**nota**  
 El conector de CloudWatch no es compatible con nombres de bases de datos en mayúsculas. 

## Consultas de acceso directo
<a name="connectors-cloudwatch-passthrough-queries"></a>

El conector CloudWatch admite [consultas de acceso directo](federated-query-passthrough.md) que utilizan la [sintaxis de consulta de información de registros de CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html). Para obtener más información sobre la información de registros de CloudWatch, consulte [Análisis de los datos de registros con información de registros de CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) en la *Guía del usuario de Registros de Amazon CloudWatch*.

Para usar consultas de acceso directo con CloudWatch, puede utilizar la siguiente sintaxis:

```
SELECT * FROM TABLE(
        system.query(
            STARTTIME => 'start_time',
            ENDTIME => 'end_time',
            QUERYSTRING => 'query_string',
            LOGGROUPNAMES => 'log_group-names',
            LIMIT => 'max_number_of_results'
        ))
```

El siguiente ejemplo de consulta de acceso directo de CloudWatch filtra el campo `duration` cuando no es igual a 1000.

```
SELECT * FROM TABLE(
        system.query(
            STARTTIME => '1710918615308',
            ENDTIME => '1710918615972',
            QUERYSTRING => 'fields @duration | filter @duration != 1000',
            LOGGROUPNAMES => '/aws/lambda/cloudwatch-test-1',
            LIMIT => '2'
            ))
```

## Información sobre licencias
<a name="connectors-cloudwatch-license-information"></a>

El proyecto del conector de CloudWatch de Amazon Athena se licencia en virtud de la [Licencia de Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionales
<a name="connectors-cloudwatch-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudwatch) en GitHub.com.

# Conector de métricas de CloudWatch de Amazon Athena
<a name="connectors-cwmetrics"></a>

El conector de Amazon Athena para métricas de CloudWatch permite que Amazon Athena consulte datos de métricas de CloudWatch con SQL.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

Para obtener información sobre cómo publicar métricas de consulta en CloudWatch desde el propio servicio de Athena, consulte [Uso de CloudWatch y EventBridge para la supervisión de consultas y la administración de costos](workgroups-control-limits.md).

## Requisitos previos
<a name="connectors-cwmetrics-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Parameters
<a name="connectors-cwmetrics-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de métricas de CloudWatch.

### Conexiones de Glue (recomendado)
<a name="connectors-cwmetrics-gc"></a>

Recomendamos configurar un conector de CloudWatch Metrics 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 CloudWatch Metrics 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 CLOUDWATCHMETRICS
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: 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 CloudWatch Metrics creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de CloudWatch Metrics creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-cwmetrics-legacy"></a>
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

El conector también admite [control de congestión de AIMD](https://en.wikipedia.org/wiki/Additive_increase/multiplicative_decrease) para gestionar los eventos de limitación de CloudWatch a través de la construcción `ThrottlingInvoker` del [SDK de federación de consultas de Amazon Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-federation-sdk). Para modificar el comportamiento de limitación predeterminado, puede configurar cualquiera de las siguientes variables de entorno opcionales:
+ **throttle\$1initial\$1delay\$1ms**: el retraso de llamada inicial aplicado tras el primer evento de congestión. El valor predeterminado es 10 milisegundos.
+ **throttle\$1max\$1delay\$1ms**: el retraso máximo entre llamadas. Puede derivar TPS dividiéndolo en 1000 ms. El valor predeterminado es 1000 milisegundos.
+ **throttle\$1decrease\$1factor**: el factor por el que Athena reduce la tarifa de llamadas. El valor predeterminado es 0,5
+ **throttle\$1increase\$1ms**: la velocidad a la que Athena disminuye el retraso de la llamada. El valor predeterminado es 10 milisegundos.

## Base de datos y tablas
<a name="connectors-cwmetrics-databases-and-tables"></a>

El conector de métricas de CloudWatch de Athena asigna sus espacios de nombres, dimensiones, métricas y valores de métricas en dos tablas en un único esquema denominado `default`.

### La tabla de métricas
<a name="connectors-cwmetrics-the-metrics-table"></a>

La tabla `metrics` contiene las métricas disponibles definidas de forma exclusiva mediante una combinación de espacio de nombres, conjunto y nombre. La tabla `metrics` contiene las siguientes columnas.
+ **namespace**: `VARCHAR` que contiene el espacio de nombres.
+ **metric\$1name**: `VARCHAR` que contiene el nombre de la métrica.
+ **dimensions**: `LIST` de objetos `STRUCT` compuestos por `dim_name (VARCHAR)` y `dim_value (VARCHAR)`.
+ **statistic**: `LIST` de estadísticas `VARCH` (por ejemplo, `p90`, `AVERAGE`, ...) disponibles para la métrica.

### La tabla metric\$1samples
<a name="connectors-cwmetrics-the-metric_samples-table"></a>

La tabla `metric_samples` contiene las muestras de métricas disponibles para cada métrica de la tabla de `metrics`. La tabla `metric_samples` contiene las siguientes columnas.
+ **namespace**: `VARCHAR` que contiene el espacio de nombres.
+ **metric\$1name**: `VARCHAR` que contiene el nombre de la métrica.
+ **dimensions**: `LIST` de objetos `STRUCT` compuestos por `dim_name (VARCHAR)` y `dim_value (VARCHAR)`.
+ **dim\$1name**: un campo de conveniencia `VARCHAR` que puede usar para filtrar fácilmente por un nombre de dimensión único.
+ **dim\$1value**: un campo de conveniencia `VARCHAR` que puede usar para filtrar fácilmente un valor de dimensión única.
+ **period**: `INT` que representa el “periodo” de la métrica en segundos (por ejemplo, una métrica de 60 segundos).
+ **timestamp**: `BIGINT` que representa el tiempo de época en segundos para el que está destinada la muestra métrica.
+ **value**: un `FLOAT8` que contiene el valor de la muestra.
+ **statistic**: `VARCHAR` que contiene el tipo de estadística de la muestra (por ejemplo, `AVERAGE` o `p90`).

## Permisos necesarios
<a name="connectors-cwmetrics-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-cloudwatch-metrics.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-cloudwatch-metrics/athena-cloudwatch-metrics.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **Métricas de CloudWatch de solo lectura**: el conector usa este permiso para consultar los datos de las métricas.
+ **Escritura de Registros de CloudWatch**: el conector usa este acceso para escribir sus registros de diagnóstico.

## Rendimiento
<a name="connectors-cwmetrics-performance"></a>

El conector de métricas de CloudWatch de Athena intenta optimizar las consultas con respecto a las métricas de CloudWatch paralelizando los escaneos de los flujos de registro necesarios para su consulta. Para determinados filtros de periodo de tiempo, métrica, espacio de nombres y dimensiones, la inserción de predicados se lleva a cabo tanto dentro de la función de Lambda como dentro de Registros de CloudWatch.

## Información sobre licencias
<a name="connectors-cwmetrics-license-information"></a>

El proyecto del conector de métricas de CloudWatch de Amazon Athena se licencia en virtud de la [Licencia Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionales
<a name="connectors-cwmetrics-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudwatch-metrics) en GitHub.com.

# Conector AWS CMDB de Amazon Athena
<a name="connectors-cmdb"></a>

El conector de AWS CMDB de Amazon Athena permite a Amazon Athena comunicarse con varios servicios de AWS para que pueda consultarlos con SQL.

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
<a name="connectors-cmdb-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Parámetros
<a name="connectors-cmdb-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de CMDB de AWS.

### Conexiones de Glue (recomendado)
<a name="connectors-cmdb-gc"></a>

Recomendamos configurar un conector de AWS CMDB por medio de un objeto de conexiones de Glue. Para ello, establezca la variable de entorno `glue_connection` del conector Lambda de AWS CMDB 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 CMDB
```

**Propiedades del entorno Lambda**

**glue\$1connection**: 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 AWS CMDB creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de AWS CMDB creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-cmdb-legacy"></a>

**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](connect-data-source-serverless-app-repo.md) 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\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **default\$1ec2\$1image\$1owner**: (opcional) cuando se establece, controla el propietario predeterminado de la imagen de Amazon EC2 que filtra [Imágenes de máquina de Amazon (AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html). Si no establece este valor y la consulta en la tabla de imágenes de EC2 no incluye ningún filtro para el propietario, los resultados incluirán todas las imágenes públicas.

## Base de datos y tablas
<a name="connectors-cmdb-databases-and-tables"></a>

El conector de AWS CMDB de Athena pone a disposición las siguientes bases de datos y tablas para consultar su inventario de recursos de AWS. Para obtener más información sobre las columnas disponibles en cada tabla, ejecute una instrucción `DESCRIBE database.table` mediante la consola o la API de Athena.
+ **ec2**: esta base de datos contiene recursos relacionados con Amazon EC2, incluidos los siguientes.
+ **ebs\$1volumes**: contiene detalles de sus volúmenes de Amazon EBS.
+ **ec2\$1instances**: contiene detalles de las instancias de EC2.
+ **ec2\$1images**: contiene detalles de las imágenes de las instancias de EC2.
+ **routing\$1tables**: contiene detalles de las tablas de enrutamiento de la VPC.
+ **security\$1groups**: contiene detalles de los grupos de seguridad.
+ **subnets**: contiene detalles de las subredes de VPC.
+ **vpcs**: contiene detalles de las VPC.
+ **emr**: esta base de datos contiene recursos relacionados con Amazon EMR, incluidos los siguientes.
+ **emr\$1clusters**: contiene detalles de los clústeres de EMR.
+ **rds**: esta base de datos contiene recursos relacionados con Amazon RDS, incluidos los siguientes.
+ **rds\$1instances**: contiene detalles de las instancias de RDS.
+ **s3**: esta base de datos contiene recursos relacionados con RDS, incluidos los siguientes.
+ **buckets**: contiene detalles de sus buckets de Amazon S3.
+ **objects**: contiene detalles de sus objetos de Amazon S3, sin incluir su contenido.

## Permisos necesarios
<a name="connectors-cmdb-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-aws-cmdb.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-aws-cmdb/athena-aws-cmdb.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **Lista de S3**: el conector utiliza este permiso para enumerar sus buckets y objetos de Amazon S3.
+ **Descripción de EC2**: el conector utiliza este permiso para describir recursos como las instancias de Amazon EC2, los grupos de seguridad, las VPC y los volúmenes de Amazon EBS.
+ **Descripción o Lista de EMR**: el conector usa este permiso para describir los clústeres de EMR.
+ **Descripción de RDS**: el conector usa este permiso para describir las instancias de RDS.

## Rendimiento
<a name="connectors-cmdb-performance"></a>

Actualmente, el conector de AWS CMDB de Athena no admite escaneos paralelos. La inserción de predicados se lleva a cabo dentro de la función de Lambda. Siempre que sea posible, los predicados parciales se envían a los servicios que se consultan. Por ejemplo, una consulta de los detalles de una instancia de Amazon EC2 específica llama a la API de EC2 con el ID de instancia específico para ejecutar una operación de descripción específica.

## Información sobre licencias
<a name="connectors-cmdb-license-information"></a>

El proyecto del conector de AWS CMDB de Amazon Athena se licencia en virtud de la [Licencia de Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionales
<a name="connectors-cmdb-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-aws-cmdb) en GitHub.com.

# Conector para IBM Db2 de Amazon Athena
<a name="connectors-ibm-db2"></a>

El conector de Amazon Athena para Db2 permite que Amazon Athena ejecute consultas SQL en las bases de datos de IBM Db2 mediante JDBC.

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
<a name="connectors-dbtwo-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).
+ Antes de usar este conector, debe configurar una VPC y un grupo de seguridad. Para obtener más información, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md).

## Limitaciones
<a name="connectors-ibm-db2-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Los tipos de datos de marca de fecha y hora en condiciones de filtro se deben convertir a los tipos de datos adecuados.

## Términos
<a name="connectors-ibm-db2-terms"></a>

Los siguientes términos hacen referencia al conector para Db2.
+ **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.

## Parameters
<a name="connectors-ibm-db2-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Db2.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-ibm-db2-gc"></a>

Recomendamos configurar un conector de Db2 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 Db2 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 DB2
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Db2 creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Db2 creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-ibm-db2-legacy"></a>

#### Cadena de conexión
<a name="connectors-ibm-db2-connection-string"></a>

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

```
dbtwo://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-ibm-db2-using-a-multiplexing-handler"></a>

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 | Db2MuxCompositeHandler | 
| Controlador de metadatos | Db2MuxMetadataHandler | 
| Controlador de registros | Db2MuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-ibm-db2-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 mydbtwocatalog, el nombre de la variable de entorno será mydbtwocatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de Db2 MUX que admite dos instancias de base de datos: `dbtwo1` (la predeterminada) y `dbtwo2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | dbtwo://jdbc:db2://dbtwo1.hostname:port/database\$1name:\$1\$1secret1\$1name\$1 | 
| dbtwo\$1catalog1\$1connection\$1string | dbtwo://jdbc:db2://dbtwo1.hostname:port/database\$1name:\$1\$1secret1\$1name\$1 | 
| dbtwo\$1catalog2\$1connection\$1string | dbtwo://jdbc:db2://dbtwo2.hostname:port/database\$1name:\$1\$1secret2\$1name\$1 | 

##### Proporcionar credenciales
<a name="connectors-ibm-db2-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${secret_name}`.

```
dbtwo://jdbc:db2://hostname:port/database_name:${secret_name}
```

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.

```
dbtwo://jdbc:db2://hostname:port/database_name:user=user_name;password=password;
```

#### Uso de un controlador de conexión única
<a name="connectors-ibm-db2-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | Db2CompositeHandler | 
| Controlador de metadatos | Db2MetadataHandler | 
| Controlador de registros | Db2RecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-ibm-db2-single-connection-handler-parameters"></a>


****  

| 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 Db2 compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | dbtwo://jdbc:db2://hostname:port/database\$1name:\$1\$1secret\$1name\$1  | 

#### Parámetros de vertido
<a name="connectors-ibm-db2-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-ibm-db2-data-type-support"></a>

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


****  

| Db2 | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| DATE | DATEDAY | 
| TIME | VARCHAR | 
| TIMESTAMP | DATEMILLI | 
| DATETIME | DATEMILLI | 
| BOOLEANO | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | DECIMAL | 
| REAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 
| DECFLOAT | FLOAT8 | 

## Particiones y divisiones
<a name="connectors-ibm-db2-partitions-and-splits"></a>

Una partición se representa mediante una o varias columnas de partición de tipo `varchar`. El conector para Db2 crea particiones mediante los siguientes esquemas de organización.
+ Distribución por hash
+ Partición por intervalo
+ Organización por dimensiones

El conector recupera los detalles de la partición, como el número de particiones y el nombre de la columna, de una o varias tablas de metadatos de Db2. Las divisiones se crean en función del número de particiones identificadas. 

## Rendimiento
<a name="connectors-ibm-db2-performance"></a>

El conector Db2 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
<a name="connectors-dbtwo-performance-limit-clauses"></a>

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
<a name="connectors-dbtwo-performance-predicates"></a>

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 Db2 de Athena puede combinar estas expresiones e insertarlas directamente en Db2 para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Db2 de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-dbtwo-performance-pushdown-example"></a>

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;
```

## Consultas de acceso directo
<a name="connectors-dbtwo-passthrough-queries"></a>

El conector Db2 admite [consultas de acceso directo](federated-query-passthrough.md). 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 Db2, 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 Db2. 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
<a name="connectors-dbtwo-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-dbtwo-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2/pom.xml) para el conector para Db2 en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-db2) en GitHub.com.

# Conector de Amazon Athena para IBM Db2 AS/400 (Db2 iSeries)
<a name="connectors-ibm-db2-as400"></a>

El conector de Amazon Athena para Db2 AS/400 permite que Amazon Athena ejecute consultas SQL en las bases de datos de IBM Db2 AS/400 (Db2 iSeries) mediante JDBC.

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
<a name="connectors-db2as400-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).
+ Antes de usar este conector, debe configurar una VPC y un grupo de seguridad. Para obtener más información, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md).

## Limitaciones
<a name="connectors-ibm-db2-as400-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Los tipos de datos de marca de fecha y hora en condiciones de filtro se deben convertir a los tipos de datos adecuados.

## Términos
<a name="connectors-ibm-db2-as400-terms"></a>

Los siguientes términos hacen referencia al conector para Db2 AS/400.
+ **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.

## Parameters
<a name="connectors-ibm-db2-as400-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Db2 AS/400.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-ibm-db2-as400-gc"></a>

Recomendamos configurar un conector de Db2 AS/400 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 Db2 AS/400 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 DB2AS400
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Db2 AS/400 creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Db2 AS/400 creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-ibm-db2-as400-legacy"></a>

#### Cadena de conexión
<a name="connectors-ibm-db2-as400-connection-string"></a>

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

```
db2as400://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-ibm-db2-as400-using-a-multiplexing-handler"></a>

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 | Db2MuxCompositeHandler | 
| Controlador de metadatos | Db2MuxMetadataHandler | 
| Controlador de registros | Db2MuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-ibm-db2-as400-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 mydb2as400catalog, el nombre de la variable de entorno será mydb2as400catalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de Db2 MUX que admite dos instancias de base de datos: `db2as4001` (la predeterminada) y `db2as4002`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | db2as400://jdbc:as400://<ip\$1address>;<properties>;:\$1\$1<secret name>\$1; | 
| db2as400\$1catalog1\$1connection\$1string | db2as400://jdbc:as400://db2as4001.hostname/:\$1\$1secret1\$1name\$1 | 
| db2as400\$1catalog2\$1connection\$1string | db2as400://jdbc:as400://db2as4002.hostname/:\$1\$1secret2\$1name\$1 | 
| db2as400\$1catalog3\$1connection\$1string | db2as400://jdbc:as400://<ip\$1address>;user=<username>;password=<password>;<properties>; | 

##### Proporcionar credenciales
<a name="connectors-ibm-db2-as400-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${secret_name}`.

```
db2as400://jdbc:as400://<ip_address>;<properties>;:${<secret_name>};
```

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.

```
db2as400://jdbc:as400://<ip_address>;user=<username>;password=<password>;<properties>;
```

#### Uso de un controlador de conexión única
<a name="connectors-ibm-db2-as400-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | Db2CompositeHandler | 
| Controlador de metadatos | Db2MetadataHandler | 
| Controlador de registros | Db2RecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-ibm-db2-as400-single-connection-handler-parameters"></a>


****  

| 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 Db2 AS/400 compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | db2as400://jdbc:as400://<ip\$1address>;<properties>;:\$1\$1<secret\$1name>\$1; | 

#### Parámetros de vertido
<a name="connectors-ibm-db2-as400-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-ibm-db2-as400-data-type-support"></a>

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


****  

| Db2 AS/400 | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| DATE | DATEDAY | 
| TIME | VARCHAR | 
| TIMESTAMP | DATEMILLI | 
| DATETIME | DATEMILLI | 
| BOOLEANO | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | DECIMAL | 
| REAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 
| DECFLOAT | FLOAT8 | 

## Particiones y divisiones
<a name="connectors-ibm-db2-as400-partitions-and-splits"></a>

Una partición se representa mediante una o varias columnas de partición de tipo `varchar`. El conector para Db2 AS/400 crea particiones mediante los siguientes esquemas de organización.
+ Distribución por hash
+ Partición por intervalo
+ Organización por dimensiones

El conector recupera detalles de la partición, como son el número de particiones y el nombre de la columna, de una o varias tablas de metadatos de Db2 AS/400. Las divisiones se crean en función del número de particiones identificadas. 

## Rendimiento
<a name="connectors-db2-as400-performance"></a>

Para mejorar el rendimiento, use la inserción de predicados para realizar consultas desde Athena, como en los siguientes ejemplos.

```
SELECT * FROM "lambda:<LAMBDA_NAME>"."<SCHEMA_NAME>"."<TABLE_NAME>" 
 WHERE integercol = 2147483647
```

```
SELECT * FROM "lambda: <LAMBDA_NAME>"."<SCHEMA_NAME>"."<TABLE_NAME>" 
 WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
```

## Consultas de acceso directo
<a name="connectors-db2as400-passthrough-queries"></a>

El conector para Db2 AS/400 admite [consultas de acceso directo](federated-query-passthrough.md). 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 utilizar consultas de acceso directo con Db2 AS/400, 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 de Db2 AS/400. 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
<a name="connectors-db2as400-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-db2as400-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-db2-as400/pom.xml) para el conector para Db2 AS/400 en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-db2-as400) en GitHub.com.

# Conector para DocumentDB de Amazon Athena
<a name="connectors-docdb"></a>

El conector de DocumentDB de Amazon Athena permite a Athena comunicarse con sus instancias de DocumentDB para que pueda consultar los datos de DocumentDB con SQL. El conector también funciona con cualquier punto de conexión compatible con MongoDB.

A diferencia de los almacenes de datos relacionales tradicionales, las colecciones de Amazon DocumentDB no tienen ningún esquema establecido. DocumentDB no tiene un almacén de metadatos. Cada entrada de una colección de DocumentDB puede tener diferentes campos y tipos de datos.

El conector de DocumentDB admite dos mecanismos para generar información de esquema de tabla: inferencia básica de esquemas y metadatos de AWS Glue Data Catalog.

La inferencia de esquemas es la opción predeterminada. Esta opción escanea una pequeña cantidad de documentos de la colección, forma una unión de todos los campos y fuerza los campos que tienen tipos de datos no superpuestos. Esta opción funciona bien para colecciones que, en su mayoría, tienen entradas uniformes.

Para las recopilaciones con una mayor variedad de tipos de datos, el conector admite la recuperación de metadatos de AWS Glue Data Catalog. Si el conector ve una base de datos y una tabla de AWS Glue que coinciden con los nombres de la colección y la base de datos de DocumentDB, obtiene la información del esquema de la tabla de AWS Glue correspondiente. Al crear la tabla de AWS Glue, le recomendamos que la convierta en un superconjunto de todos los campos a los que quiera acceder desde su colección de DocumentDB. 

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog.

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
<a name="connectors-docdb-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Parameters
<a name="connectors-docdb-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector DocumentDB.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-docdb-gc"></a>

Recomendamos configurar un conector de DocumentDB 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 DocumentDB 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 DOCUMENTDB
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: 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 DocumentDB creado mediante conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de DocumentDB creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-docdb-legacy"></a>
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) si está presente y se establece en true (verdadero), el conector no intentará recuperar metadatos complementarios de AWS Glue.
+ **glue\$1catalog**: (opcional) use esta opción para especificar un [catálogo de AWS Glue entre cuentas](data-sources-glue-cross-account.md). De forma predeterminada, el conector intenta obtener los metadatos de su propia cuenta de AWS Glue.
+ **default\$1docdb**: si está presente, especifica una cadena de conexión de DocumentDB que se utilizará cuando no exista ninguna variable de entorno específica del catálogo.
+ **disable\$1projection\$1and\$1casing**: (opcional) desactiva la proyección y la distinción entre mayúsculas y minúsculas. Utilícelo si desea consultar tablas de Amazon DocumentDB que utilizan nombres de columna que distinguen mayúsculas de minúsculas El parámetro `disable_projection_and_casing` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas y la asignación de columnas: 
  + **false** (falso): esta es la configuración predeterminada. La proyección está habilitada y el conector espera que todos los nombres de las columnas estén en minúsculas. 
  + **true** (verdadero): desactiva la proyección y la distinción entre mayúsculas y minúsculas. Al usar la el parámetro `disable_projection_and_casing`, tenga en cuenta los siguientes puntos: 
    + El uso del parámetro puede dar lugar a un mayor uso del ancho de banda. Además, si su función de Lambda no está en la misma Región de AWS que su origen de datos, se generarán mayores costos por transferencia estándar entre regiones de AWS como resultado del mayor uso del ancho de banda. Para obtener más información sobre los costos por transferencia entre regiones, consulte [AWS Data Transfer Charges for Server and Serverless Architectures](https://aws.amazon.com/blogs/apn/aws-data-transfer-charges-for-server-and-serverless-architectures/) en el blog de la Red de socios de AWS.
    + Debido a que se transfiere una mayor cantidad de bytes y a que esta requiere un mayor tiempo de deserialización, la latencia general puede aumentar. 
+ **enable\$1case\$1insensitive\$1match**: (Opcional) cuando `true` realiza búsquedas sin distinción de mayúsculas y minúsculas en nombres de esquemas y tablas en Amazon DocumentDB. El valor predeterminado es `false`. Utilícelo si la consulta contiene nombres de tablas o esquemas en mayúsculas.

#### Especificación de cadenas de conexión
<a name="connectors-docdb-specifying-connection-strings"></a>

Puede proporcionar una o más propiedades que definan los detalles de conexión de DocumentDB para las instancias de DocumentDB que utiliza con el conector. Para ello, defina una variable de entorno de Lambda que corresponda al nombre del catálogo que quiere usar en Athena. Por ejemplo, suponga que quiere usar las siguientes consultas para consultar dos instancias de DocumentDB diferentes desde Athena:

```
SELECT * FROM "docdb_instance_1".database.table
```

```
SELECT * FROM "docdb_instance_2".database.table
```

Antes de poder usar estas dos instrucciones SQL, debe agregar dos variables de entorno a la función de Lambda: `docdb_instance_1` y `docdb_instance_2`. El valor de cada una debe ser una cadena de conexión de DocumentDB con el siguiente formato:

```
mongodb://:@:/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0      
```

##### Uso de los secretos
<a name="connectors-docdb-using-secrets"></a>

Si lo desea, puede usar AWS Secrets Manager para obtener parte o la totalidad del valor de los detalles de la cadena de conexión. Para utilizar la característica Consulta federada de Athena con Secrets Manager, la VPC conectada a la función de Lambda debe tener [acceso a Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para conectarse a Secrets Manager.

Si usa la sintaxis `${my_secret}` para poner el nombre de un secreto de Secrets Manager en la cadena de conexión, el conector reemplaza `${my_secret}` por los valores de texto plano de Secrets Manager. Los secretos deben almacenarse como un secreto de texto plano con valor `<username>:<password>`. Los secretos almacenados como `{username:<username>,password:<password>}` no se pasarán correctamente a la cadena de conexión.

Los secretos también se pueden usar para toda la cadena de conexión, y el nombre de usuario y la contraseña se pueden definir dentro del secreto.

Por ejemplo, supongamos que establece la variable de entorno de Lambda para `docdb_instance_1` en el siguiente valor:

```
mongodb://${docdb_instance_1_creds}@myhostname.com:123/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0         
```

El SDK de federación de consultas de Athena intenta recuperar automáticamente un secreto llamado `docdb_instance_1_creds` de Secrets Manager e inyecta ese valor en lugar de `${docdb_instance_1_creds}`. Cualquier parte de la cadena de conexión que se incluya en la combinación de caracteres `${ }` se interpreta como un secreto de Secrets Manager. Si especifica un nombre secreto que el conector no puede encontrar en Secrets Manager, el conector no reemplaza el texto.

## Recuperación de metadatos complementarios
<a name="supplemental-metadata"></a>

Para recuperar metadatos complementarios, siga estos pasos para configurar la base de datos y la tabla de Glue.

### Configuración de la base de datos de Glue
<a name="setup-glue-database"></a>

1. Cree una base de datos de Glue con el mismo nombre que la colección de DocumentDB.

1. En el campo del URI de la ubicación, ingrese `docdb-metadata-flag`.

### Configuración de la tabla de Glue
<a name="setup-glue-table"></a>

Agregue los siguientes parámetros a la tabla de Glue:
+ `docdb-metadata-flag = true`
+ `columnMapping = apple=APPLE`

  En este ejemplo, `apple` representa el nombre de columna en minúsculas en Glue, mientras que `APPLE` representa el nombre de columna real con distinción entre mayúsculas y minúsculas en la colección de DocumentDB.

### Verificación de la recuperación de metadatos
<a name="verify-metadata-retrieval"></a>

1. Ejecute la consulta.

1. Revise los registros de CloudWatch de la función de Lambda para verificar que los metadatos se hayan recuperado correctamente. Una recuperación correcta mostrará la siguiente entrada en el registro:

   ```
   doGetTable: Retrieved schema for table[TableName{schemaName=test, tableName=profiles}] from AWS Glue.
   ```

**nota**  
Si la tabla ya tiene configurado un campo `columnMapping`, solo es necesario agregar el parámetro `docdb-metadata-flag = true` a las propiedades de la tabla.

## Configuración de bases de datos y tablas en AWS Glue
<a name="connectors-docdb-setting-up-databases-and-tables-in-aws-glue"></a>

Debido a que la capacidad de inferencia de esquemas integrada del conector escanea un número limitado de documentos y solo admite un subconjunto de tipos de datos, es posible que quiera usar AWS Glue para obtener metadatos en su lugar.

Habilitar una tabla de AWS Glue para usar con Amazon DocumentDB, debe tener una base de datos y tabla de AWS Glue para la base de datos y la colección de DocumentDB para las que desea proporcionar metadatos complementarios.

**Para usar una tabla de AWS Glue para metadatos complementarios**

1. Utilice la consola de AWS Glue para crear una base de datos AWS Glue que tenga el mismo nombre que su base de datos de Amazon DocumentDB.

1. Establezca la propiedad URI de la base de datos para incluir **docdb-metadata-flag**.

1. (Opcional) Agregue la propiedad de la tabla **sourceTable**. Esta propiedad define el nombre de la tabla de origen en Amazon DocumentDB. Utilice esta propiedad si su tabla de AWS Glue tiene un nombre diferente al de la tabla en Amazon DocumentDB. Las diferencias en las reglas de nomenclatura entre AWS Glue y Amazon DocumentDB pueden hacer que esto sea necesario. Por ejemplo, no se permiten mayúsculas en nombres de tablas de AWS Glue, pero se permiten en los de tablas de Amazon DocumentDB.

1. (Opcional) Agregue la propiedad de tabla **columnMapping**. Esta propiedad define las asignaciones de nombres de columnas. Use esta propiedad si las reglas de denominación de columnas de AWS Glue le impiden crear una tabla de AWS Glue con los mismos nombres que la tabla de Amazon DocumentDB. Esto puede resultar útil porque se permiten mayúsculas en nombres de columnas de Amazon DocumentDB, pero no se permiten en los nombres de columnas de AWS Glue.

   Se espera que el valor de la propiedad `columnMapping` sea un conjunto de asignaciones en el formato `col1=Col1,col2=Col2`.
**nota**  
 La asignación de columnas solo se aplica a los nombres de las columnas de nivel superior y no a los campos anidados. 

   Tras agregar la propiedad de la tabla `columnMapping` de AWS Glue, puede eliminar la variable de entorno de Lambda `disable_projection_and_casing`.

1. Asegúrese de usar los tipos de datos adecuados para AWS Glue, como se indica en este documento.

## Compatibilidad con tipos de datos
<a name="connectors-docdb-data-type-support"></a>

En esta sección, se enumeran los tipos de datos que el conector de DocumentDB utiliza para la inferencia de esquemas y los tipos de datos cuando se utilizan metadatos de AWS Glue.

### Tipos de datos de inferencia de esquemas
<a name="connectors-docdb-schema-inference-data-types"></a>

La característica de inferencia de esquemas del conector de DocumentDB intenta inferir valores que pertenecen a uno de los siguientes tipos de datos. En la tabla se muestran los tipos de datos correspondientes para Amazon DocumentDB, Java y Apache Arrow.


****  

| Apache Arrow | Java o DocDB | 
| --- | --- | 
| VARCHAR | Cadena | 
| INT | Entero | 
| BIGINT | Largo | 
| BIT | Booleano | 
| FLOAT4 | Flotante | 
| FLOAT8 | Double | 
| TIMESTAMPSEC | Date | 
| VARCHAR | ObjectId | 
| LIST | Enumeración | 
| STRUCT | Documento | 

### AWS GlueTipos de datos de
<a name="connectors-docdb-glue-data-types"></a>

Si usa AWS Glue para obtener metadatos adicionales, puede configurar los siguientes tipos de datos. En la tabla se muestran los tipos de datos correspondientes para AWS Glue y Apache Arrow.


****  

| AWS Glue | Apache Arrow | 
| --- | --- | 
| int | INT | 
| bigint | BIGINT | 
| double | FLOAT8 | 
| float | FLOAT4 | 
| booleano | BIT | 
| binario | VARBINARY | 
| cadena | VARCHAR | 
| Enumeración | LIST | 
| Struct | STRUCT | 

## Permisos necesarios
<a name="connectors-docdb-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-docdb.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-docdb/athena-docdb.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **AWS Glue Data Catalog**: el conector de DocumentDB requiere acceso de solo lectura a AWS Glue Data Catalog para obtener información sobre el esquema.
+ **Registros de CloudWatch**: el conector requiere acceso a Registros de CloudWatch para almacenar registros.
+ **Acceso de lectura a AWS Secrets Manager**: si decide almacenar los detalles del punto de conexión de DocumentDB en Secrets Manager, debe conceder al conector acceso a esos secretos.
+ **Acceso a la VPC**: el conector requiere la capacidad de conectar y desconectar interfaces a la VPC para que pueda conectarse a ella y comunicarse con las instancias de DocumentDB.

## Rendimiento
<a name="connectors-docdb-performance"></a>

El conector para Amazon DocumentDB de Athena no admite actualmente análisis paralelos. En cambio, intenta insertar predicados como parte de sus consultas de DocumentDB, y los predicados de los índices de la colección de DocumentDB dan lugar a una cantidad mucho menor de datos analizados.

La función de Lambda inserta proyecciones para reducir los datos analizados por la consulta. Sin embargo, a veces, la selección de un subconjunto de columnas provoca un tiempo de ejecución de consultas más prolongado. Las cláusulas `LIMIT` reducen la cantidad de datos analizados; sin embargo, si no proporciona un predicado, es probable que las consultas `SELECT` con una cláusula `LIMIT` analicen al menos 16 MB de datos.

## Consultas de acceso directo
<a name="connectors-docdb-passthrough-queries"></a>

El conector de Amazon DocumentDB de Athena admite [consultas de acceso directo](federated-query-passthrough.md) y está basado en NoSQL. Para obtener más información sobre consultas en Amazon DocumentDB, diríjase a [Consultas](https://docs.aws.amazon.com/documentdb/latest/developerguide/querying.html) en la *Guía para desarrolladores de Amazon DocumentDB*.

Para usar consultas de acceso directo con Amazon DocumentDB, utilice la siguiente sintaxis:

```
SELECT * FROM TABLE(
        system.query(
            database => 'database_name',
            collection => 'collection_name',
            filter => '{query_syntax}'
        ))
```

El siguiente ejemplo consulta la base de datos `example` de la colección `TPCDS` y filtra todos los libros con el título *Bill of Rights*.

```
SELECT * FROM TABLE(
        system.query(
            database => 'example',
            collection => 'tpcds',
            filter => '{title: "Bill of Rights"}'
        ))
```

## Recursos adicionales
<a name="connectors-docdb-additional-resources"></a>
+ Para obtener información sobre cómo usar [Amazon Athena Federated Query](federated-queries.md) a fin de conectar una base de datos de MongoDB a [Amazon Quick](https://aws.amazon.com/quicksight/) y crear cuadros de mando y visualizaciones, consulte la publicación [“Visualize MongoDB data from Quick using Amazon Athena Federated Query”](https://aws.amazon.com/blogs/big-data/visualize-mongodb-data-from-amazon-quicksight-using-amazon-athena-federated-query/) en el *blog de macrodatos de AWS*.
+ Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-docdb) en GitHub.com.

# Conector para DynamoDB de Amazon Athena
<a name="connectors-dynamodb"></a>

El conector Amazon Athena DynamoDB permite que Amazon Athena se comunique con DynamoDB para que pueda consultar las tablas con SQL. Las operaciones de escritura como [INSERT INTO](insert-into.md) no son compatibles.

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.

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog.

## Requisitos previos
<a name="connectors-dynamodb-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-dynamodb-limitations"></a>

Si migra las conexiones de DynamoDB al Catálogo de Glue y Lake Formation, solo se reconocerán los nombres de tabla y columna en minúsculas. 

## Parameters
<a name="connectors-dynamodb-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de DynamoDB.

### Conexiones de Glue (recomendado)
<a name="ddb-gc"></a>

Recomendamos configurar un conector de DynamoDB por medio de un objeto de conexiones de Glue. Para ello, establezca la variable de entorno `glue_connection` del conector Lambda de DynamoDB 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 DYNAMODB
```

**Propiedades del entorno Lambda**

**glue\$1connection**: 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 DynamoDB creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de DynamoDB creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="ddb-legacy"></a>

**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](connect-data-source-serverless-app-repo.md) 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\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) si está presente y se establece en true (verdadero), el conector no intentará recuperar metadatos complementarios de AWS Glue.
+ **glue\$1catalog**: (opcional) use esta opción para especificar un [catálogo de AWS Glue entre cuentas](data-sources-glue-cross-account.md). De forma predeterminada, el conector intenta obtener los metadatos de su propia cuenta de AWS Glue.
+ **disable\$1projection\$1and\$1casing**: (opcional) desactiva la proyección y la distinción entre mayúsculas y minúsculas. Use esta opción si quiere consultar las tablas de DynamoDB que distinguen entre mayúsculas y minúsculas en sus nombres de columna y no desea especificar ninguna propiedad `columnMapping` en la tabla de AWS Glue.

  El parámetro `disable_projection_and_casing` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas y la asignación de columnas:
  + **auto**: desactiva la proyección y la distinción entre mayúsculas y minúsculas cuando se detecta un tipo no admitido con anterioridad y la asignación de nombres de columnas no se establece en la tabla. Este es el valor predeterminado.
  + **always**: desactiva la proyección y la distinción entre mayúsculas y minúsculas de forma incondicional. Esta opción resulta útil cuando en los nombres de las columnas de DynamoDB se distingue entre mayúsculas y minúsculas, pero no desea especificar ninguna asignación de nombres de columna.

  Al usar la el parámetro `disable_projection_and_casing`, tenga en cuenta los siguientes puntos:
  + El uso del parámetro puede dar lugar a un mayor uso del ancho de banda. Además, si su función de Lambda no está en la misma Región de AWS que su origen de datos, se generarán mayores costos por transferencia estándar entre regiones de AWS como resultado del mayor uso del ancho de banda. Para obtener más información sobre los costos por transferencia entre regiones, consulte [AWS Data Transfer Charges for Server and Serverless Architectures](https://aws.amazon.com/blogs/apn/aws-data-transfer-charges-for-server-and-serverless-architectures/) en el blog de la Red de socios de AWS.
  + Debido a que se transfiere una mayor cantidad de bytes y a que esta requiere un mayor tiempo de deserialización, la latencia general puede aumentar. 

## Configuración de bases de datos y tablas en AWS Glue
<a name="connectors-dynamodb-setting-up-databases-and-tables-in-aws-glue"></a>

Debido a que la capacidad de inferencia de esquemas integrada del conector es limitada, es posible que quiera usar AWS Glue para obtener metadatos. Para ello, debe tener una base de datos y una tabla en AWS Glue. Para habilitar su uso con DynamoDB, debe editar sus propiedades.

**Para editar propiedades de base de datos en la consola de AWS Glue**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. En el panel de navegación, amplíe **Catálogo de datos** y, a continuación, seleccione **Bases de datos**.

   En la página **Databases** (Bases de datos), puede editar una base de datos existente o seleccionar **Add database** (Agregar base de datos) para crear una.

1. En la lista de bases de datos, seleccione el enlace de la base de datos que desee editar.

1. Elija **Edit (Edición de)**.

1. En la página **Actualizar una base de datos**, en **Configuración de la base de datos**, en **Ubicación**, agregue la cadena **dynamo-db-flag**. Esta palabra clave indica que la base de datos contiene tablas que el conector de DynamoDB de Athena utiliza para metadatos suplementarios y se requiere para bases de datos de AWS Glue que no sean `default`. La propiedad `dynamo-db-flag` resulta útil para filtrar las bases de datos de cuentas con muchas bases de datos.

1. Elija **Update Database** (Actualizar base de datos).

**Para editar propiedades de tabla en la consola de AWS Glue**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. En el panel de navegación, amplíe **Catálogo de datos** y, a continuación, seleccione **Tablas**.

1. En la página **Tablas**, en la lista de tablas, seleccione el nombre vinculado de la tabla que desea editar.

1. Seleccione **Actions** (Acciones), **Edit queue** (Editar cola).

1. En la página **Editar tabla**, en la sección **Propiedades de la tabla** , agregue las siguientes propiedades de tabla según corresponda. Si utiliza el rastreador de DynamoDB de AWS Glue, estas propiedades se configuran automáticamente.
   + **dynamodb**: cadena que indica al conector de DynamoDB de Athena que la tabla se puede usar para metadatos adicionales. Ingrese la cadena `dynamodb` en las propiedades de tabla en un campo denominado **classification** (clasificación) (coincidencia exacta).
**nota**  
La página **Definir propiedades de la tabla**, que forma parte del proceso de creación de la tabla en la consola AWS Glue, tiene una sección de **Formato de datos** con un campo de **Clasificación**. No se puede entrar ni elegir `dynamodb` aquí. En su lugar, después de crear la tabla, siga los pasos para editarla e introducir `classification` y `dynamodb` como un par clave-valor en la sección **Propiedades de la tablas**.
   + **sourceTable**: propiedad de tabla opcional que define el nombre de la tabla de origen en DynamoDB. Use esta opción si las reglas de denominación de tablas de AWS Glue le impiden crear una tabla de AWS Glue con el mismo nombre que la de DynamoDB. Por ejemplo, no se permiten mayúsculas en nombres de tablas de AWS Glue, pero se permiten en los de tablas de DynamoDB.
   + **columnMapping**: propiedad de tabla opcional que define las asignaciones de los nombres de columna. Use esta opción si las reglas de denominación de columnas de AWS Glue le impiden crear una tabla de AWS Glue con los mismos nombres de columnas que la de DynamoDB. Por ejemplo, no se permiten mayúsculas en nombres de columnas de AWS Glue, pero se permiten en los de columnas de DynamoDB. Se espera que el valor de la propiedad tenga el formato col1=Col1, col2=Col2. Tenga en cuenta que la asignación de columnas solo se aplica a los nombres de las columnas de nivel superior y no a los campos anidados.
   + **defaultTimeZone**: propiedad de tabla opcional que se aplica a los valores `date` o `datetime` que no tienen una zona horaria explícita. Establecer este valor es una práctica recomendada para evitar discrepancias entre la zona horaria predeterminada del origen de datos y la zona horaria de la sesión de Athena.
   + **datetimeFormatMapping**: propiedad de tabla opcional que especifica el formato de `date` o `datetime` que se utilizará al analizar datos de una columna del tipo de datos `date` o `timestamp` de AWS Glue. Si no se especifica esta propiedad, el conector intenta [inferir](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateFormatUtils.html) un formato ISO-8601. Si el conector no puede inferir el formato de `date` o `datetime` o analizar la cadena sin procesar, el valor se omite del resultado. 

     El formato del valor `datetimeFormatMapping` debe ser `col1=someformat1,col2=someformat2`. A continuación, se muestran ejemplos de formatos:

     ```
     yyyyMMdd'T'HHmmss 
     ddMMyyyy'T'HH:mm:ss
     ```

     Si tu columna tiene los valores de `date` o `datetime` sin zona horaria y desea utilizar la columna de la cláusula `WHERE`, defina la propiedad `datetimeFormatMapping` de la columna.

1. Si define las columnas manualmente, asegúrese de utilizar los tipos de datos adecuados. Si usó un rastreador, valide las columnas y los tipos que este descubra.

1. Seleccione **Save**.

## Permisos necesarios
<a name="connectors-dynamodb-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-dynamodb.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-dynamodb/athena-dynamodb.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **AWS Glue Data Catalog**: el conector de DynamoDB requiere acceso de solo lectura al AWS Glue Data Catalog para obtener información sobre el esquema.
+ **Registros de CloudWatch**: el conector requiere acceso a Registros de CloudWatch para almacenar registros.
+ **Acceso de lectura de DynamoDB**: el conector utiliza las operaciones de la API: `DescribeTable`, `ListSchemas`, `ListTables`, `Query` y `Scan`.

## Rendimiento
<a name="connectors-dynamodb-performance"></a>

El conector de DynamoDB de Athena admite análisis paralelos e intenta insertar predicados como parte de sus consultas de DynamoDB. Un predicado de clave hash con valores distintos `X` da como resultado llamadas de consulta `X` a DynamoDB. Todos los demás escenarios de predicados dan como resultado un número `Y` de llamadas de escaneo, donde `Y` se determina heurísticamente en función del tamaño de la tabla y su rendimiento aprovisionado. Sin embargo, seleccionar un subconjunto de columnas da como resultado que en ocasiones se prolongue el tiempo de ejecución de las consultas.

Las cláusulas `LIMIT` y los predicados simples se insertan y pueden reducir la cantidad de datos analizados, lo que permite disminuir el tiempo de ejecución de las consultas. 

### Cláusulas LIMIT
<a name="connectors-dynamodb-performance-limit-clauses"></a>

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
<a name="connectors-dynamodb-performance-predicates"></a>

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. Para mejorar la funcionalidad y reducir la cantidad de datos analizados, el conector DynamoDB de Athena puede combinar estas expresiones e insertarlas directamente en DynamoDB.

Los siguientes operadores del conector DynamoDB de Athena admiten la inserción de predicados:
+ **Booleano: **Y
+ **Igualdad:** EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL.

### Ejemplo de inserción combinada
<a name="connectors-dynamodb-performance-pushdown-example"></a>

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_b < 10
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, incluida DynamoDB, consulte el artículo [Improve federated queries with predicate pushdown in Amazon Athena](https://aws.amazon.com/blogs/big-data/improve-federated-queries-with-predicate-pushdown-in-amazon-athena/) (Mejorar las consultas federadas con la inserción de predicados en Amazon Athena) en el *Blog de macrodatos de AWS*.

## Consultas de acceso directo
<a name="connectors-dynamodb-passthrough-queries"></a>

El conector de DynamoDB admite [consultas de acceso directo](federated-query-passthrough.md) y utiliza la sintaxis PartiQL. No se admite la operación de la API de [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) de DynamoDB. Para obtener más información sobre las consultas en DynamoDB mediante PartiQL, consulte [PartiQL select statements for DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.select.html) en la *Guía para desarrolladores de Amazon DynamoDB*.

Para usar consultas de acceso directo con DynamoDB, utilice la siguiente sintaxis:

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

En el siguiente ejemplo de consulta de acceso directo de DynamoDB, se usa PartiQL para devolver una lista de dispositivos Fire TV Stick que tienen una propiedad `DateWatched` posterior al 24/12/22.

```
SELECT * FROM TABLE(
        system.query(
           query => 'SELECT Devices 
                       FROM WatchList 
                       WHERE Devices.FireStick.DateWatched[0] > '12/24/22''
        ))
```

## Solución de problemas
<a name="connectors-dynamodb-troubleshooting"></a>

### Varios filtros en una columna de claves de clasificación
<a name="connectors-dynamodb-troubleshooting-sort-key-filters"></a>

**Mensaje de error**: KeyConditionExpressions solo debe contener una condición por clave

**Causa**: este problema puede producirse en la versión 3 del motor de Athena en consultas que tienen un filtro de límite inferior y uno superior en una columna de claves de clasificación de DynamoDB. Como DynamoDB no admite más de una condición de filtro en una clave de clasificación, se produce un error cuando el conector intenta insertar una consulta que tiene ambas condiciones aplicadas.

**Solución**: actualice el conector a la versión 2023.11.1 o una versión posterior. Para obtener instrucciones sobre cómo actualizar un conector, consulte [Actualización de un conector de origen de datos](connectors-updating.md).

## Costos
<a name="connectors-dynamodb-costs"></a>

Los costos de uso del conector dependen de los recursos de AWS subyacentes que se utilicen. Dado que las consultas que utilizan exploraciones pueden consumir una gran cantidad de [unidades de capacidad de lectura (RCU)](https://aws.amazon.com/dynamodb/pricing/provisioned/), considere cuidadosamente la información de [precios de Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/).

## Recursos adicionales
<a name="connectors-dynamodb-additional-resources"></a>
+ Para obtener una introducción sobre cómo usar el conector DynamoDB de Amazon Athena, consulte [Acceder, consultar y unirse a las tablas de Amazon DynamoDB con Athena](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) en la guía *Patrones de orientación prescriptiva de AWS*. 
+ Para consultar un artículo sobre cómo utilizar el conector de DynamoDB de Athena a fin de consultar datos en DynamoDB con SQL y visualizar información en Quick, consulte la publicación en el *blog de macrodatos de AWS* [“Visualize Amazon DynamoDB insights in Quick using the Amazon Athena DynamoDB connector and AWS Glue”](https://aws.amazon.com/blogs/big-data/visualize-amazon-dynamodb-insights-in-amazon-quicksight-using-the-amazon-athena-dynamodb-connector-and-aws-glue/). 
+ Para obtener información sobre el uso del conector de DynamoDB de Amazon Athena con Amazon DynamoDB, Athena y Quick para crear un sencillo panel de gobernanza, consulte la publicación [Query cross-account Amazon DynamoDB tables using Amazon Athena Federated Query](https://aws.amazon.com/blogs/big-data/query-cross-account-amazon-dynamodb-tables-using-amazon-athena-federated-query/) en el *blog de macrodatos de AWS*.
+ Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) en GitHub.com.

# Conector Google BigQuery de Amazon Athena
<a name="connectors-bigquery"></a>

El conector de Google [BigQuery](https://cloud.google.com/bigquery/) de Amazon Athena permite que Amazon Athena ejecute consultas de SQL en los datos de Google BigQuery.

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
<a name="connectors-bigquery-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-bigquery-limitations"></a>
+ Las funciones de Lambda tienen un valor máximo de tiempo de espera de 15 minutos. Cada división ejecuta una consulta en BigQuery y debe finalizar con tiempo suficiente para almacenar los resultados para que Athena los lea. Si se agota el tiempo de espera de la función de Lambda, se produce un error en la consulta.
+ Google BigQuery distingue entre mayúsculas y minúsculas. El conector intenta corregir las mayúsculas y las minúsculas de los nombres del conjunto de datos, de las tablas y de los id. de proyectos. Esto es necesario porque Athena pone en minúsculas todos los metadatos. Estas correcciones hacen muchas llamadas adicionales a Google BigQuery.
+ Los tipos de datos binarios no son compatibles.
+ Debido a los límites de cuota y simultaneidad de Google BigQuery, el conector puede encontrar problemas con los límites de cuota de Google. Para evitar estos problemas, aplique tantas restricciones a Google BigQuery como sea posible. Para obtener información sobre cuotas de BigQuery, consulte [Cuotas y límites](https://cloud.google.com/bigquery/quotas) en la documentación de Google BigQuery.

## Parameters
<a name="connectors-bigquery-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Google BigQuery.

### Conexiones de Glue (recomendado)
<a name="bigquery-gc"></a>

Recomendamos configurar un conector de Google BigQuery por medio de un objeto de conexiones de Glue. Para ello, establezca la variable de entorno `glue_connection` del conector Lambda de Google BigQuery con el nombre de la conexión 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 BIGQUERY
```

**Propiedades del entorno Lambda**

**glue\$1connection**: 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 Google BigQuery creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Google BigQuery creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="bigquery-legacy"></a>

**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](connect-data-source-serverless-app-repo.md) 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\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **gcp\$1project\$1id**: el ID del proyecto, no el nombre del proyecto, que contiene los conjuntos de datos de los que debe leer el conector (por ejemplo, `semiotic-primer-1234567`).
+ **secret\$1manager\$1gcp\$1creds\$1name**: el nombre del secreto de AWS Secrets Manager que contiene sus credenciales de BigQuery en formato JSON (por ejemplo, `GoogleCloudPlatformCredentials`).
+ **big\$1query\$1endpoint**: (opcional) la URL de un punto de conexión privado de BigQuery. Use este parámetro cuando desee acceder a BigQuery a través de un punto de conexión privado.

## Divisiones y vistas
<a name="connectors-bigquery-splits-and-views"></a>

Como el conector de BigQuery usa la API de lectura de almacenamiento de BigQuery para consultar tablas y la API de almacenamiento de BigQuery no admite vistas, el conector usa el cliente de BigQuery con una sola división de vistas.

## Rendimiento
<a name="connectors-bigquery-performance"></a>

Para consultar las tablas, el conector de BigQuery usa la API de lectura de almacenamiento de BigQuery, que utiliza un protocolo basado en RPC que proporciona un acceso rápido al almacenamiento administrado por BigQuery. Para obtener más información sobre la API de lectura de almacenamiento de BigQuery, consulte [Cómo usar la API de lectura de almacenamiento de BigQuery para leer datos de tablas](https://cloud.google.com/bigquery/docs/reference/storage) en la documentación de Google Cloud.

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 está sujeto a errores de consulta a medida que aumenta la simultaneidad y, por lo general, es un conector lento.

El conector de Google BigQuery 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. 

### Cláusulas LIMIT
<a name="connectors-bigquery-performance-limit-clauses"></a>

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
<a name="connectors-bigquery-performance-top-n-queries"></a>

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
<a name="connectors-bigquery-performance-predicates"></a>

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 de Google BigQuery de Athena puede combinar estas expresiones e insertarlas directamente en Google BigQuery para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector de Google BigQuery de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-bigquery-performance-pushdown-example"></a>

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;
```

## Consultas de acceso directo
<a name="connectors-bigquery-passthrough-queries"></a>

El conector de Google BigQuery admite [consultas de acceso directo](federated-query-passthrough.md). 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 utilizar las consultas de acceso directo con Google BigQuery, puede usar 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 de Google BigQuery. 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
<a name="connectors-bigquery-license-information"></a>

El proyecto del conector de Google BigQuery de Amazon Athena se licencia en virtud de la [Licencia Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-google-bigquery/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-google-bigquery/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-bigquery-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-google-bigquery) en GitHub.com.

# Conector de Google Cloud Storage para Amazon Athena
<a name="connectors-gcs"></a>

El conector de Google Cloud Storage para Amazon Athena permite que Amazon Athena ejecute consultas en archivos Parquet y CSV almacenados en un bucket de Google Cloud Storage (GCS). Después de agrupar uno o varios archivos Parquet o CSV en una carpeta particionada o no participada de un bucket de GCS, puede organizarlos en una tabla de base de datos de [AWS Glue](https://aws.amazon.com/glue/).

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.

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog. 

Para consultar un artículo en el que se indica cómo utilizar Athena para ejecutar consultas en archivos Parquet o CSV en un bucket de GCS, consulte la publicación en el blog de Big Data de AWS [Utilizar Amazon Athena para consultar datos almacenados en Google Cloud Platform](https://aws.amazon.com/blogs/big-data/use-amazon-athena-to-query-data-stored-in-google-cloud-platform/).

## Requisitos previos
<a name="connectors-gcs-prerequisites"></a>
+ Configure una base de datos y una tabla de AWS Glue que se correspondan con el bucket y las carpetas de Google Cloud Storage. Para conocer los pasos, consulte [Configuración de bases de datos y tablas en AWS Glue](#connectors-gcs-setting-up-databases-and-tables-in-glue) más adelante en este documento.
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-gcs-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Actualmente, el conector solo admite el tipo `VARCHAR` para columnas de partición (`string` o `varchar` en un esquema de tabla de AWS Glue). Otros tipos de campos de partición generan errores cuando se los consulta en Athena.

## Términos
<a name="connectors-gcs-terms"></a>

Los siguientes términos tienen relación con el conector de GCS.
+ **Controlador**: controlador de Lambda que accede al bucket de GCS. Un controlador puede ser para los metadatos o para los registros de datos.
+ **Controlador de metadatos**: controlador de Lambda que recupera metadatos del bucket de GCS.
+ **Controlador de registros**: controlador de Lambda que recupera registros de datos del bucket de GCS.
+ **Controlador compuesto**: controlador de Lambda que recupera tanto metadatos como registros de datos del bucket de GCS.

## Tipos de archivo admitidos
<a name="connectors-gcs-supported-file-types"></a>

El conector GCS admite los tipos de archivo Parquet y CSV.

**nota**  
Asegúrese de no colocar tanto archivos CSV como Parquet en el mismo bucket o ruta de GCS. Si lo hace, se puede producir un error de tiempo de ejecución cuando se intenten leer archivos Parquet como CSV o viceversa. 

## Parameters
<a name="connectors-gcs-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector GCS.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-gcs-gc"></a>

Recomendamos configurar un conector de GCS 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 GCS con el nombre de la conexión de Glue que desee 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 GOOGLECLOUDSTORAGE
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: 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 GCS creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de GCS creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-gcs-legacy"></a>
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **secret\$1manager\$1gcp\$1creds\$1name**: nombre del secreto de AWS Secrets Manager que contiene las credenciales de GCS en formato JSON (por ejemplo, `GoogleCloudPlatformCredentials`).

## Configuración de bases de datos y tablas en AWS Glue
<a name="connectors-gcs-setting-up-databases-and-tables-in-glue"></a>

Dado que la capacidad de inferencia de esquemas integrada del conector de GCS es limitada, se recomienda utilizar AWS Glue para los metadatos. En los siguientes procedimientos se muestra cómo crear una base de datos y una tabla en AWS Glue a las que se puede acceder desde Athena.

### Creación de una base de datos en AWS Glue
<a name="connectors-gcs-creating-a-database-in-glue"></a>

Puede utilizar la consola de AWS Glue para crear una base de datos y utilizarla con el conector de GCS.

**Para crear una base de datos en AWS Glue**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Glue en [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Seleccione **Databases** (Bases de datos) en el panel de navegación.

1. Elija **Agregar una base de datos**.

1. En **Name** (Nombre), ingrese un nombre para la base de datos que desee utilizar con el conector de GCS.

1. En **Ubicación**, especifique `google-cloud-storage-flag`. Esta ubicación informa al conector GCS que la base de datos de AWS Glue contiene tablas para los datos de GCS que se consultarán en Athena. El conector reconoce las bases de datos de Athena que tienen esta marca e ignora aquellas que no la tienen.

1. Elija **Creación de base de datos**.

### Creación de una tabla en AWS Glue
<a name="connectors-gcs-creating-a-table-in-glue"></a>

Ahora puede crear una tabla para la base de datos. Cuando se crea una tabla de AWS Glue para utilizarla con el conector de GCS, se deben especificar metadatos adicionales.

**Para crear una tabla en la consola de AWS Glue**

1. En la consola de AWS Glue, seleccione **Tables** (Tablas) en el panel de navegación.

1. En la página **Tables** (Tablas), seleccione **Add table** (Agregar tabla).

1. En la página **Set table properties** (Establecer propiedades de la tabla), ingrese la siguiente información:
   + **Name** (Nombre): nombre exclusivo para la tabla.
   + **Database** (Base de datos): seleccione la base de datos de AWS Glue que haya creado para el conector de GCS.
   + **Include path** (Incluir ruta): en la sección **Data store** (Almacén de datos), en **Include path** (Incluir ruta), ingrese la ubicación URI de GCS con el prefijo `gs://` (por ejemplo,`gs://gcs_table/data/`). Si tiene una o varias carpetas de particiones, no las incluya en la ruta.
**nota**  
Cuando se introduce la ruta de tabla no `s3://`, la consola de AWS Glue muestra un error. Puede omitir este error. La tabla se creará correctamente.
   + **Data format** (Formato de datos): en **Classification** (Clasificación), seleccione **CSV** o **Parquet**.

1. Seleccione **Siguiente**.

1. En la página **Choose or define schema** (Seleccionar o definir esquema), se recomienda encarecidamente definir un esquema de tabla, aunque no es obligatorio. Si no se define un esquema, el conector de GCS intentará inferirlo automáticamente.

   Realice una de las siguientes acciones:
   + Si desea que el conector de GCS intente inferir un esquema automáticamente, seleccione **Next** (Siguiente), y luego **Create** (Crear).
   + Para definir un esquema por sí mismo, ejecute los pasos de la siguiente sección.

### Definición de un esquema de tabla en AWS Glue
<a name="connectors-gcs-defining-a-table-schema-in-glue"></a>

Definir un esquema de tabla en AWS Glue requiere más pasos, pero ofrece un mayor control sobre el proceso de creación de tablas.

**Para definir un esquema para una tabla en AWS Glue**

1. En la página **Choose or define schema** (Seleccionar o definir esquema), seleccione **Add** (Agregar).

1. Utilice el cuadro de diálogo **Add schema entry** (Agregar entrada de esquema) para proporcionar un nombre de columna y un tipo de datos.

1. Para designar la columna como columna de partición, seleccione la opción **Set as partition key** (Establecer como clave de partición).

1. Seleccione **Save** (Guardar) para guardar la columna.

1. Seleccione **Add** (Agregar) para agregar otra columna.

1. Cuando haya terminado de agregar columnas, seleccione **Next** (Siguiente).

1. En la página **Review and créate** (Revisar y crear), revise la tabla y, a continuación, seleccione **Create** (Crear).

1. Si el esquema contiene información sobre particiones, ejecute los pasos de la siguiente sección para agregar un patrón de partición a las propiedades de la tabla en AWS Glue.

### Adición de un patrón de partición a propiedades de tabla en AWS Glue
<a name="connectors-gcs-adding-a-partition-pattern-to-table-properties-in-glue"></a>

Si los buckets de GCS tienen particiones, se debe agregar el patrón de partición a las propiedades de la tabla en AWS Glue.

**Para agregar información de partición a propiedades de tabla en AWS Glue**

1. En la página de detalles de la tabla que haya creado en AWS Glue, seleccione **Actions** (Acciones), **Edit table** (Editar tabla).

1. En la página **Edit table** (Editar tabla), desplácese hacia abajo hasta la sección **Table properties** (Propiedades de la tabla).

1. Seleccione **Add** (Agregar) para agregar una clave de partición.

1. En **Clave**, escriba **partition.pattern**. Esta clave define el patrón de ruta de la carpeta.

1. En **Value** (Valor), introduzca un patrón de ruta de carpeta como **StateName=\$1\$1statename\$1/ZipCode=\$1\$1zipcode\$1/**, por ejemplo, donde **statename** y **zipcode**, que van dentro de **\$1\$1\$1**, son nombres de columnas de partición. El conector de GCS admite esquemas de partición Hive y no Hive.

1. Cuando termine de actualizar las etiquetas, elija **Guardar**.

1. Para ver las propiedades de tabla que acaba de crear, seleccione la pestaña **Advanced properties** (Propiedades avanzadas).

En este punto, puede navegar hasta la consola de Athena. La base de datos y la tabla que haya creado en AWS Glue están disponibles para realizar consultas en Athena.

## Compatibilidad con tipos de datos
<a name="connectors-gcs-data-type-support"></a>

En las siguientes tablas se muestran los tipos de datos admitidos para CSV y Parquet.

### CSV
<a name="connectors-gcs-csv"></a>


****  

| **Naturaleza de los datos** | **Tipo de datos inferidos** | 
| --- | --- | 
| Los datos parecen un número | BIGINT | 
| Los datos parecen una cadena | VARCHAR | 
| Los datos parecen de punto flotante (flotantes, dobles o decimales) | DOUBLE | 
| Los datos parecen una fecha | Marca de tiempo | 
| Datos que contienen valores verdadero/falso | BOOL | 

### Parquet
<a name="connectors-gcs-parquet"></a>


****  

| **PARQUET** | **Athena (Arrow)** | 
| --- | --- | 
| BINARIO | VARCHAR | 
| BOOLEANO | BOOL | 
| DOUBLE | DOUBLE | 
| ENUM | VARCHAR | 
| FIXED\$1LEN\$1BYTE\$1ARRAY | DECIMAL | 
| FLOAT | FLOAT (32 bits) | 
| INT32 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-gcs.html)  | 
| INT64 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-gcs.html)  | 
| INT96 | Marca de tiempo | 
| MAP | MAP | 
| STRUCT | STRUCT | 
| LIST | LIST | 

## Permisos necesarios
<a name="connectors-gcs-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-gcs.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-gcs/athena-gcs.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **AWS Glue Data Catalog**: el conector de GCS requiere acceso de solo lectura a AWS Glue Data Catalog para obtener información sobre un esquema.
+ **Registros de CloudWatch**: el conector requiere acceso a Registros de CloudWatch para almacenar registros.

## Rendimiento
<a name="connectors-gcs-performance"></a>

Cuando el esquema de la tabla contiene campos de partición y la propiedad de tabla `partition.pattern` está configurada correctamente, se puede incluir el campo de partición en la cláusula `WHERE` de las consultas. En esas consultas, el conector de GCS utiliza las columnas de partición para ajustar la ruta de la carpeta de GCS y evitar analizar archivos innecesarios en las carpetas de GCS.

En el caso de los conjuntos de datos Parquet, seleccionar un subconjunto de columnas da como resultado que se analicen menos datos. Esto suele traducirse en un menor tiempo de ejecución de consultas cuando se aplica la proyección de columnas. 

En el caso de los conjuntos de datos CSV, no se admite la proyección de columnas y no se reduce la cantidad de datos que se analizan. 

Las cláusulas `LIMIT` reducen la cantidad de datos analizados; sin embargo, si no se proporciona un predicado, es probable que las consultas `SELECT` con una cláusula `LIMIT` analicen al menos 16 MB de datos. El conector de GCS analiza más datos para los conjuntos de datos de mayor tamaño que para los conjuntos de datos más pequeños, independientemente de la cláusula `LIMIT` aplicada. Por ejemplo, la consulta `SELECT * LIMIT 10000` analiza más datos para un conjunto de datos subyacente de mayor tamaño que para uno más pequeño.

### Información sobre licencias
<a name="connectors-gcs-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-gcs/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-gcs/LICENSE.txt) de GitHub.com.

### Recursos adicionales
<a name="connectors-gcs-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-gcs) en GitHub.com.

# Conector para HBase de Amazon Athena
<a name="connectors-hbase"></a>

El conector de Amazon Athena HBase permite a Amazon Athena comunicarse con las instancias de Apache HBase para que pueda consultar los datos de HBase con SQL.

A diferencia de los almacenes de datos relacionales tradicionales, las colecciones de HBase no tienen ningún esquema establecido. HBase no tiene un almacén de metadatos. Cada entrada de una colección de HBase puede tener diferentes campos y tipos de datos.

El conector de HBase admite dos mecanismos para generar información de esquema de la tabla: inferencia básica de esquemas y metadatos de AWS Glue Data Catalog.

La inferencia de esquemas es la opción predeterminada. Esta opción escanea una pequeña cantidad de documentos de la colección, forma una unión de todos los campos y fuerza a los campos que no tienen tipos de datos superpuestos. Esta opción funciona bien para colecciones que, en su mayoría, tienen entradas uniformes.

Para las recopilaciones con una mayor variedad de tipos de datos, el conector admite la recuperación de metadatos de AWS Glue Data Catalog. Si el conector ve una base de datos y una tabla de AWS Glue que coinciden con los nombres del espacio de nombres y de las colecciones de HBase, obtiene la información del esquema de la tabla de AWS Glue. Al crear la tabla de AWS Glue, le recomendamos que la convierta en un superconjunto de todos los campos a los que quiera acceder desde su colección de HBase.

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog. 

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
<a name="connectors-hbase-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Parameters
<a name="connectors-hbase-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector HBase.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-hbase-gc"></a>

Recomendamos configurar un conector de HBase 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 HBase 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 HBASE
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: 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 HBase creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de HBase creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-hbase-legacy"></a>
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) si está presente y se establece en true (verdadero), el conector no intentará recuperar metadatos complementarios de AWS Glue.
+ **glue\$1catalog**: (opcional) use esta opción para especificar un [catálogo de AWS Glue entre cuentas](data-sources-glue-cross-account.md). De forma predeterminada, el conector intenta obtener los metadatos de su propia cuenta de AWS Glue.
+ **default\$1hbase**: si está presente, especifica una cadena de conexión de HBase que se utilizará cuando no exista ninguna variable de entorno específica del catálogo.
+ **enable\$1case\$1insensitive\$1match**: (opcional) cuando `true`, realiza búsquedas que no distinguen mayúsculas de minúsculas respecto a los nombres de tabla en HBase. El valor predeterminado es `false`. Utilice esta opción si la consulta contiene nombres de tabla en mayúsculas.

#### Especificación de cadenas de conexión
<a name="connectors-hbase-specifying-connection-strings"></a>

Puede proporcionar una o más propiedades que definan los detalles de conexión de HBase para las instancias de HBase que utiliza con el conector. Para ello, defina una variable de entorno de Lambda que corresponda al nombre del catálogo que quiere usar en Athena. Por ejemplo, suponga que quiere usar las siguientes consultas para consultar dos instancias de HBase diferentes desde Athena:

```
SELECT * FROM "hbase_instance_1".database.table
```

```
SELECT * FROM "hbase_instance_2".database.table
```

Antes de poder usar estas dos instrucciones SQL, debe agregar dos variables de entorno a la función de Lambda: `hbase_instance_1` y `hbase_instance_2`. El valor de cada una debe ser una cadena de conexión de HBase con el siguiente formato:

```
master_hostname:hbase_port:zookeeper_port
```

##### Uso de los secretos
<a name="connectors-hbase-using-secrets"></a>

Si lo desea, puede usar AWS Secrets Manager para obtener parte o la totalidad del valor de los detalles de la cadena de conexión. Para utilizar la característica Consulta federada de Athena con Secrets Manager, la VPC conectada a la función de Lambda debe tener [acceso a Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para conectarse a Secrets Manager.

Si usa la sintaxis `${my_secret}` para poner el nombre de un secreto de Secrets Manager en la cadena de conexión, el conector reemplaza el nombre secreto por los valores de nombre de usuario y contraseña de Secrets Manager.

Por ejemplo, supongamos que establece la variable de entorno de Lambda para `hbase_instance_1` en el siguiente valor:

```
${hbase_host_1}:${hbase_master_port_1}:${hbase_zookeeper_port_1}
```

El SDK de federación de consultas de Athena intenta recuperar automáticamente un secreto llamado `hbase_instance_1_creds` de Secrets Manager e inyecta ese valor en lugar de `${hbase_instance_1_creds}`. Cualquier parte de la cadena de conexión que se incluya en la combinación de caracteres `${ }` se interpreta como un secreto de Secrets Manager. Si especifica un nombre secreto que el conector no puede encontrar en Secrets Manager, el conector no reemplaza el texto.

## Configuración de bases de datos y tablas en AWS Glue
<a name="connectors-hbase-setting-up-databases-and-tables-in-aws-glue"></a>

La inferencia de esquema integrada del conector solo admite valores que se serializan en HBase como cadenas (por ejemplo, `String.valueOf(int)`). Debido a que la capacidad de inferencia de esquemas integrada del conector es limitada, es posible que quiera usar AWS Glue como alternativa para obtener metadatos. Para habilitar una tabla de AWS Glue con la intención de usarla con HBase, debe disponer de una tabla y una base de datos de AWS Glue con nombres que coincidan con el espacio de nombres y la tabla de HBase a los que quiere proporcionar metadatos complementarios. El uso de convenciones de nomenclatura de familias de columnas de HBase es opcional y no obligatorio.

**Para usar una tabla de AWS Glue para metadatos complementarios**

1. Al editar la tabla y la base de datos en la consola de AWS Glue, agregue las siguientes propiedades de tablas:
   + **hbase-metadata-flag**: esta propiedad indica al conector de HBase que este puede usar la tabla para obtener metadatos adicionales. Puede proporcionar cualquier valor para `hbase-metadata-flag` siempre y cuando la `hbase-metadata-flag` esté presente en la lista de propiedades de la tabla.
   + **hbase-native-storage-flag**: utilice este indicador para alternar los dos modos de serialización de valores admitidos por el conector. De forma predeterminada, cuando este campo no está presente, el conector asume que todos los valores se almacenan en HBase como cadenas. Como tal, intentará analizar tipos de datos como `INT`, `BIGINT` y `DOUBLE` de HBase como cadenas. Si este campo se establece con cualquier valor de la tabla en AWS Glue, el conector cambia al modo de almacenamiento “nativo” e intenta leer `INT`, `BIGINT`, `BIT` y `DOUBLE` como bytes mediante las siguientes funciones:

     ```
     ByteBuffer.wrap(value).getInt() 
     ByteBuffer.wrap(value).getLong() 
     ByteBuffer.wrap(value).get() 
     ByteBuffer.wrap(value).getDouble()
     ```

1. Asegúrese de usar los tipos de datos adecuados para AWS Glue, como se indica en este documento.

### Modelado de familias de columnas
<a name="connectors-hbase-modeling-column-families"></a>

El conector de HBase de Athena admite dos formas de modelar familias de columnas de HBase: nombres totalmente cualificados (aplanados) como `family:column`, o usar objetos `STRUCT`.

En el modelo `STRUCT`, el nombre del campo `STRUCT` debe coincidir con la familia de columnas y los elementos secundarios de `STRUCT` deben coincidir con los nombres de las columnas de la familia. Sin embargo, dado que las lecturas de columnas y de inserción de predicados aún no son totalmente compatibles con los tipos complejos como `STRUCT`, no se recomienda usar `STRUCT` en este momento.

En la siguiente imagen, se muestra una tabla configurada en AWS Glue que utiliza una combinación de los dos enfoques.

![\[Modelado de familias de columnas en AWS Glue para Apache HBase.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-hbase-1.png)


## Compatibilidad con tipos de datos
<a name="connectors-hbase-data-type-support"></a>

El conector recupera todos los valores de HBase como el tipo de byte básico. A continuación, en función de cómo haya definido las tablas en AWS Glue Data Catalog, asigna los valores a uno de los tipos de datos de Apache Arrow en la siguiente tabla.


****  

| AWS GlueTipo de datos  | Tipo de datos de Apache Arrow | 
| --- | --- | 
| int | INT | 
| bigint | BIGINT | 
| double | FLOAT8 | 
| float | FLOAT4 | 
| booleano | BIT | 
| binario | VARBINARY | 
| cadena | VARCHAR | 

**nota**  
Si no usa AWS Glue para complementar los metadatos, la inferencia de esquemas del conector utiliza solo los tipos de datos `BIGINT`, `FLOAT8` y `VARCHAR`.

## Permisos necesarios
<a name="connectors-hbase-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-hbase.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hbase/athena-hbase.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **AWS Glue Data Catalog**: el conector de HBase requiere acceso de solo lectura a AWS Glue Data Catalog para obtener información sobre el esquema.
+ **Registros de CloudWatch**: el conector requiere acceso a Registros de CloudWatch para almacenar registros.
+ **Acceso de lectura de AWS Secrets Manager**: si decide almacenar los detalles del punto de conexión de HBase en Secrets Manager, debe conceder al conector acceso a esos secretos.
+ **Acceso a la VPC**: el conector requiere la capacidad de conectar y desconectar interfaces a la VPC para que pueda conectarse a ella y comunicarse con las instancias de HBase.

## Rendimiento
<a name="connectors-hbase-performance"></a>

El conector de HBase de Athena intenta paralelizar las consultas con la instancia de HBase al leer cada servidor de región en paralelo. El conector HBase de Athena inserta predicados para reducir los datos analizados en la consulta.

La función de Lambda también realiza la inserción de *proyecciones* para reducir los datos analizados por la consulta. Sin embargo, a veces, la selección de un subconjunto de columnas provoca un tiempo de ejecución de consultas más prolongado. Las cláusulas `LIMIT` reducen la cantidad de datos analizados; sin embargo, si no proporciona un predicado, es probable que las consultas `SELECT` con una cláusula `LIMIT` analicen al menos 16 MB de datos.

HBase es propenso a errores en las consultas y a tiempos de ejecución de consulta variables. Es probable que tenga que realizar las consultas varias veces para que se ejecuten correctamente. El conector para HBase resiste las limitaciones debidas a la simultaneidad.

## Consultas de acceso directo
<a name="connectors-hbase-passthrough-queries"></a>

El conector HBase admite [consultas de acceso directo](federated-query-passthrough.md) y está basado en NoSQL. Para obtener información sobre cómo consultar Apache HBase con filtros, consulte [Lenguaje de filtros](https://hbase.apache.org/book.html#thrift.filter_language) en la documentación de Apache.

Para utilizar consultas de acceso directo con HBase, utilice la siguiente sintaxis:

```
SELECT * FROM TABLE(
        system.query(
            database => 'database_name',
            collection => 'collection_name',
            filter => '{query_syntax}'
        ))
```

En el siguiente ejemplo, se filtran las consultas de acceso directo de HBase para los empleados de 24 o 30 años de la colección `employee` de la base de datos `default`.

```
SELECT * FROM TABLE(
        system.query(
            DATABASE => 'default',
            COLLECTION => 'employee',
            FILTER => 'SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:30'')' ||
                       ' OR SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:24'')'
        ))
```

## Información sobre licencias
<a name="connectors-hbase-license-information"></a>

El proyecto del conector de HBase de Amazon Athena tiene una [Licencia Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionales
<a name="connectors-hbase-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-hbase) en GitHub.com.

# Conector Hortonworks de Amazon Athena
<a name="connectors-hortonworks"></a>

El conector Hortonworks de Amazon Athena permite que Amazon Athena ejecute consultas SQL en la plataforma de datos de Cloudera [Hortonworks](https://www.cloudera.com/products/hdp.html). El conector transforma las consultas SQL de Athena en la sintaxis HiveQL equivalente.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

## Requisitos previos
<a name="connectors-hive-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-hortonworks-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.

## Términos
<a name="connectors-hortonworks-terms"></a>

Los siguientes términos hacen referencia al conector de Hortonworks Hive.
+ **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.

## Parameters
<a name="connectors-hortonworks-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de Hortonworks Hive.

### Cadena de conexión
<a name="connectors-hortonworks-connection-string"></a>

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

```
hive://${jdbc_connection_string}
```

### Uso de un controlador de multiplexación
<a name="connectors-hortonworks-using-a-multiplexing-handler"></a>

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 | HiveMuxCompositeHandler | 
| Controlador de metadatos | HiveMuxMetadataHandler | 
| Controlador de registros | HiveMuxRecordHandler | 

#### Parámetros del controlador de multiplexación
<a name="connectors-hortonworks-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 myhivecatalog, el nombre de la variable de entorno será myhivecatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de Hive MUX que admite dos instancias de base de datos: `hive1` (la predeterminada) y `hive2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | hive://jdbc:hive2://hive1:10000/default?\$1\$1Test/RDS/hive1\$1 | 
| hive\$1catalog1\$1connection\$1string | hive://jdbc:hive2://hive1:10000/default?\$1\$1Test/RDS/hive1\$1 | 
| hive\$1catalog2\$1connection\$1string | hive://jdbc:hive2://hive2:10000/default?UID=sample&PWD=sample | 

#### Proporcionar credenciales
<a name="connectors-hortonworks-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${Test/RDS/hive1host}`.

```
hive://jdbc:hive2://hive1host:10000/default?...&${Test/RDS/hive1host}&...
```

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.

```
hive://jdbc:hive2://hive1host:10000/default?...&UID=sample2&PWD=sample2&...
```

Actualmente, el conector de Hortonworks Hive reconoce las propiedades `UID` y `PWD` de JDBC.

### Uso de un controlador de conexión única
<a name="connectors-hortonworks-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | HiveCompositeHandler | 
| Controlador de metadatos | HiveMetadataHandler | 
| Controlador de registros | HiveRecordHandler | 

#### Parámetros de controlador de conexión única
<a name="connectors-hortonworks-single-connection-handler-parameters"></a>


****  

| 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 Hortonworks Hive compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | hive://jdbc:hive2://hive1host:10000/default?secret=\$1\$1Test/RDS/hive1host\$1 | 

### Parámetros de vertido
<a name="connectors-hortonworks-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-hortonworks-data-type-support"></a>

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


****  

| JDBC | Hortonworks Hive | Arrow | 
| --- | --- | --- | 
| Booleano | Booleano | Bit | 
| Entero | TINYINT | Pequeño | 
| Short | SMALLINT | Smallint | 
| Entero | INT | Int | 
| Largo | BIGINT | Bigint | 
| float | float4 | Float4 | 
| Double | float8 | Float8 | 
| Date | date | DateDay | 
| Marca de tiempo | marca de tiempo | DateMilli | 
| Cadena | VARCHAR | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | Decimal | Decimal | 
| ARRAY | N/D (ver nota) | Enumeración | 

**nota**  
Actualmente, Hortonworks Hive no admite los tipos agregados `ARRAY`, `MAP`, `STRUCT` o `UNIONTYPE`. Las columnas de tipos agregados se tratan como columnas `VARCHAR` en SQL.

## Particiones y divisiones
<a name="connectors-hortonworks-partitions-and-splits"></a>

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
<a name="connectors-hortonworks-performance"></a>

Hortonworks Hive admite particiones estáticas. El conector Hortonworks Hive de Athena puede recuperar datos de estas particiones en paralelo. Si quiere consultar conjuntos de datos muy grandes con una distribución uniforme de particiones, se recomienda encarecidamente la partición estática. 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 de Hortonworks Hive resiste las limitaciones debidas a la simultaneidad.

El conector Hortonworks Hive 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
<a name="connectors-hive-performance-limit-clauses"></a>

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
<a name="connectors-hive-performance-predicates"></a>

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 Hortonworks Hive de Athena puede combinar estas expresiones e insertarlas directamente en Hortonworks Hive para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Hortonworks Hive de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad:** EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-hive-performance-pushdown-example"></a>

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;
```

## Consultas de acceso directo
<a name="connectors-hive-passthrough-queries"></a>

El conector de Hortonworks Hive admite [consultas de acceso directo](federated-query-passthrough.md). 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 utilizar consultas de acceso directo con Hortonworks Hive, puede usar 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 de Hortonworks Hive. 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
<a name="connectors-hive-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-hive-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-hortonworks-hive/pom.xml) para el conector de Hortonworks Hive en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-hortonworks-hive) en GitHub.com.

# Conector Apache Kafka de Amazon Athena
<a name="connectors-kafka"></a>

El conector de Amazon Athena para Apache Kafka permite que Amazon Athena ejecute consultas SQL en los temas de Apache Kafka. Use este conector para ver los temas de [Apache Kafka](https://kafka.apache.org/) como tablas y los mensajes como filas en Athena.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

## Requisitos previos
<a name="connectors-kafka-prerequisites"></a>

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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-kafka-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Los tipos de datos de marca de fecha y hora en condiciones de filtro se deben convertir a los tipos de datos adecuados.
+ Los tipos de datos de fecha y hora no son compatibles con el tipo de archivo CSV y se tratan como valores varchar.
+ No se admite la asignación a campos JSON anidados. El conector solo asigna campos de nivel superior.
+ El conector no admite tipos complejos. Los tipos complejos se interpretan como cadenas.
+ Para extraer valores JSON complejos o trabajar con ellos, use las funciones relacionadas con JSON disponibles en Athena. Para obtener más información, consulte [Extracción de datos JSON de cadenas](extracting-data-from-JSON.md).
+ El conector no permite el acceso a metadatos de mensajes de Kafka.

## Términos
<a name="connectors-kafka-terms"></a>
+ **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.
+ **Punto de conexión de Kafka**: una cadena de texto que establece una conexión con una instancia de Kafka.

## Compatibilidad con clústeres
<a name="connectors-kafka-cluster-compatibility"></a>

El conector Kafka se puede usar con los siguientes tipos de clústeres.
+ **Kafka independiente**: una conexión directa con Kafka (autenticada o no autenticada).
+ **Confluent**: una conexión directa con Confluent Kafka. Para obtener información sobre el uso de Athena con datos de Confluent Kafka, consulte [“Visualize Confluent data in Quick using Amazon Athena”](https://aws.amazon.com/blogs/business-intelligence/visualize-confluent-data-in-amazon-quicksight-using-amazon-athena/) en el *blog sobre inteligencia empresarial de AWS*. 

### Conexión a Confluent
<a name="connectors-kafka-connecting-to-confluent"></a>

Para la conexión a Confluent, se deben seguir los siguientes pasos:

1. Genere una clave de API desde Confluent.

1. Guarde el nombre de usuario y la contraseña de la clave de API de Confluent en AWS Secrets Manager.

1. Proporcione el nombre secreto de la variable de entorno `secrets_manager_secret` en el conector Kafka.

1. Siga los pasos de la sección [Configuración del conector Kafka](#connectors-kafka-setup) de este documento.

## Métodos de autenticación compatibles
<a name="connectors-kafka-supported-authentication-methods"></a>

El conector admite los siguientes métodos de autenticación.
+ [SSL](https://kafka.apache.org/documentation/#security_ssl)
+ [SASL/SCRAM](https://kafka.apache.org/documentation/#security_sasl_scram)
+ SASL/PLAIN
+ SASL/PLAINTEXT
+ NO\$1AUTH
+ **Kafka autogestionado y Confluent Platform**: SSL, SASL/SCRAM, SASL/PLAINTEXT, NO\$1AUTH.
+ **Kafka autogestionado y Confluent Cloud**: SASL/PLAIN.

Para obtener más información, consulte [Configuración de la autenticación del conector Kafka de Athena](#connectors-kafka-setup-configuring-authentication).

## Formatos compatibles de datos de entrada
<a name="connectors-kafka-supported-input-data-formats"></a>

El conector admite los siguientes formatos de datos de entrada.
+ JSON
+ CSV
+ AVRO
+ PROTOBUF (BÚFERES DE PROTOCOLO)

## Parameters
<a name="connectors-kafka-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Athena Kafka.
+ **auth\$1type**: especifica el tipo de autenticación del clúster. El conector admite los siguientes tipos de autenticación:
  + **NO\$1AUTH**: conexión directa a Kafka (por ejemplo, a un clúster de Kafka implementado en una instancia de EC2 que no usa autenticación).
  + **SASL\$1SSL\$1PLAIN**: este método usa el protocolo de seguridad `SASL_SSL` y el mecanismo `PLAIN` SASL. Para obtener más información, consulte [Configuración de SASL](https://kafka.apache.org/documentation/#security_sasl_config) en la documentación de Apache Kafka.
  + **SASL\$1PLAINTEXT\$1PLAIN**: este método usa el protocolo de seguridad `SASL_PLAINTEXT` y el mecanismo `PLAIN` SASL. Para obtener más información, consulte [Configuración de SASL](https://kafka.apache.org/documentation/#security_sasl_config) en la documentación de Apache Kafka.
  + **SASL\$1SSL\$1SCRAM\$1SHA512**: puede usar este tipo de autenticación para controlar el acceso a los clústeres de Apache Kafka. Este método almacena el nombre de usuario y la contraseña en AWS Secrets Manager. El secreto debe estar asociado al clúster de Kafka. Para obtener más información, consulte [Autenticación mediante SASL/SCRAM](https://kafka.apache.org/documentation/#security_sasl_scram) en la documentación de Apache Kafka.
  + **SASL\$1PLAINTEXT\$1SCRAM\$1SHA512**: este método usa el protocolo de seguridad `SASL_PLAINTEXT` y el mecanismo `SCRAM_SHA512 SASL`. Este método usa el nombre de usuario y la contraseña almacenados en AWS Secrets Manager. Para obtener más información, consulte la sección [Configuración de SASL](https://kafka.apache.org/documentation/#security_sasl_config) en la documentación de Apache Kafka.
  + **SSL**: la autenticación SSL utiliza archivos del almacén de claves y el almacén de confianza para conectarse con el clúster de Apache Kafka. Debe generar los archivos del almacén de confianza y el almacén de claves, cargarlos en un bucket de Amazon S3 y proporcionar la referencia a Amazon S3 cuando implemente el conector. El almacén de claves, el almacén de confianza y la clave SSL se almacenan en el AWS Secrets Manager. El cliente debe proporcionar la clave secreta de AWS cuando se implemente el conector. Para obtener más información, consulte [Cifrado y autenticación mediante SSLL](https://kafka.apache.org/documentation/#security_ssl) en la documentación de Apache Kafka.

    Para obtener más información, consulte [Configuración de la autenticación del conector Kafka de Athena](#connectors-kafka-setup-configuring-authentication).
+ **certificates\$1s3\$1reference**: la ubicación de Amazon S3 que contiene los certificados (los archivos del almacén de claves y del almacén de confianza).
+ **disable\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **kafka\$1endpoint**: los detalles del punto de conexión que se van a proporcionar a Kafka.
+ **schema\$1registry\$1url**: la dirección URL del registro de esquemas (por ejemplo, `http://schema-registry.example.org:8081`). Se aplica a los formatos de datos `AVRO` y `PROTOBUF`. Athena solo admite el registro de esquemas de Confluent.
+ **secrets\$1manager\$1secret**: el nombre del secreto de AWS en el que se guardan las credenciales.
+ **Parámetros de vertido**: las funciones de Lambda almacenan (“vierten”) temporalmente los datos que no caben en la memoria de 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. Use los parámetros de la siguiente tabla para especificar la ubicación de vertido.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-kafka.html)
+ **ID de subred**: 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.
  + **Clúster público de Kafka o clúster de Confluent Cloud estándar**: asocie el conector a una subred privada que tenga una puerta de enlace NAT.
  + **Clúster de Confluent Cloud con conectividad privada**: asocie el conector a una subred privada que tenga una ruta al clúster de Confluent Cloud.
    + En el caso de [AWS Transit Gateway](https://docs.confluent.io/cloud/current/networking/aws-transit-gateway.html), las subredes deben estar en una VPC conectada a la misma puerta de enlace de tránsito que utiliza Confluent Cloud.
    + Para el [emparejamiento de VPC](https://docs.confluent.io/cloud/current/networking/peering/aws-peering.html), las subredes deben estar en una VPC que esté sincronizada con la VPC de Confluent Cloud.
    + Para [AWS PrivateLink](https://docs.confluent.io/cloud/current/networking/private-links/aws-privatelink.html), las subredes deben estar en una VPC que tenga una ruta a los puntos de conexión de VPC que se conectan a Confluent Cloud.

**nota**  
Si se implementa el conector en una VPC con el fin de acceder a recursos privados y también se desea conectar a un servicio de acceso público como Confluent, se debe asociar el conector a una subred privada que tenga una puerta de enlace NAT. Para obtener más información, consulte [Puerta de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) en la Guía del usuario de Amazon VPC.

## Compatibilidad con tipos de datos
<a name="connectors-kafka-data-type-support"></a>

En la siguiente tabla, se muestran los tipos de datos correspondientes compatibles con Kafka y Apache Arrow.


****  

| Kafka | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| TIMESTAMP | MILLISECOND | 
| DATE | DAY | 
| BOOLEANO | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 

## Particiones y divisiones
<a name="connectors-kafka-partitions-and-splits"></a>

Los temas de Kafka se dividen en particiones. Cada partición está ordenada. Cada mensaje de una partición tiene un ID incremental denominado *desplazamiento*. Cada partición de Kafka se divide a su vez en múltiples divisiones para su procesamiento en paralelo. Los datos están disponibles durante el periodo de retención configurado en los clústeres de Kafka.

## Prácticas recomendadas
<a name="connectors-kafka-best-practices"></a>

Como práctica recomendada, use la inserción de predicados cuando realice consultas en Athena, como en los siguientes ejemplos.

```
SELECT * 
FROM "kafka_catalog_name"."glue_schema_registry_name"."glue_schema_name" 
WHERE integercol = 2147483647
```

```
SELECT * 
FROM "kafka_catalog_name"."glue_schema_registry_name"."glue_schema_name" 
WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
```

## Configuración del conector Kafka
<a name="connectors-kafka-setup"></a>

Antes de poder usar el conector, debe configurar el clúster de Apache Kafka, usar [AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html) para definir el esquema y configurar la autenticación del conector.

Cuando trabaje con AWS Glue Schema Registry, tenga en cuenta los siguientes puntos:
+ Asegúrese de que el texto del campo **Description** (Descripción) de AWS Glue Schema Registry incluya la cadena `{AthenaFederationKafka}`. Esta cadena de marcadores es obligatoria para los registros de AWS Glue que use con el conector Kafka de Amazon Athena.
+ Para obtener el mejor rendimiento, use solo minúsculas en los nombres de las bases de datos y tablas. El uso combinado de mayúsculas y minúsculas hace que el conector realice una búsqueda que no distinga mayúsculas de minúsculas, lo que requiere un mayor esfuerzo computacional.

**Para configurar el entorno de Apache Kafka y AWS Glue Schema Registry**

1. Configure su entorno de Apache Kafka.

1. Cargue el archivo de descripción del tema de Kafka (es decir, su esquema) en formato JSON en AWS Glue Schema Registry. Para obtener más información, consulte [Integración con AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry-integrations.html) en la Guía para desarrolladores de AWS Glue.

1. Para utilizar el formato de datos de `AVRO` o `PROTOBUF` al definir el esquema en el registro de esquemas AWS Glue:
   + Para el **nombre del esquema**, introduzca el nombre del tema de Kafka con las mayúsculas y minúsculas que utiliza el original.
   + Para el **formato de datos**, elija **Apache Avro** o **búferes de protocolo**.

    Para obtener más esquemas de ejemplo, consulte la siguiente sección.

### Ejemplos de esquemas para AWS Glue Schema Registry
<a name="connectors-kafka-setup-schema-examples"></a>

Use el formato de los ejemplos de esta sección cuando cargue el esquema en [AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html).

#### Ejemplo de esquema de tipo JSON
<a name="connectors-kafka-setup-schema-examples-json"></a>

En el siguiente ejemplo, el esquema que se va a crear en AWS Glue Schema Registry especifica `json` como el valor de `dataFormat` y usa `datatypejson` para `topicName`.

**nota**  
El valor de `topicName` debe usar la misma distinción entre mayúsculas y minúsculas que el nombre del tema en Kafka. 

```
{
  "topicName": "datatypejson",
  "message": {
    "dataFormat": "json",
    "fields": [
      {
        "name": "intcol",
        "mapping": "intcol",
        "type": "INTEGER"
      },
      {
        "name": "varcharcol",
        "mapping": "varcharcol",
        "type": "VARCHAR"
      },
      {
        "name": "booleancol",
        "mapping": "booleancol",
        "type": "BOOLEAN"
      },
      {
        "name": "bigintcol",
        "mapping": "bigintcol",
        "type": "BIGINT"
      },
      {
        "name": "doublecol",
        "mapping": "doublecol",
        "type": "DOUBLE"
      },
      {
        "name": "smallintcol",
        "mapping": "smallintcol",
        "type": "SMALLINT"
      },
      {
        "name": "tinyintcol",
        "mapping": "tinyintcol",
        "type": "TINYINT"
      },
      {
        "name": "datecol",
        "mapping": "datecol",
        "type": "DATE",
        "formatHint": "yyyy-MM-dd"
      },
      {
        "name": "timestampcol",
        "mapping": "timestampcol",
        "type": "TIMESTAMP",
        "formatHint": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    ]
  }
}
```

#### Ejemplo de esquema de tipo CSV
<a name="connectors-kafka-setup-schema-examples-csv"></a>

En el siguiente ejemplo, el esquema que se va a crear en AWS Glue Schema Registry especifica `csv` como el valor de `dataFormat` y usa `datatypecsvbulk` para `topicName`. El valor de `topicName` debe usar la misma distinción entre mayúsculas y minúsculas que el nombre del tema en Kafka.

```
{
  "topicName": "datatypecsvbulk",
  "message": {
    "dataFormat": "csv",
    "fields": [
      {
        "name": "intcol",
        "type": "INTEGER",
        "mapping": "0"
      },
      {
        "name": "varcharcol",
        "type": "VARCHAR",
        "mapping": "1"
      },
      {
        "name": "booleancol",
        "type": "BOOLEAN",
        "mapping": "2"
      },
      {
        "name": "bigintcol",
        "type": "BIGINT",
        "mapping": "3"
      },
      {
        "name": "doublecol",
        "type": "DOUBLE",
        "mapping": "4"
      },
      {
        "name": "smallintcol",
        "type": "SMALLINT",
        "mapping": "5"
      },
      {
        "name": "tinyintcol",
        "type": "TINYINT",
        "mapping": "6"
      },
      {
        "name": "floatcol",
        "type": "DOUBLE",
        "mapping": "7"
      }
    ]
  }
}
```

#### Ejemplo de esquema de tipo AVRO
<a name="connectors-kafka-setup-schema-examples-avro"></a>

El siguiente ejemplo se utiliza para crear un esquema basado en AVRO en el registro de esquemas de AWS Glue. Al definir el esquema en el registro de esquemas de AWS Glue, para el **nombre del esquema**, se escribe el nombre del tema de Kafka con las mayúsculas y minúsculas que utiliza el original, y para el **formato de datos**, se elige **Apache Avro**. Como esta información se especifica directamente en el registro, los campos `dataformat` y `topicName` no son obligatorios.

```
{
    "type": "record",
    "name": "avrotest",
    "namespace": "example.com",
    "fields": [{
            "name": "id",
            "type": "int"
        },
        {
            "name": "name",
            "type": "string"
        }
    ]
}
```

#### Ejemplo de esquema de tipo PROTOBUF
<a name="connectors-kafka-setup-schema-examples-protobuf"></a>

El siguiente ejemplo se utiliza para crear un esquema basado en PROTOBUF en el registro de esquemas de AWS Glue. Al definir el esquema en el registro de esquemas de AWS Glue, para el **nombre del esquema**, se escribe el nombre del tema de Kafka con las mayúsculas y minúsculas que utiliza el original, y para el **formato de datos**, se elige **búferes de protocolo**. Como esta información se especifica directamente en el registro, los campos `dataformat` y `topicName` no son obligatorios. La primera línea define el esquema como PROTOBUF.

```
syntax = "proto3";
message protobuftest {
string name = 1;
int64 calories = 2;
string colour = 3;
}
```

Para obtener más información sobre cómo agregar un registro y esquemas al Registro de esquemas de AWS Glue, consulte [Introducción al Registro de esquemas en la documentación de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry-gs.html).

### Configuración de la autenticación del conector Kafka de Athena
<a name="connectors-kafka-setup-configuring-authentication"></a>

Puede usar diversos métodos para autenticarse en su clúster de Apache Kafka, entre los que se incluyen SSL, SASL/SCRAM, SASL/PLAIN y SASL/PLAINTEXT.

En la siguiente tabla, se muestran los tipos de autenticación del conector, el protocolo de seguridad y el mecanismo SASL de cada uno. Para obtener más información, consulte la sección [Seguridad](https://kafka.apache.org/documentation/#security) de la documentación de Apache Kafka.


****  

| auth\$1type | security.protocol | sasl.mechanism | Compatibilidad de tipos de clúster | 
| --- | --- | --- | --- | 
| SASL\$1SSL\$1PLAIN | SASL\$1SSL | PLAIN |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-kafka.html)  | 
| SASL\$1PLAINTEXT\$1PLAIN | SASL\$1PLAINTEXT | PLAIN |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-kafka.html)  | 
| SASL\$1SSL\$1SCRAM\$1SHA512 | SASL\$1SSL | SCRAM-SHA-512 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-kafka.html)  | 
| SASL\$1PLAINTEXT\$1SCRAM\$1SHA512 | SASL\$1PLAINTEXT | SCRAM-SHA-512 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-kafka.html)  | 
| SSL | SSL | N/A |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-kafka.html)  | 

#### SSL
<a name="connectors-kafka-setup-configuring-authentication-tls"></a>

Si el clúster se ha autenticado con SSL, debe generar los archivos del almacén de confianza y del almacén de claves y cargarlos en el bucket de Amazon S3. Debe proporcionar esta referencia de Amazon S3 al implementar el conector. El almacén de claves, el almacén de confianza y la clave SSL se almacenan en el AWS Secrets Manager. Debe proporcionar la clave secreta de AWS al implementar el conector.

Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte [Creación de un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

Para usar este tipo de autenticación, establezca las variables de entorno como se muestra en la siguiente tabla.


****  

| Parámetro | Valor | 
| --- | --- | 
| auth\$1type | SSL | 
| certificates\$1s3\$1reference | La ubicación de Amazon S3 que contiene los certificados. | 
| secrets\$1manager\$1secret | El nombre de su clave secreta de AWS. | 

Después de crear un secreto en Secrets Manager, puede verlo en la consola de Secrets Manager.

**Para ver el secreto en Secrets Manager**

1. Abra la consola de Secrets Manager en [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. En el panel de navegación, elija **Secretos**.

1. En la página **Secretos**, elija el vínculo al secreto.

1. En la página de detalles del secreto, elija **Retrieve secret value** (Recuperar valor del secreto).

   La siguiente imagen muestra un secreto de ejemplo con tres pares de clave y valor: `keystore_password`, `truststore_password` y `ssl_key_password`.  
![\[Recuperación de un secreto de SSL en Secrets Manager\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-kafka-setup-1.png)

Para obtener más información sobre cómo usar SSL con Kafka, consulte [Cifrado y autenticación mediante SSL](https://kafka.apache.org/documentation/#security_ssl) en la documentación de Apache Kafka.

#### SASL/SCRAM
<a name="connectors-kafka-setup-configuring-authentication-sasl-scram"></a>

Si su clúster usa la autenticación con SCRAM, proporcione la clave de Secrets Manager que está asociada al clúster cuando implemente el conector. Las credenciales de AWS del usuario (clave secreta y clave de acceso) se usan para autenticarse en el clúster.

Establezca las variables de entorno como se muestra en la siguiente tabla.


****  

| Parámetro | Valor | 
| --- | --- | 
| auth\$1type | SASL\$1SSL\$1SCRAM\$1SHA512 | 
| secrets\$1manager\$1secret | El nombre de su clave secreta de AWS. | 

La siguiente imagen muestra un secreto de ejemplo en la consola de Secrets Manager con dos pares de clave y valor: uno para `username` y otro para `password`.

![\[Recuperación de un secreto de SCRAM en Secrets Manager\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-kafka-setup-2.png)


Para obtener más información sobre cómo usar SASL/SCRAM con Kafka, consulte [Autenticación mediante SASL/SCRAM](https://kafka.apache.org/documentation/#security_sasl_scram) en la documentación de Apache Kafka.

## Información sobre licencias
<a name="connectors-kafka-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-kafka/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-kafka/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-kafka-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-kafka) en GitHub.com.

# Conector para MSK de Amazon Athena
<a name="connectors-msk"></a>

El conector de Amazon Athena para [Amazon MSK](https://aws.amazon.com/msk/) permite que Amazon Athena ejecute consultas SQL en los temas de Apache Kafka. Use este conector para ver los temas de [Apache Kafka](https://kafka.apache.org/) como tablas y los mensajes como filas en Athena. Para obtener información adicional, consulte [Analizar datos de streaming en tiempo real en Amazon MSK con Amazon Athena](https://aws.amazon.com/blogs/big-data/analyze-real-time-streaming-data-in-amazon-msk-with-amazon-athena/) en el Blog de macrodatos de AWS.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

## Requisitos previos
<a name="connectors-msk-prerequisites"></a>

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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-msk-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Los tipos de datos de marca de fecha y hora en condiciones de filtro se deben convertir a los tipos de datos adecuados.
+ Los tipos de datos de fecha y hora no son compatibles con el tipo de archivo CSV y se tratan como valores varchar.
+ No se admite la asignación a campos JSON anidados. El conector solo asigna campos de nivel superior.
+ El conector no admite tipos complejos. Los tipos complejos se interpretan como cadenas.
+ Para extraer valores JSON complejos o trabajar con ellos, use las funciones relacionadas con JSON disponibles en Athena. Para obtener más información, consulte [Extracción de datos JSON de cadenas](extracting-data-from-JSON.md).
+ El conector no permite el acceso a metadatos de mensajes de Kafka.

## Términos
<a name="connectors-msk-terms"></a>
+ **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.
+ **Punto de conexión de Kafka**: una cadena de texto que establece una conexión con una instancia de Kafka.

## Compatibilidad con clústeres
<a name="connectors-msk-cluster-compatibility"></a>

El conector para MSK se puede usar con los siguientes tipos de clústeres.
+ **Clúster aprovisionado por MSK**: usted especifica, supervisa y escala manualmente la capacidad del clúster.
+ **Clúster sin servidor de MSK**: proporciona capacidad bajo demanda que se escala automáticamente en correspondencia con la E/S de la aplicación.
+ **Kafka independiente**: una conexión directa con Kafka (autenticada o no autenticada).

## Métodos de autenticación compatibles
<a name="connectors-msk-supported-authentication-methods"></a>

El conector admite los siguientes métodos de autenticación.
+ [SASL/IAM](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html) 
+ [SSL](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)
+ [SASL/SCRAM](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html)
+ SASL/PLAIN
+ SASL/PLAINTEXT
+ NO\$1AUTH

  Para obtener más información, consulte [Configuración de la autenticación del conector de Athena MSK](#connectors-msk-setup-configuring-authentication).

## Formatos compatibles de datos de entrada
<a name="connectors-msk-supported-input-data-formats"></a>

El conector admite los siguientes formatos de datos de entrada.
+ JSON
+ CSV

## Parameters
<a name="connectors-msk-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Athena MSK.
+ **auth\$1type**: especifica el tipo de autenticación del clúster. El conector admite los siguientes tipos de autenticación:
  + **NO\$1AUTH**: conexión directa a Kafka sin autenticación (por ejemplo, a un clúster de Kafka implementado en una instancia de EC2 que no usa autenticación).
  + **SASL\$1SSL\$1PLAIN**: este método usa el protocolo de seguridad `SASL_SSL` y el mecanismo `PLAIN` SASL.
  + **SASL\$1PLAINTEXT\$1PLAIN**: este método usa el protocolo de seguridad `SASL_PLAINTEXT` y el mecanismo `PLAIN` SASL.
**nota**  
Apache Kafka admite los tipos de autenticación `SASL_SSL_PLAIN` y `SASL_PLAINTEXT_PLAIN`; sin embargo, Amazon MSK no los admite.
  + **SASL\$1SSL\$1AWS\$1MSK\$1IAM**: el control de acceso de IAM para Amazon MSK le permite gestionar tanto la autenticación como la autorización de su clúster de MSK. Las credenciales de AWS de usuario (clave secreta y clave de acceso) se usan para conectarse al clúster. Para obtener más información, consulte [Control de acceso de IAM](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.
  + **SASL\$1SSL\$1SCRAM\$1SHA512**: puede usar este tipo de autenticación para controlar el acceso a los clústeres de Amazon MSK. Este método almacena el nombre de usuario y la contraseña en AWS Secrets Manager. El secreto debe estar asociado al clúster de Amazon MSK. Para obtener más información, consulte [Configurar la autenticación SASL/SCRAM para un clúster de Amazon MKS](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html#msk-password-tutorial) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.
  + **SSL**: la autenticación SSL utiliza archivos del almacén de claves y el almacén de confianza para conectarse con el clúster de Amazon MSK. Debe generar los archivos del almacén de confianza y el almacén de claves, cargarlos en un bucket de Amazon S3 y proporcionar la referencia a Amazon S3 cuando implemente el conector. El almacén de claves, el almacén de confianza y la clave SSL se almacenan en el AWS Secrets Manager. El cliente debe proporcionar la clave secreta de AWS cuando se implemente el conector. Para obtener más información, consulte [Autenticación TLS mutua](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.

    Para obtener más información, consulte [Configuración de la autenticación del conector de Athena MSK](#connectors-msk-setup-configuring-authentication).
+ **certificates\$1s3\$1reference**: la ubicación de Amazon S3 que contiene los certificados (los archivos del almacén de claves y del almacén de confianza).
+ **disable\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **kafka\$1endpoint**: los detalles del punto de conexión que se van a proporcionar a Kafka. Por ejemplo, para un clúster de Amazon MSK, debe proporcionar una [URL de arranque](https://docs.aws.amazon.com/msk/latest/developerguide/msk-get-bootstrap-brokers.html) para el clúster.
+ **secrets\$1manager\$1secret**: el nombre del secreto de AWS en el que se guardan las credenciales. Este parámetro no es obligatorio para la autenticación de IAM.
+ **Parámetros de vertido**: las funciones de Lambda almacenan (“vierten”) temporalmente los datos que no caben en la memoria de 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. Use los parámetros de la siguiente tabla para especificar la ubicación de vertido.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/connectors-msk.html)

## Compatibilidad con tipos de datos
<a name="connectors-msk-data-type-support"></a>

En la siguiente tabla, se muestran los tipos de datos correspondientes compatibles con Kafka y Apache Arrow.


****  

| Kafka | Arrow | 
| --- | --- | 
| CHAR | VARCHAR | 
| VARCHAR | VARCHAR | 
| TIMESTAMP | MILLISECOND | 
| DATE | DAY | 
| BOOLEANO | BOOL | 
| SMALLINT | SMALLINT | 
| INTEGER | INT | 
| BIGINT | BIGINT | 
| DECIMAL | FLOAT8 | 
| DOUBLE | FLOAT8 | 

## Particiones y divisiones
<a name="connectors-msk-partitions-and-splits"></a>

Los temas de Kafka se dividen en particiones. Cada partición está ordenada. Cada mensaje de una partición tiene un ID incremental denominado *desplazamiento*. Cada partición de Kafka se divide a su vez en múltiples divisiones para su procesamiento en paralelo. Los datos están disponibles durante el periodo de retención configurado en los clústeres de Kafka.

## Prácticas recomendadas
<a name="connectors-msk-best-practices"></a>

Como práctica recomendada, use la inserción de predicados cuando realice consultas en Athena, como en los siguientes ejemplos.

```
SELECT * 
FROM "msk_catalog_name"."glue_schema_registry_name"."glue_schema_name" 
WHERE integercol = 2147483647
```

```
SELECT * 
FROM "msk_catalog_name"."glue_schema_registry_name"."glue_schema_name" 
WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
```

## Configuración del conector para MSK
<a name="connectors-msk-setup"></a>

Antes de poder usar el conector, debe configurar el clúster de Amazon MSK, usar [AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html) para definir el esquema y configurar la autenticación del conector.

**nota**  
Si se implementa el conector en una VPC con el fin de acceder a recursos privados y también se desea conectar a un servicio de acceso público como Confluent, se debe asociar el conector a una subred privada que tenga una puerta de enlace NAT. Para obtener más información, consulte [Puerta de enlace NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) en la Guía del usuario de Amazon VPC.

Cuando trabaje con AWS Glue Schema Registry, tenga en cuenta los siguientes puntos:
+ Asegúrese de que el texto del campo **Description** (Descripción) de AWS Glue Schema Registry incluya la cadena `{AthenaFederationMSK}`. Esta cadena de marcadores es obligatoria para los registros AWS Glue que use con el conector para MSK de Amazon Athena.
+ Para obtener el mejor rendimiento, use solo minúsculas en los nombres de las bases de datos y tablas. El uso combinado de mayúsculas y minúsculas hace que el conector realice una búsqueda que no distinga mayúsculas de minúsculas, lo que requiere un mayor esfuerzo computacional.

**Para configurar el entorno de Amazon MSK y AWS Glue Schema Registry**

1. Configure el entorno de Amazon MSK. Para obtener más información y conocer los pasos que se deben seguir, consulte [Configuración de Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/before-you-begin.html) y [Empezar a utilizar Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.

1. Cargue el archivo de descripción del tema de Kafka (es decir, su esquema) en formato JSON en AWS Glue Schema Registry. Para obtener más información, consulte [Integración con AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry-integrations.html) en la Guía para desarrolladores de AWS Glue. Para obtener más esquemas de ejemplo, consulte la siguiente sección.

### Ejemplos de esquemas para AWS Glue Schema Registry
<a name="connectors-msk-setup-schema-examples"></a>

Use el formato de los ejemplos de esta sección cuando cargue el esquema en [AWS Glue Schema Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html).

#### Ejemplo de esquema de tipo JSON
<a name="connectors-msk-setup-schema-examples-json"></a>

En el siguiente ejemplo, el esquema que se va a crear en AWS Glue Schema Registry especifica `json` como el valor de `dataFormat` y usa `datatypejson` para `topicName`.

**nota**  
El valor de `topicName` debe usar la misma distinción entre mayúsculas y minúsculas que el nombre del tema en Kafka. 

```
{
  "topicName": "datatypejson",
  "message": {
    "dataFormat": "json",
    "fields": [
      {
        "name": "intcol",
        "mapping": "intcol",
        "type": "INTEGER"
      },
      {
        "name": "varcharcol",
        "mapping": "varcharcol",
        "type": "VARCHAR"
      },
      {
        "name": "booleancol",
        "mapping": "booleancol",
        "type": "BOOLEAN"
      },
      {
        "name": "bigintcol",
        "mapping": "bigintcol",
        "type": "BIGINT"
      },
      {
        "name": "doublecol",
        "mapping": "doublecol",
        "type": "DOUBLE"
      },
      {
        "name": "smallintcol",
        "mapping": "smallintcol",
        "type": "SMALLINT"
      },
      {
        "name": "tinyintcol",
        "mapping": "tinyintcol",
        "type": "TINYINT"
      },
      {
        "name": "datecol",
        "mapping": "datecol",
        "type": "DATE",
        "formatHint": "yyyy-MM-dd"
      },
      {
        "name": "timestampcol",
        "mapping": "timestampcol",
        "type": "TIMESTAMP",
        "formatHint": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    ]
  }
}
```

#### Ejemplo de esquema de tipo CSV
<a name="connectors-msk-setup-schema-examples-csv"></a>

En el siguiente ejemplo, el esquema que se va a crear en AWS Glue Schema Registry especifica `csv` como el valor de `dataFormat` y usa `datatypecsvbulk` para `topicName`. El valor de `topicName` debe usar la misma distinción entre mayúsculas y minúsculas que el nombre del tema en Kafka.

```
{
  "topicName": "datatypecsvbulk",
  "message": {
    "dataFormat": "csv",
    "fields": [
      {
        "name": "intcol",
        "type": "INTEGER",
        "mapping": "0"
      },
      {
        "name": "varcharcol",
        "type": "VARCHAR",
        "mapping": "1"
      },
      {
        "name": "booleancol",
        "type": "BOOLEAN",
        "mapping": "2"
      },
      {
        "name": "bigintcol",
        "type": "BIGINT",
        "mapping": "3"
      },
      {
        "name": "doublecol",
        "type": "DOUBLE",
        "mapping": "4"
      },
      {
        "name": "smallintcol",
        "type": "SMALLINT",
        "mapping": "5"
      },
      {
        "name": "tinyintcol",
        "type": "TINYINT",
        "mapping": "6"
      },
      {
        "name": "floatcol",
        "type": "DOUBLE",
        "mapping": "7"
      }
    ]
  }
}
```

### Configuración de la autenticación del conector de Athena MSK
<a name="connectors-msk-setup-configuring-authentication"></a>

Puede usar diversos métodos para autenticarse en su clúster de Amazon MSK, entre los que se incluyen IAM, SSL, SCRAM y Kafka independiente.

En la siguiente tabla, se muestran los tipos de autenticación del conector, el protocolo de seguridad y el mecanismo SASL de cada uno. Para obtener más información, consulte [Autenticación y autorización para las API de Apache Kafka](https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.


****  

| auth\$1type | security.protocol | sasl.mechanism | 
| --- | --- | --- | 
| SASL\$1SSL\$1PLAIN | SASL\$1SSL | PLAIN | 
| SASL\$1PLAINTEXT\$1PLAIN | SASL\$1PLAINTEXT | PLAIN | 
| SASL\$1SSL\$1AWS\$1MSK\$1IAM | SASL\$1SSL | AWS\$1MSK\$1IAM | 
| SASL\$1SSL\$1SCRAM\$1SHA512 | SASL\$1SSL | SCRAM-SHA-512 | 
| SSL | SSL | N/A | 

**nota**  
Apache Kafka admite los tipos de autenticación `SASL_SSL_PLAIN` y `SASL_PLAINTEXT_PLAIN`; sin embargo, Amazon MSK no los admite.

#### SASL/IAM
<a name="connectors-msk-setup-configuring-authentication-sasl-iam"></a>

Si el clúster usa la autenticación de IAM, debe configurar la política de IAM para el usuario al configurar el clúster. Para obtener más información, consulte [Control de acceso de IAM](https://docs.aws.amazon.com/msk/latest/developerguide/IAM-access-control.html) en la Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka.

Para usar este tipo de autenticación, establezca la variable de entorno `auth_type` de Lambda del conector como `SASL_SSL_AWS_MSK_IAM`. 

#### SSL
<a name="connectors-msk-setup-configuring-authentication-tls"></a>

Si el clúster se ha autenticado con SSL, debe generar los archivos del almacén de confianza y del almacén de claves y cargarlos en el bucket de Amazon S3. Debe proporcionar esta referencia de Amazon S3 al implementar el conector. El almacén de claves, el almacén de confianza y la clave SSL se almacenan en el AWS Secrets Manager. Debe proporcionar la clave secreta de AWS al implementar el conector.

Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte [Creación de un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

Para usar este tipo de autenticación, establezca las variables de entorno como se muestra en la siguiente tabla.


****  

| Parámetro | Valor | 
| --- | --- | 
| auth\$1type | SSL | 
| certificates\$1s3\$1reference | La ubicación de Amazon S3 que contiene los certificados. | 
| secrets\$1manager\$1secret | El nombre de su clave secreta de AWS. | 

Después de crear un secreto en Secrets Manager, puede verlo en la consola de Secrets Manager.

**Para ver el secreto en Secrets Manager**

1. Abra la consola de Secrets Manager en [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. En el panel de navegación, elija **Secretos**.

1. En la página **Secretos**, elija el vínculo al secreto.

1. En la página de detalles del secreto, elija **Retrieve secret value** (Recuperar valor del secreto).

   La siguiente imagen muestra un secreto de ejemplo con tres pares de clave y valor: `keystore_password`, `truststore_password` y `ssl_key_password`.  
![\[Recuperación de un secreto de SSL en Secrets Manager\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-msk-setup-1.png)

#### SASL/SCRAM
<a name="connectors-msk-setup-configuring-authentication-sasl-scram"></a>

Si su clúster usa la autenticación con SCRAM, proporcione la clave de Secrets Manager que está asociada al clúster cuando implemente el conector. Las credenciales de AWS del usuario (clave secreta y clave de acceso) se usan para autenticarse en el clúster.

Establezca las variables de entorno como se muestra en la siguiente tabla.


****  

| Parámetro | Valor | 
| --- | --- | 
| auth\$1type | SASL\$1SSL\$1SCRAM\$1SHA512 | 
| secrets\$1manager\$1secret | El nombre de su clave secreta de AWS. | 

La siguiente imagen muestra un secreto de ejemplo en la consola de Secrets Manager con dos pares de clave y valor: uno para `username` y otro para `password`.

![\[Recuperación de un secreto de SCRAM en Secrets Manager\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-msk-setup-2.png)


## Información sobre licencias
<a name="connectors-msk-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-msk/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-msk/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-msk-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-msk) en GitHub.com.

# Conector para MySQL de Amazon Athena
<a name="connectors-mysql"></a>

El conector Lambda MySQL de Amazon Athena permite a Amazon Athena acceder a las bases de datos de MySQL.

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
<a name="connectors-mysql-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).
+ Antes de usar este conector, debe configurar una VPC y un grupo de seguridad. Para obtener más información, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md).

## Limitaciones
<a name="connectors-mysql-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Como Athena convierte las consultas a minúsculas, los nombres de las tablas de MySQL deben estar en minúsculas. Por ejemplo, las consultas de Athena en una tabla llamada `myTable` producirán errores.
+ Si migra las conexiones de MySQL al Catálogo de Glue y Lake Formation, solo se reconocerán los nombres de tabla y columna en minúsculas. 

## Términos
<a name="connectors-mysql-terms"></a>

Los siguientes términos hacen referencia al conector de MySQL.
+ **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.

## Parameters
<a name="connectors-mysql-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector MySQL.

**nota**  
Los conectores de orígenes de datos de Athena creados a partir del 3 de diciembre de 2024 utilizan conexiones de AWS Glue.

### Conexiones de Glue (recomendado)
<a name="connectors-mysql-gc"></a>

Recomendamos configurar un conector de MySQL mediante un objeto de conexiones de Glue. 

Para ello, establezca la variable de entorno `glue_connection` del conector Lambda de MySQL con el nombre de la conexión de Glue que se va a utilizar.

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 MYSQL
```

**Propiedades del entorno Lambda**

**glue\$1connection**: 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 MySQL creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de MySQL creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-mysql-connection-legacy"></a>

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](connect-data-source-serverless-app-repo.md) 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`.

#### Cadena de conexión
<a name="connectors-mysql-connection-string"></a>

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

```
mysql://${jdbc_connection_string}
```

**nota**  
Si recibe el error java.sql.SQLException: Zero date value prohibited (java.sql.SQLException: valor de fecha cero prohibido) al hacer una consulta `SELECT` en una tabla de MySQL, agregue el siguiente parámetro a la cadena de conexión:  

```
zeroDateTimeBehavior=convertToNull
```
Para obtener más información, consulte [Error “Valor de fecha cero prohibido” al intentar seleccionar de la tabla de MySQL](https://github.com/awslabs/aws-athena-query-federation/issues/760) en GitHub.com.

#### Uso de un controlador de multiplexación
<a name="connectors-mysql-using-a-multiplexing-handler"></a>

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 | MySqlMuxCompositeHandler | 
| Controlador de metadatos | MySqlMuxMetadataHandler | 
| Controlador de registros | MySqlMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-mysql-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 mymysqlcatalog, el nombre de la variable de entorno será mymysqlcatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de MySQL MUX que admite dos instancias de base de datos: `mysql1` (la predeterminada) y `mysql2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | mysql://jdbc:mysql://mysql2.host:3333/default?user=sample2&password=sample2 | 
| mysql\$1catalog1\$1connection\$1string | mysql://jdbc:mysql://mysql1.host:3306/default?\$1\$1Test/RDS/MySql1\$1 | 
| mysql\$1catalog2\$1connection\$1string | mysql://jdbc:mysql://mysql2.host:3333/default?user=sample2&password=sample2 | 

##### Proporcionar credenciales
<a name="connectors-mysql-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${Test/RDS/MySql1}`.

```
mysql://jdbc:mysql://mysql1.host:3306/default?...&${Test/RDS/MySql1}&...
```

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.

```
mysql://jdbc:mysql://mysql1host:3306/default?...&user=sample2&password=sample2&...
```

Actualmente, el conector de MySQL reconoce las propiedades `user` y `password` de JDBC.

#### Uso de un controlador de conexión única
<a name="connectors-mysql-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | MySqlCompositeHandler | 
| Controlador de metadatos | MySqlMetadataHandler | 
| Controlador de registros | MySqlRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-mysql-single-connection-handler-parameters"></a>


****  

| 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 MySQL compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | mysql://mysql1.host:3306/default?secret=Test/RDS/MySql1 | 

#### Parámetros de vertido
<a name="connectors-mysql-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-mysql-data-type-support"></a>

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


****  

| JDBC | Arrow | 
| --- | --- | 
| Booleano | Bit | 
| Entero | Pequeño | 
| Short | Smallint | 
| Entero | Int | 
| Largo | Bigint | 
| float | Float4 | 
| Double | Float8 | 
| Date | DateDay | 
| Marca de tiempo | DateMilli | 
| Cadena | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Enumeración | 

## Particiones y divisiones
<a name="connectors-mysql-partitions-and-splits"></a>

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
<a name="connectors-mysql-performance"></a>

MySQL admite particiones nativas. El conector MySQL de Athena puede recuperar datos de estas particiones en paralelo. Si quiere consultar conjuntos de datos muy grandes con una distribución uniforme de particiones, se recomienda encarecidamente la partición nativa.

El conector MySQL 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
<a name="connectors-mysql-performance-limit-clauses"></a>

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
<a name="connectors-mysql-performance-predicates"></a>

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 MySQL de Athena puede combinar estas expresiones e insertarlas directamente en MySQL para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector MySQL de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-mysql-performance-pushdown-example"></a>

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;
```

Para obtener información sobre cómo usar la inserción de predicados a fin de mejorar el rendimiento en las consultas federadas, incluida MySQL, consulte el artículo [Mejorar las consultas federadas con la inserción de predicados en Amazon Athena](https://aws.amazon.com/blogs/big-data/improve-federated-queries-with-predicate-pushdown-in-amazon-athena/) en el *Blog de macrodatos de AWS*.

## Consultas de acceso directo
<a name="connectors-mysql-passthrough-queries"></a>

El conector MySQL admite [consultas de acceso directo](federated-query-passthrough.md). 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 MySQL, 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 MySQL. 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
<a name="connectors-mysql-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-mysql/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-mysql/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-mysql-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-mysql/pom.xml) para el conector de MySQL en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-mysql) en GitHub.com.

# Conector para Neptune de Amazon Athena
<a name="connectors-neptune"></a>

Amazon Neptune es un servicio de base de datos de gráficos rápido, fiable y completamente administrado que le permite crear y ejecutar fácilmente aplicaciones que funcionen con conjuntos de datos altamente conectados. El motor de base de datos de gráficos de alto rendimiento diseñado específicamente de Neptune almacena de manera óptima miles de millones de relaciones y consulta gráficos con una latencia de milisegundos. Para obtener más información, consulte la [Guía del usuario de Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html).

El conector Amazon Athena Neptune permite a Athena comunicarse con la instancia de base de datos de gráficos de Neptune, lo que hace que sus datos de gráficos de Neptune sean accesibles mediante consultas SQL.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog.

## Requisitos previos
<a name="connectors-neptune-prerequisites"></a>

El uso del conector de Neptune requiere los tres pasos siguientes.
+ Configuración de un clúster de Neptune
+ Configuración de un AWS Glue Data Catalog
+ Implementación del conector en su Cuenta de AWS. Para obtener más información, consulte [Cómo crear una conexión de origen de datos](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md). Para obtener más información específica sobre la implementación del conector de Neptune, consulte [Implementación del conector de Neptune de Amazon Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-neptune/docs/neptune-connector-setup) en GitHub.com.

## Limitaciones
<a name="connectors-neptune-limitations"></a>

Actualmente, el conector de Neptune tiene la siguiente limitación.
+ No se admite la proyección de columnas, ni siquiera la clave principal (ID). 

## Configuración de un clúster de Neptune
<a name="connectors-neptune-setting-up-a-neptune-cluster"></a>

Si no tiene un clúster existente de Amazon Neptune y un conjunto de datos de gráficos de propiedades que le gustaría usar, debe configurar uno.

Asegúrese de tener una puerta de enlace de Internet y una puerta de enlace NAT en la VPC que aloja el clúster de Neptune. Las subredes privadas que utiliza la función de Lambda del conector de Neptune deben tener una ruta a Internet a través de esta puerta de enlace NAT. La función de Lambda del conector de Neptune utiliza la puerta de enlace NAT para comunicarse con AWS Glue.

Para obtener instrucciones sobre cómo configurar un nuevo clúster de Neptune y cargarlo con un conjunto de datos de ejemplo, consulte [Configuración del clúster de Neptune de ejemplo](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-neptune/docs/neptune-cluster-setup) en GitHub.com.

## Configuración de un AWS Glue Data Catalog
<a name="connectors-neptune-setting-up-an-aws-glue-data-catalog"></a>

A diferencia de los almacenes de datos relacionales tradicionales, los nodos y periferias de la base de datos de gráficos Neptune no utilizan ningún esquema establecido. Cada entrada puede tener diferentes campos y tipos de datos. Sin embargo, dado que el conector de Neptune recupera los metadatos de AWS Glue Data Catalog, debe crear una base de datos de AWS Glue que tenga tablas con el esquema requerido. Después de crear la base de datos y tablas de AWS Glue, el conector puede rellenar la lista de tablas disponibles para consultarla desde Athena.

### Habilitación de la coincidencia de columnas sin distinción entre mayúsculas y minúsculas
<a name="connectors-neptune-glue-case-insensitive-column-matching"></a>

Si desea resolver los nombres de las columnas de la tabla de Neptune con las mayúsculas y minúsculas correctas, incluso cuando todos los nombres de columnas aparezcan en minúsculas en AWS Glue, puede configurar el conector Neptune para que no distinga entre mayúsculas y minúsculas.

Para habilitar esta característica, establezca la variable de entorno `enable_caseinsensitivematch` como `true` en la función de Lambda del conector Neptune. 

### Especificación del parámetro de tabla glabel de AWS Glue para los nombres de las tablas en mayúsculas
<a name="connectors-neptune-glue-glabel-parameter-for-table-names"></a>

Dado que AWS Glue solo admite nombres de tablas en minúsculas, es importante especificar el parámetro de tabla `glabel` de AWS Glue si se crea una tabla de AWS Glue para Neptune y el nombre de la tabla de Neptune incluye mayúsculas. 

En la definición de la tabla de AWS Glue, incluya el parámetro `glabel` y establezca su valor en el nombre de la tabla con las mayúsculas originales. Esto garantiza que se conserven las mayúsculas correctas cuando AWS Glue interactúe con la tabla de Neptune. En el siguiente ejemplo, se establece el valor de `glabel` como el nombre de la tabla `Airport`.

```
glabel = Airport
```

![\[Configuración de la propiedad de la tabla glabel de AWS Glue para conservar las mayúsculas del nombre de la tabla en una tabla de Neptune\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-neptune-1.png)


Para obtener más información sobre cómo configurar AWS Glue Data Catalog para utilizarlo con Neptune, consulte [Configurar un catálogo de AWS Glue](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-neptune/docs/aws-glue-sample-scripts) en GitHub.com.

## Rendimiento
<a name="connectors-neptune-performance"></a>

El conector Neptune de Athena inserta predicados para reducir los datos analizados en la consulta. Sin embargo, los predicados que usan la clave principal provocan un error en la consulta. Las cláusulas `LIMIT` reducen la cantidad de datos analizados; sin embargo, si no proporciona un predicado, es probable que las consultas `SELECT` con una cláusula `LIMIT` analicen al menos 16 MB de datos. El conector para Neptune resiste las limitaciones debidas a la simultaneidad.

## Consultas de acceso directo
<a name="connectors-neptune-passthrough-queries"></a>

El conector de Neptune admite [consultas de acceso directo](federated-query-passthrough.md). Puede utilizar esta característica para ejecutar consultas Gremlin en gráficos de propiedades y para ejecutar consultas SPARQL en datos RDF.

Para crear consultas de acceso directo con Neptune, puede utilizar la siguiente sintaxis:

```
SELECT * FROM TABLE(
        system.query(
            DATABASE => 'database_name',
            COLLECTION => 'collection_name',
            QUERY => 'query_string'
        ))
```

En el siguiente ejemplo, se filtra la consulta de acceso directo de Neptune para los aeropuertos con el código `ATL`. Las comillas simples dobles son para escapar.

```
SELECT * FROM TABLE(
        system.query(
            DATABASE => 'graph-database',
            COLLECTION => 'airport',
            QUERY => 'g.V().has(''airport'', ''code'', ''ATL'').valueMap()' 
        ))
```

## Recursos adicionales
<a name="connectors-neptune-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-neptune) en GitHub.com.

# Conector para OpenSearch de Amazon Athena
<a name="connectors-opensearch"></a>

OpenSearch Service

El conector Amazon Athena OpenSearch permite a Amazon Athena comunicarse con sus instancias de OpenSearch para que pueda utilizar SQL para consultar los datos de OpenSearch.

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.

**nota**  
Debido a un problema conocido, el conector OpenSearch no se puede utilizar con una VPC.

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog.

## Requisitos previos
<a name="connectors-opensearch-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Términos
<a name="connectors-opensearch-terms"></a>

Los siguientes términos hacen referencia al conector de OpenSearch.
+ **Dominio**: un nombre que este conector asocia con el punto de conexión de la instancia de OpenSearch. El dominio también se usa como nombre de base de datos. Para las instancias de OpenSearch definidas en Amazon OpenSearch Service, el dominio se puede detectar automáticamente. Para otras instancias, debe proporcionar una asignación entre el nombre de dominio y el punto de conexión.
+ **Índice**: una tabla de base de datos definida en la instancia de OpenSearch.
+ **Asignación**: si un índice es una tabla de base de datos, la asignación es su esquema (es decir, la definición de sus campos y atributos).

  Este conector admite tanto la recuperación de metadatos de la instancia de OpenSearch como de AWS Glue Data Catalog. Si el conector encuentra una base de datos y una tabla de AWS Glue que coincidan con los nombres de dominio e índice de OpenSearch, el conector intenta utilizarlos para la definición del esquema. Le recomendamos que cree su tabla de AWS Glue para que sea un superconjunto de todos los campos del índice de OpenSearch.
+ **Documento**: un registro dentro de una tabla de base de datos.
+ **Flujo de datos**: datos basados en el tiempo que se componen de varios índices de respaldo. Para obtener más información, consulte [Flujos de datos](https://opensearch.org/docs/latest/dashboards/im-dashboards/datastream/) en la documentación de OpenSearch y [Introducción a los flujos de datos](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/data-streams.html#data-streams-example) en la *Guía para desarrolladores de Amazon OpenSearch Service*.
**nota**  
Como los índices de flujos de datos se crean y administran internamente mediante una búsqueda abierta, el conector elige la asignación de esquemas del primer índice disponible. Por este motivo, recomendamos encarecidamente configurar una tabla de AWS Glue como origen de metadatos complementario. Para obtener más información, consulte [Configuración de bases de datos y tablas en AWS Glue](#connectors-opensearch-setting-up-databases-and-tables-in-aws-glue). 

## Parameters
<a name="connectors-opensearch-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector OpenSearch.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="opensearch-gc"></a>

Recomendamos configurar un conector de OpenSearch 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 OpenSearch 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 OPENSEARCH
```

**Propiedades del entorno Lambda**
+  **glue\$1connection**: 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 OpenSearch creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de OpenSearch creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="opensearch-legacy"></a>
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) si está presente y se establece en true (verdadero), el conector no intentará recuperar metadatos complementarios de AWS Glue.
+ **query\$1timeout\$1cluster**: el tiempo de espera, en segundos, para las consultas de estado del clúster utilizadas en la generación de análisis paralelos.
+ **query\$1timeout\$1search**: el tiempo de espera, en segundos, de las consultas de búsqueda utilizadas en la recuperación de documentos de un índice.
+ **auto\$1discover\$1endpoint**: booleano. El valor predeterminado es `true`. Cuando utiliza Amazon OpenSearch Service y establece este parámetro en true (verdadero), el conector puede detectar automáticamente los dominios y puntos de conexión al llamar a las operaciones de API de descripción o lista correspondientes en el servicio OpenSearch Service. Para cualquier otro tipo de instancia de OpenSearch (por ejemplo, autoalojada), debe especificar los puntos de conexión del dominio asociados en la variable `domain_mapping`. Si `auto_discover_endpoint=true`, el conector usa las credenciales de AWS para autenticarse en OpenSearch Service. De lo contrario, el conector recupera las credenciales del nombre de usuario y contraseña de AWS Secrets Manager a través de la variable `domain_mapping`.
+ **domain\$1mapping**: se usa solo cuando `auto_discover_endpoint` se establece en false (falso) y define la asignación entre los nombres de dominio y sus puntos de conexión asociados. La variable `domain_mapping` puede admitir varios puntos de conexión de OpenSearch con el siguiente formato:

  ```
  domain1=endpoint1,domain2=endpoint2,domain3=endpoint3,...       
  ```

  Con el fin de autenticarse en un punto de conexión de OpenSearch, el conector admite cadenas de sustitución inyectadas con el formato `${SecretName}` y con nombre de usuario y contraseña obtenidos de AWS Secrets Manager. El secreto se debe almacenar en el siguiente formato JSON:

  ```
  { "username": "your_username", "password": "your_password" }
  ```

  El conector analizará automáticamente esta estructura JSON para recuperar las credenciales.
**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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) en la *Guía del usuario de AWS Secrets Manager*.

  En el siguiente ejemplo se usa el secreto `opensearch-creds`.

  ```
  movies=https://${opensearch-creds}:search-movies-ne...qu---us-east-1---es.amazonaws.com     
  ```

  En tiempo de ejecución, `${opensearch-creds}` se representa como nombre de usuario y contraseña, como en el siguiente ejemplo.

  ```
  movies=https://myusername@mypassword:search-movies-ne...qu---us-east-1---es.amazonaws.com
  ```

  En el parámetro `domain_mapping`, cada par dominio-punto de conexión puede usar un secreto diferente. El secreto en sí se debe especificar en el formato *user\$1name*@*password*. Aunque la contraseña puede contener signos `@` incrustados, la primera `@` sirve como separador de *user\$1name*.

  También es importante tener en cuenta que este conector utiliza la coma (,) y el signo igual (=) como separadores para los pares dominio-punto de conexión. Por este motivo, no debe utilizarlos en ningún lugar dentro del secreto almacenado.

## Configuración de bases de datos y tablas en AWS Glue
<a name="connectors-opensearch-setting-up-databases-and-tables-in-aws-glue"></a>

El conector obtiene información de metadatos mediante AWS Glue u OpenSearch. Puede configurar una tabla de AWS Glue como origen de la definición de metadatos suplementaria. Para habilitar esta característica, defina una base de datos y una tabla de AWS Glue que coincidan con el dominio y el índice del origen que va a complementar. El conector también puede aprovechar las definiciones de metadatos almacenadas en la instancia de OpenSearch al recuperar la asignación para el índice especificado.

### Definición de metadatos para matrices en OpenSearch
<a name="connectors-opensearch-defining-metadata-for-arrays-in-opensearch"></a>

OpenSearch no tiene un tipo de datos de matrices dedicado. Cualquier campo puede contener cero o más valores siempre que sean del mismo tipo de datos. Si desea utilizar OpenSearch como origen de definición de metadatos, debe definir una propiedad `_meta` para todos los índices utilizados con Athena en los campos que se van a considerar una lista o matriz. Si no completa este paso, las consultas devuelven solo el primer elemento del campo de la lista. Al especificar la propiedad `_meta`, los nombres del campo deben estar totalmente cualificados para las estructuras JSON anidadas (por ejemplo, `address.street`, en la que `street` es un campo anidado dentro de una estructura de `address`).

En el siguiente ejemplo, se definen las listas `actor` y `genre` en la tabla `movies`.

```
PUT movies/_mapping 
{ 
  "_meta": { 
    "actor": "list", 
    "genre": "list" 
  } 
}
```

### Tipos de datos
<a name="connectors-opensearch-data-types"></a>

El conector de OpenSearch puede extraer definiciones de metadatos de AWS Glue o de la instancia de OpenSearch. El conector utiliza la asignación de la siguiente tabla para convertir las definiciones en tipos de datos de Apache Arrow, incluidos los puntos que se indican en la sección siguiente.


****  

| OpenSearch | Apache Arrow | AWS Glue | 
| --- | --- | --- | 
| text, keyword, binary | VARCHAR | cadena | 
| long | BIGINT | bigint | 
| scaled\$1float | BIGINT | SCALED\$1FLOAT(...) | 
| integer | INT | int | 
| short | SMALLINT | smallint | 
|  byte | TINYINT | tinyint | 
| double | FLOAT8 | double | 
| float, half\$1float | FLOAT4 | float | 
| booleano | BIT | booleano | 
| date, date\$1nanos | DATEMILLI | marca de tiempo | 
| Estructura JSON | STRUCT | STRUCT | 
| \$1meta (para obtener información, consulte la sección [Definición de metadatos para matrices en OpenSearch](#connectors-opensearch-defining-metadata-for-arrays-in-opensearch)). | LIST | ARRAY | 

#### Notas sobre los tipos de datos
<a name="connectors-opensearch-data-type-considerations-and-limitations"></a>
+ Actualmente, el conector solo admite OpenSearch y los tipos de datos de AWS Glue incluidos en la tabla anterior.
+ `scaled_float` es un número de coma flotante escalado por un factor de escala doble fijo y representado como `BIGINT` en Apache Arrow. Por ejemplo, 0,756 con un factor de escala de 100 se redondea a 76.
+ Para definir un `scaled_float` en AWS Glue, debe seleccionar la columna de `array` y declarar el campo con el formato SCALED\$1FLOAT (*scaling\$1factor*).

  Los ejemplos siguientes son válidos:

  ```
  SCALED_FLOAT(10.51) 
  SCALED_FLOAT(100) 
  SCALED_FLOAT(100.0)
  ```

  Los ejemplos siguientes no son válidos:

  ```
  SCALED_FLOAT(10.) 
  SCALED_FLOAT(.5)
  ```
+ Al hacer la conversión de `date_nanos` a `DATEMILLI`, los nanosegundos se redondean al milisegundo más próximo. Los valores válidos de `date` y `date_nanos` incluyen los siguientes formatos, entre otros:

  ```
  "2020-05-18T10:15:30.123456789" 
  "2020-05-15T06:50:01.123Z" 
  "2020-05-15T06:49:30.123-05:00" 
  1589525370001 (epoch milliseconds)
  ```
+ Un elemento `binary` de OpenSearch es una representación de cadena de un valor binario codificado mediante `Base64` y se convierte a `VARCHAR`.

## Ejecución de consultas SQL
<a name="connectors-opensearch-running-sql-queries"></a>

Los siguientes son ejemplos de consultas DDL que puede usar con este conector. En los ejemplos, *function\$1name* corresponde al nombre de la función de Lambda, *domain* es el nombre del dominio que se desea consultar e *index* es el nombre del índice.

```
SHOW DATABASES in `lambda:function_name`
```

```
SHOW TABLES in `lambda:function_name`.domain
```

```
DESCRIBE `lambda:function_name`.domain.index
```

## Rendimiento
<a name="connectors-opensearch-performance"></a>

El conector de OpenSearch de Athena admite análisis paralelos basados en particiones. El conector utiliza la información de estado del clúster recuperada de la instancia de OpenSearch para generar varias solicitudes de consulta de búsqueda de documentos. Las solicitudes se dividen para cada partición y se ejecutan de forma simultánea.

El conector también inserta los predicados como parte de sus consultas de búsqueda de documentos. El siguiente ejemplo de consulta y predicado muestra cómo utiliza el conector la inserción de predicados.

**Query**

```
SELECT * FROM "lambda:elasticsearch".movies.movies 
WHERE year >= 1955 AND year <= 1962 OR year = 1996
```

**Predicate**

```
(_exists_:year) AND year:([1955 TO 1962] OR 1996)
```

## Consultas de acceso directo
<a name="connectors-opensearch-passthrough-queries"></a>

El conector OpenSearch admite [consultas de acceso directo](federated-query-passthrough.md) y utiliza el lenguaje Query DSL. Para obtener más información sobre las consultas con Query DSL, consulte [Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html) en la documentación de Elasticsearch o [Query DSL](https://opensearch.org/docs/latest/query-dsl/) en la documentación de OpenSearch.

Para utilizar consultas de acceso directo con el conector OpenSearch, utilice la siguiente sintaxis:

```
SELECT * FROM TABLE(
        system.query(
            schema => 'schema_name',
            index => 'index_name',
            query => "{query_string}"
        ))
```

En el siguiente ejemplo de OpenSearch, se filtran las consultas de acceso directo para los empleados con un estado laboral activo en el índice `employee` del esquema `default`.

```
SELECT * FROM TABLE(
        system.query(
            schema => 'default',
            index => 'employee',
            query => "{ ''bool'':{''filter'':{''term'':{''status'': ''active''}}}}"
        ))
```

## Recursos adicionales
<a name="connectors-opensearch-additional-resources"></a>
+ Para obtener información sobre cómo usar el conector OpenSearch de Amazon Athena para consultar datos en Amazon OpenSearch Service y Amazon S3 en una sola consulta, consulte el artículo [Consulta de datos en Amazon OpenSearch Service mediante SQL desde Amazon Athena](https://aws.amazon.com/blogs/big-data/query-data-in-amazon-opensearch-service-using-sql-from-amazon-athena/) en el *Blog de macrodatos de AWS*.
+ Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-elasticsearch) en GitHub.com.

# Conector Oracle de Amazon Athena
<a name="connectors-oracle"></a>

El conector de Oracle de Amazon Athena permite que Amazon Athena ejecute consultas de SQL en los datos almacenados en Oracle que se ejecutan en las instalaciones, en Amazon EC2 o en Amazon RDS. También puede utilizar el conector para consultar datos en [Oracle Exadata](https://www.oracle.com/engineered-systems/exadata/).

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
<a name="connectors-oracle-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-oracle-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Solo se admiten las bases de datos Oracle de la versión 12.1.0.2.
+ Si el conector de Oracle no utiliza una conexión Glue, este escribirá en mayúsculas los nombres de la base de datos, la tabla y la columna de forma predeterminada. 

  Si el conector de Oracle utiliza una conexión de Glue, los nombres de la base de datos, la tabla y la columna no se escribirán de forma predeterminada en mayúsculas por el conector. Para cambiar este comportamiento de mayúsculas y minúsculas, cambie la variable de entorno de Lambda `casing_mode` a `upper` o `lower` según sea necesario.

   Un conector Oracle que utilice una conexión Glue no admite el uso de un controlador de multiplexación.
+ Cuando utiliza el Oracle `NUMBER` sin precisión ni escala definidas, Athena lo trata como `BIGINT`. Para obtener los decimales necesarios en Athena, especifique `default_scale=<number of decimal places>` en las variables de entorno de Lambda.

## Términos
<a name="connectors-oracle-terms"></a>

Los siguientes términos hacen referencia al conector de Oracle.
+ **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.

## Parameters
<a name="connectors-oracle-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de Oracle.

### Conexiones de Glue (recomendado)
<a name="oracle-gc"></a>

Recomendamos configurar un conector de Oracle mediante un objeto de conexiones de Glue. Para ello, establezca la variable de entorno `glue_connection` de la función Lambda del conector Oracle 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 ORACLE
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **is\$1fips\$1enabled**: (opcional) se establece en true cuando el modo FIPS está activado. El valor predeterminado es false.
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada.
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que no tienen una conexión de Glue asociada.
  + **case\$1insensitive\$1search**: realiza búsquedas sin distinguir mayúsculas y minúsculas en los nombres de esquemas y tablas en Oracle. Utilice este valor si la consulta contiene nombres de esquemas o tablas que no coinciden con el uso de mayúsculas y minúsculas predeterminado del conector.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Oracle creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Oracle creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="oracle-legacy"></a>

**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](connect-data-source-serverless-app-repo.md) 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**
+ **default**: la cadena de conexión JDBC que se utilizará para conectarse a la instancia de base de datos de Oracle. Por ejemplo: ., `oracle://${jdbc_connection_string}`
+ **catalog\$1connection\$1string**: la utiliza el controlador de multiplexación (no se admite cuando se utiliza una conexión Glue). 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 myoraclecatalog, el nombre de la variable de entorno será myoraclecatalog\$1connection\$1string.
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **is\$1fips\$1enabled**: (opcional) se establece en true cuando el modo FIPS está activado. El valor predeterminado es false.
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada.
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que no tienen una conexión de Glue asociada.
  + **case\$1insensitive\$1search**: realiza búsquedas sin distinguir mayúsculas y minúsculas en los nombres de esquemas y tablas en Oracle. Utilice este valor si la consulta contiene nombres de esquemas o tablas que no coinciden con el uso de mayúsculas y minúsculas predeterminado del conector.

#### Cadena de conexión
<a name="connectors-oracle-connection-string"></a>

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

```
oracle://${jdbc_connection_string}
```

**nota**  
Si la contraseña contiene caracteres especiales (por ejemplo, `some.password`), escríbala entre comillas dobles cuando la pase a la cadena de conexión (por ejemplo, `"some.password"`). Si no lo hace, puede producirse un error de URL de Oracle especificada no válida.

#### Uso de un controlador de conexión única
<a name="connectors-oracle-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | OracleCompositeHandler | 
| Controlador de metadatos | OracleMetadataHandler | 
| Controlador de registros | OracleRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-oracle-single-connection-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| default | Obligatorio. La cadena de conexión predeterminada. | 
| IsFIPSEnabled | Opcional. Se establece en true cuando el modo FIPS está habilitado. El valor predeterminado es false.  | 

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.

El conector admite conexiones basadas en SSL con instancias de Amazon RDS. La compatibilidad se limita al protocolo de seguridad de la capa de transporte (TLS) y a la autenticación del servidor por parte del cliente. La autenticación mutua no se admite en Amazon RDS. La segunda fila de la tabla siguiente muestra la sintaxis para usar SSL.

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


****  

| Propiedad | Valor | 
| --- | --- | 
| default | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle\$1@//hostname:port/servicename | 
|  | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle\$1@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS) (HOST=<HOST\$1NAME>)(PORT=))(CONNECT\$1DATA=(SID=))(SECURITY=(SSL\$1SERVER\$1CERT\$1DN=))) | 

#### Proporcionar credenciales
<a name="connectors-oracle-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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}"}
  ```

**nota**  
Si la contraseña contiene caracteres especiales (por ejemplo, `some.password`), escríbala entre comillas dobles cuando la guarde en Secrets Manager (por ejemplo, `"some.password"`). Si no lo hace, puede producirse un error de URL de Oracle especificada no válida.

**Ejemplo de cadena de conexión con nombre secreto**  
La siguiente cadena tiene el nombre secreto `${Test/RDS/Oracle}`.

```
oracle://jdbc:oracle:thin:${Test/RDS/Oracle}@//hostname:port/servicename 
```

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.

```
oracle://jdbc:oracle:thin:username/password@//hostname:port/servicename
```

Actualmente, el conector de Oracle reconoce las propiedades `UID` y `PWD` de JDBC.

#### Uso de un controlador de multiplexación
<a name="connectors-oracle-using-a-multiplexing-handler"></a>

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 | OracleMuxCompositeHandler | 
| Controlador de metadatos | OracleMuxMetadataHandler | 
| Controlador de registros | OracleMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-oracle-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 myoraclecatalog, el nombre de la variable de entorno será myoraclecatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de Oracle MUX que admite dos instancias de base de datos: `oracle1` (la predeterminada) y `oracle2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle1\$1@//oracle1.hostname:port/servicename | 
| oracle\$1catalog1\$1connection\$1string | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle1\$1@//oracle1.hostname:port/servicename | 
| oracle\$1catalog2\$1connection\$1string | oracle://jdbc:oracle:thin:\$1\$1Test/RDS/Oracle2\$1@//oracle2.hostname:port/servicename | 

## Compatibilidad con tipos de datos
<a name="connectors-oracle-data-type-support"></a>

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


****  

| JDBC | Oracle | Arrow | 
| --- | --- | --- | 
| Booleano | booleano | Bit | 
| Entero | N/A | Pequeño | 
| Short | smallint | Smallint | 
| Entero | integer | Int | 
| Largo | bigint | Bigint | 
| float | float4 | Float4 | 
| Double | float8 | Float8 | 
| Date | date | DateDay | 
| Marca de tiempo | marca de tiempo | DateMilli | 
| Cadena | text | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | numeric(p,s) | Decimal | 
| ARRAY | N/D (ver nota) | Enumeración | 

## Particiones y divisiones
<a name="connectors-oracle-partitions-and-splits"></a>

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
<a name="connectors-oracle-performance"></a>

Oracle admite particiones nativas. El conector Oracle de Athena puede recuperar datos de estas particiones en paralelo. Si quiere consultar conjuntos de datos muy grandes con una distribución uniforme de particiones, se recomienda encarecidamente la partición nativa. 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 Oracle resiste las limitaciones debidas a la simultaneidad. Sin embargo, los tiempos de ejecución de las consultas suelen ser prolongados.

El conector Oracle de Athena inserta predicados para reducir los datos analizados en la consulta. 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. 

### Predicados
<a name="connectors-oracle-performance-predicates"></a>

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 Oracle de Athena puede combinar estas expresiones e insertarlas directamente en Oracle para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Oracle de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad:** EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-oracle-performance-pushdown-example"></a>

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%');
```

## Consultas de acceso directo
<a name="connectors-oracle-passthrough-queries"></a>

El conector de Oracle admite [consultas de acceso directo](federated-query-passthrough.md). 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 transferencia de datos con Oracle, 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 de Oracle. La consulta selecciona todas las columnas de la tabla `customer`.

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

## Información sobre licencias
<a name="connectors-oracle-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-oracle/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-oracle/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-oracle-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-oracle/pom.xml) para el conector de Oracle en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-oracle) en GitHub.com.

# Conector para PostgreSQL de Amazon Athena
<a name="connectors-postgresql"></a>

El conector de PostgreSQL de Amazon Athena permite a Athena acceder a las bases de datos de PostgreSQL.

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
<a name="connectors-postgres-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-postgresql-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Al igual que PostgreSQL, Athena considera que los espacios finales de los tipos `CHAR` de PostgreSQL son semánticamente insignificantes a efectos de longitud y comparación. Tenga en cuenta que esto solo se aplica a los tipos `CHAR`, pero no a los tipos `VARCHAR`. Athena ignora los espacios finales del tipo `CHAR`, pero los considera importantes para el tipo `VARCHAR`.
+ Cuando utiliza el tipo de datos de cadena de caracteres [citext](https://www.postgresql.org/docs/current/citext.html) que no distingue entre mayúsculas y minúsculas, PostgreSQL utiliza una comparación de datos que no distingue entre mayúsculas y minúsculas que es diferente de la de Athena. Esta diferencia crea una discrepancia en los datos durante las operaciones de`JOIN` en SQL. Para solucionar este problema, utilice la característica de consultas de acceso directo del conector PostgreSQL. Para obtener más información, consulte la sección de [consultas de acceso directo](#connectors-postgres-passthrough-queries) más adelante en este tema. 

## Términos
<a name="connectors-postgresql-terms"></a>

Los siguientes términos hacen referencia al conector de PostgreSQL.
+ **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.

## Parameters
<a name="connectors-postgresql-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector PostgreSQL.

**nota**  
Los conectores de orígenes de datos de Athena creados a partir del 3 de diciembre de 2024 utilizan conexiones de AWS Glue.

### Conexiones de Glue (recomendado)
<a name="connectors-postgresql-gc"></a>

Recomendamos configurar un conector de PostgreSQL mediante un objeto de conexiones de Glue. 

Para ello, establezca la variable de entorno `glue_connection` del conector Lambda para PostgreSQL con el nombre de la conexión de Glue que se va a utilizar.

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 POSTGRESQL
```

**Propiedades del entorno Lambda**

**glue\$1connection**: 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 PostgreSQL creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de PostgreSQL creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-postgresql-connection-legacy"></a>

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](connect-data-source-serverless-app-repo.md) 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`.

#### Cadena de conexión
<a name="connectors-postgresql-connection-string"></a>

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

```
postgres://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-postgresql-using-a-multiplexing-handler"></a>

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 | PostGreSqlMuxCompositeHandler | 
| Controlador de metadatos | PostGreSqlMuxMetadataHandler | 
| Controlador de registros | PostGreSqlMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-postgresql-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 mypostgrescatalog, el nombre de la variable de entorno será mypostgrescatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de PostgreSQL MUX que admite dos instancias de base de datos: `postgres1` (la predeterminada) y `postgres2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | postgres://jdbc:postgresql://postgres1.host:5432/default?\$1\$1Test/RDS/PostGres1\$1 | 
| postgres\$1catalog1\$1connection\$1string | postgres://jdbc:postgresql://postgres1.host:5432/default?\$1\$1Test/RDS/PostGres1\$1 | 
| postgres\$1catalog2\$1connection\$1string | postgres://jdbc:postgresql://postgres2.host:5432/default?user=sample&password=sample | 

##### Proporcionar credenciales
<a name="connectors-postgresql-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${Test/RDS/PostGres1}`.

```
postgres://jdbc:postgresql://postgres1.host:5432/default?...&${Test/RDS/PostGres1}&...
```

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.

```
postgres://jdbc:postgresql://postgres1.host:5432/default?...&user=sample2&password=sample2&...
```

Actualmente, el conector de PostgreSQL reconoce las propiedades `user` y `password` de JDBC.

##### Habilitar SSL
<a name="connectors-postgresql-ssl"></a>

Para admitir SSL en su conexión PostgreSQL, agregue lo siguiente a la cadena de conexión:

```
&sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
```

**Ejemplo**  
En el siguiente ejemplo de cadena de conexión no se utiliza SSL.

```
postgres://jdbc:postgresql://example-asdf-aurora-postgres-endpoint:5432/asdf?user=someuser&password=somepassword
```

Para habilitar SSL, modifique la cadena de la siguiente manera.

```
postgres://jdbc:postgresql://example-asdf-aurora-postgres-endpoint:5432/asdf?user=someuser&password=somepassword&sslmode=verify-ca&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory
```

#### Uso de un controlador de conexión única
<a name="connectors-postgresql-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | PostGreSqlCompositeHandler | 
| Controlador de metadatos | PostGreSqlMetadataHandler | 
| Controlador de registros | PostGreSqlRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-postgresql-single-connection-handler-parameters"></a>


****  

| 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 PostgreSQL compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | postgres://jdbc:postgresql://postgres1.host:5432/default?secret=\$1\$1Test/RDS/PostgreSQL1\$1 | 

#### Parámetros de vertido
<a name="connectors-postgresql-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-postgresql-data-type-support"></a>

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


****  

| JDBC | PostgreSQL | Arrow | 
| --- | --- | --- | 
| Booleano | Booleano | Bit | 
| Entero | N/A | Pequeño | 
| Short | smallint | Smallint | 
| Entero | integer | Int | 
| Largo | bigint | Bigint | 
| float | float4 | Float4 | 
| Double | float8 | Float8 | 
| Date | date | DateDay | 
| Marca de tiempo | marca de tiempo | DateMilli | 
| Cadena | text | Varchar | 
| Bytes | bytes | Varbinary | 
| BigDecimal | numeric(p,s) | Decimal | 
| ARRAY | N/D (ver nota) | Enumeración | 

**nota**  
El tipo `ARRAY` se admite en el conector de PostgreSQL con las siguientes restricciones: no se admiten las matrices multidimensionales (`<data_type>[][]` o matrices anidadas). Las columnas con los tipos de datos `ARRAY` no admitidos se convierten a una matriz de elementos de cadena (`array<varchar>`).

## Particiones y divisiones
<a name="connectors-postgresql-partitions-and-splits"></a>

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
<a name="connectors-postgresql-performance"></a>

PostgreSQL admite particiones nativas. El conector PostgreSQL de Athena puede recuperar datos de estas particiones en paralelo. Si quiere consultar conjuntos de datos muy grandes con una distribución uniforme de particiones, se recomienda encarecidamente la partición nativa.

El conector PostgreSQL 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. Sin embargo, seleccionar un subconjunto de columnas da como resultado que en ocasiones se prolongue el tiempo de ejecución de las consultas.

### Cláusulas LIMIT
<a name="connectors-postgres-performance-limit-clauses"></a>

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
<a name="connectors-postgres-performance-predicates"></a>

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 PostgreSQL de Athena puede combinar estas expresiones e insertarlas directamente en PostgreSQL para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector PostgreSQL de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-postgres-performance-pushdown-example"></a>

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;
```

## Consultas de acceso directo
<a name="connectors-postgres-passthrough-queries"></a>

El conector PostgreSQL admite [consultas de acceso directo](federated-query-passthrough.md). 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 PostgreSQL, 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 PostgreSQL. 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
<a name="connectors-postgresql-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-postgresql/pom.xml) para el conector de PostgreSQL en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-postgresql) en GitHub.com.

# Conector de Redis OSS de Amazon Athena
<a name="connectors-redis"></a>

El conector de Redis OSS permite a Amazon Athena comunicarse con las instancias de Redis OSS para poder consultar los datos de Redis OSS con SQL. Puede utilizar el AWS Glue Data Catalog para asignar sus pares clave-valor de Redis OSS en tablas virtuales.

A diferencia de los conjuntos de datos relacionales tradicionales, Redis OSS no tiene el concepto de tabla o columna. En cambio, Redis OSS ofrece patrones de acceso clave-valor en los que la clave es esencialmente una `string` y el valor es una `string`, un `z-set` o un `hmap`.

Puede usar AWS Glue Data Catalog para crear esquemas y configurar tablas virtuales. Las propiedades especiales de la tabla indican al conector de Redis OSS de Athena cómo asignar las claves y los valores de Redis OSS a una tabla. Para obtener más información, consulte [Configuración de bases de datos y tablas en AWS Glue](#connectors-redis-setting-up-databases-and-tables-in-glue) más adelante en este documento.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog.

El conector de Redis OSS de Amazon Athena es compatible con Amazon MemoryDB y Amazon ElastiCache (Redis OSS).

## Requisitos previos
<a name="connectors-redis-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).
+ Antes de usar este conector, debe configurar una VPC y un grupo de seguridad. Para obtener más información, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md).

## Parameters
<a name="connectors-redis-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Redis.
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (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](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **glue\$1catalog**: (opcional) use esta opción para especificar un [catálogo de AWS Glue entre cuentas](data-sources-glue-cross-account.md). De forma predeterminada, el conector intenta obtener los metadatos de su propia cuenta de AWS Glue.

## Configuración de bases de datos y tablas en AWS Glue
<a name="connectors-redis-setting-up-databases-and-tables-in-glue"></a>

Para habilitar una tabla de AWS Glue con el fin de usarla con Redis OSS, puede establecer en ella las siguientes propiedades: `redis-endpoint`, `redis-value-type` y ya sea `redis-keys-zset` o `redis-key-prefix`.

Además, cualquier base de datos de AWS Glue que contiene tablas de Redis OSS debe tener una `redis-db-flag` en la propiedad del URI de la base de datos. Para establecer la propiedad `redis-db-flag` del URI, use la consola de AWS Glue para editar la base de datos.

En la siguiente lista se describen las propiedades de tabla.
+ **redis-endpoint**: (obligatoria) *el nombre de host*`:`*el puerto*`:`*la contraseña* del servidor de Redis OSS que contiene los datos de esta tabla (por ejemplo, `athena-federation-demo.cache.amazonaws.com:6379`). De manera alternativa, puede almacenar el punto de conexión, o parte de este, en AWS Secrets Manager mediante \$1\$1*Secret\$1Name*\$1 como valor de propiedad de la tabla.

**nota**  
Para usar la función Consulta federada de Athena con AWS Secrets Manager, la VPC conectada a la función de Lambda debe tener [acceso a Internet](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) para conectarse a Secrets Manager.
+ **redis-keys-zset**: (obligatoria si no se usa `redis-key-prefix`) una lista de claves separadas por comas, cuyo valor es un [zset](https://redis.com/ebook/part-2-core-concepts/chapter-3-commands-in-redis/3-5-sorted-sets/) (por ejemplo, `active-orders,pending-orders`). Cada uno de los valores del zset se trata como una clave que forma parte de la tabla. Se debe establecer la propiedad `redis-keys-zset` o la propiedad `redis-key-prefix`.
+ **redis-key-prefix**: (obligatoria si no se usa `redis-keys-zset`) una lista de prefijos de claves separados por comas para buscar valores en la tabla (por ejemplo, `accounts-*,acct-`). Se debe establecer la propiedad `redis-key-prefix` o la propiedad `redis-keys-zset`.
+ **redis-value-type**: (obligatoria) determina cómo se asignan los valores de las claves definidas por `redis-key-prefix` o `redis-keys-zset` a la tabla. Se asigna un literal a una sola columna. Un zset también se asigna a una sola columna, pero cada clave puede almacenar varias filas. Un hash permite que cada clave sea una fila con varias columnas (por ejemplo, un hash, literal o zset).
+ **redis-ssl-flag**: (opcional) cuando es `True`, se crea una conexión a Redis que usa SSL/TLS. El valor predeterminado es `False`.
+ **redis-cluster-flag**: (opcional) cuando es `True`, se habilita compatibilidad con instancias de Redis en clúster. El valor predeterminado es `False`.
+ **redis-db-number**: (opcional) se aplica solo para instancias independientes que no están en un clúster. Establezca este número (por ejemplo, 1, 2 o 3) para que se haga lectura de una base de datos de Redis no predeterminada. El valor predeterminado es la base de datos lógica 0 de Redis. Este número no hace referencia a una base de datos en Athena o AWS Glue, sino a una base de datos lógica de Redis. Para obtener más información, consulte [SELECT index](https://redis.io/commands/select) (Índice SELECT) en la documentación de Redis.

## Tipos de datos
<a name="connectors-redis-data-types"></a>

El conector para Redis OSS admite los siguientes tipos de datos. No se admiten los flujos de Redis OSS.
+ [cadena](https://redis.com/ebook/part-1-getting-started/chapter-1-getting-to-know-redis/1-2-what-redis-data-structures-look-like/1-2-1-strings-in-redis/)
+ [Hash](https://redis.com/ebook/part-1-getting-started/chapter-1-getting-to-know-redis/1-2-what-redis-data-structures-look-like/1-2-4-hashes-in-redis/)
+ Conjunto ordenado ([ZSet](https://redis.com/ebook/part-2-core-concepts/chapter-3-commands-in-redis/3-5-sorted-sets/))

Todos los valores de Redis OSS se recuperan como tipo de datos de la `string`. A continuación, se convierten en uno de los siguientes tipos de datos de Apache Arrow en función de cómo se definen las tablas en el AWS Glue Data Catalog.


****  

| AWS GlueTipo de datos  | Tipo de datos de Apache Arrow | 
| --- | --- | 
| int | INT | 
| cadena | VARCHAR | 
| bigint | BIGINT | 
| double | FLOAT8 | 
| float | FLOAT4 | 
| smallint | SMALLINT | 
| tinyint | TINYINT | 
| booleano | BIT | 
| binario | VARBINARY | 

## Permisos necesarios
<a name="connectors-redis-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-redis.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-redis/athena-redis.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **AWS Glue Data Catalog**: el conector de Redis requiere acceso de solo lectura a AWS Glue Data Catalog para obtener información sobre el esquema.
+ **Registros de CloudWatch**: el conector requiere acceso a Registros de CloudWatch para almacenar registros.
+ **Acceso de lectura a AWS Secrets Manager**: si decide almacenar los detalles del punto de conexión de Redis en Secrets Manager, debe conceder al conector acceso a esos secretos.
+ **Acceso a la VPC**: el conector requiere la capacidad de conectar y desconectar interfaces a la VPC para que pueda conectarse a ella y comunicarse con las instancias de Redis.

## Rendimiento
<a name="connectors-redis-performance"></a>

El conector de Redis OSS de Athena intenta paralelizar las consultas con la instancia de Redis OSS de acuerdo con el tipo de tabla que haya definido (por ejemplo, claves de zset o de prefijo).

El conector Redis de Athena inserta predicados para reducir los datos analizados en la consulta. Sin embargo, las consultas que contienen un predicado en la clave principal generan un error cuando se agota el tiempo de espera. Las cláusulas `LIMIT` reducen la cantidad de datos analizados; sin embargo, si no proporciona un predicado, es probable que las consultas `SELECT` con una cláusula `LIMIT` analicen al menos 16 MB de datos. El conector para Redis resiste las limitaciones debidas a la simultaneidad.

## Consultas de acceso directo
<a name="connectors-redis-passthrough-queries"></a>

El conector Redis admite [consultas de acceso directo](federated-query-passthrough.md). Puede utilizar esta función para ejecutar consultas que utilicen scripts de Lua en bases de datos de Redis. 

Para crear consultas de acceso directo con Redis, puede utilizar la siguiente sintaxis:

```
SELECT * FROM TABLE(
        system.script(
            script => 'return redis.[call|pcall](query_script)',
            keys => '[key_pattern]',
            argv => '[script_arguments]'
))
```

En el siguiente ejemplo se ejecuta un script de Lua para obtener el valor de la clave `l:a`.

```
SELECT * FROM TABLE(
        system.script(
            script => 'return redis.call("GET", KEYS[1])',
            keys => '[l:a]',
            argv => '[]'
))
```

## Información sobre licencias
<a name="connectors-redis-license-information"></a>

El proyecto de conector de Redis de Amazon Athena está cubierto por la [Licencia de Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionales
<a name="connectors-redis-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-redis) en GitHub.com.

# Conector para Redshift de Amazon Athena
<a name="connectors-redshift"></a>

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
<a name="connectors-redshift-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-redshift-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) 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 `CHAR` de Redshift son semánticamente insignificantes a efectos de longitud y comparación. Tenga en cuenta que esto solo se aplica a los tipos `CHAR`, pero no a los tipos `VARCHAR`. Athena ignora los espacios finales del tipo `CHAR`, pero los considera importantes para el tipo `VARCHAR`.

## Términos
<a name="connectors-redshift-terms"></a>

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.

## Parameters
<a name="connectors-redshift-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector Redshift.

### Conexiones de Glue (recomendado)
<a name="redshift-gc"></a>

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\$1connection**: 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 `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="redshift-legacy"></a>

**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](connect-data-source-serverless-app-repo.md) 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\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **disable\$1glue**: (opcional) si está presente y se establece en true (verdadero), el conector no intentará recuperar metadatos complementarios de AWS Glue.
+ **glue\$1catalog**: (opcional) use esta opción para especificar un [catálogo de AWS Glue entre cuentas](data-sources-glue-cross-account.md). De forma predeterminada, el conector intenta obtener los metadatos de su propia cuenta de AWS Glue.

#### Cadena de conexión
<a name="connectors-redshift-connection-string"></a>

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
<a name="connectors-redshift-using-a-multiplexing-handler"></a>

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
<a name="connectors-redshift-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

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\$1catalog1\$1connection\$1string | redshift://jdbc:redshift://redshift1.host:3306/default?\$1\$1Test/RDS/Redshift1\$1 | 
| redshift\$1catalog2\$1connection\$1string | redshift://jdbc:redshift://redshift2.host:3333/default?user=sample2&password=sample2 | 

##### Proporcionar credenciales
<a name="connectors-redshift-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto \$1\$1Test/RDS/ `Redshift1`\$1.

```
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
<a name="connectors-redshift-data-type-support"></a>

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 | 
| Double | Float8 | 
| Date | DateDay | 
| Marca de tiempo | DateMilli | 
| Cadena | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Enumeración | 

## Particiones y divisiones
<a name="connectors-redshift-partitions-and-splits"></a>

Redshift no admite particiones externas. Para obtener información acerca de los problemas relacionados con el rendimiento, consulte [Rendimiento](#connectors-redshift-performance).

## Rendimiento
<a name="connectors-redshift-performance"></a>

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
<a name="connectors-redshift-performance-limit-clauses"></a>

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
<a name="connectors-redshift-performance-top-n-queries"></a>

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
<a name="connectors-redshift-performance-predicates"></a>

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\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-redshift-performance-pushdown-example"></a>

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](https://aws.amazon.com/blogs/big-data/improve-federated-queries-with-predicate-pushdown-in-amazon-athena/) en el *Blog de macrodatos de AWS*.

## Consultas de acceso directo
<a name="connectors-redshift-passthrough-queries"></a>

El conector Redshift admite [consultas de acceso directo](federated-query-passthrough.md). 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
<a name="connectors-redshift-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-redshift/pom.xml) para el conector de Redshift en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-redshift) en GitHub.com.

# Conector SAP HANA de Amazon Athena
<a name="connectors-sap-hana"></a>

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
<a name="connectors-saphana-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-sap-hana-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ En SAP HANA, los nombres de los objetos se convierten a mayúsculas cuando se almacenan en la base de datos. Sin embargo, dado que los nombres entre comillas distinguen entre mayúsculas y minúsculas, es posible que dos tablas tengan 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:saphanaconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=upper"
  ```

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

## Términos
<a name="connectors-sap-hana-terms"></a>

Los siguientes términos hacen referencia al conector de SAP HANA.
+ **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.

## Parameters
<a name="connectors-sap-hana-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector SAP HANA.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-sap-hana-gc"></a>

Recomendamos configurar un conector de SAP HANA 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 SAP HANA 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 SAPHANA
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de SAP HANA creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de SAP HANA creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-sap-hana-legacy"></a>

#### Cadena de conexión
<a name="connectors-sap-hana-connection-string"></a>

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

```
saphana://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-sap-hana-using-a-multiplexing-handler"></a>

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 | SaphanaMuxCompositeHandler | 
| Controlador de metadatos | SaphanaMuxMetadataHandler | 
| Controlador de registros | SaphanaMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-sap-hana-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 mysaphanacatalog, el nombre de la variable de entorno será mysaphanacatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de SAP HANA MUX que admite dos instancias de base de datos: `saphana1` (la predeterminada) y `saphana2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | saphana://jdbc:sap://saphana1.host:port/?\$1\$1Test/RDS/ Saphana1\$1 | 
| saphana\$1catalog1\$1connection\$1string | saphana://jdbc:sap://saphana1.host:port/?\$1\$1Test/RDS/ Saphana1\$1 | 
| saphana\$1catalog2\$1connection\$1string | saphana://jdbc:sap://saphana2.host:port/?user=sample2&password=sample2 | 

##### Proporcionar credenciales
<a name="connectors-sap-hana-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${Test/RDS/Saphana1}`.

```
saphana://jdbc:sap://saphana1.host:port/?${Test/RDS/Saphana1}&...
```

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.

```
saphana://jdbc:sap://saphana1.host:port/?user=sample2&password=sample2&...
```

Actualmente, el conector de SAP HANA reconoce las propiedades `user` y `password` de JDBC.

#### Uso de un controlador de conexión única
<a name="connectors-sap-hana-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | SaphanaCompositeHandler | 
| Controlador de metadatos | SaphanaMetadataHandler | 
| Controlador de registros | SaphanaRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-sap-hana-single-connection-handler-parameters"></a>


****  

| 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 SAP HANA compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | saphana://jdbc:sap://saphana1.host:port/?secret=Test/RDS/Saphana1 | 

#### Parámetros de vertido
<a name="connectors-sap-hana-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-sap-hana-data-type-support"></a>

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 | 
| Double | Float8 | 
| Date | DateDay | 
| Marca de tiempo | DateMilli | 
| Cadena | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Enumeración | 

## Conversiones de tipos de datos
<a name="connectors-sap-hana-data-type-conversions"></a>

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 SAP HANA 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 (SAP HANA) | Tipo de datos convertido (Athena) | 
| --- | --- | 
| DECIMAL | BIGINT | 
| INTEGER | INT | 
| DATE | DATEDAY | 
| TIMESTAMP | DATEMILLI | 

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

## Particiones y divisiones
<a name="connectors-sap-hana-partitions-and-splits"></a>

Una partición se representa mediante una sola columna de partición del tipo `Integer`. La columna contiene los nombres de las particiones definidas en una tabla de SAP HANA. Para una tabla que no tiene nombres de partición, se devuelve \$1, que equivale a una sola partición. Una partición equivale a una división.


****  

| Nombre | Tipo | Descripción | 
| --- | --- | --- | 
| PART\$1ID | Entero | Partición con nombre en SAP HANA. | 

## Rendimiento
<a name="connectors-sap-hana-performance"></a>

SAP HANA admite particiones nativas. El conector SAP HANA de Athena puede recuperar datos de estas particiones en paralelo. Si quiere consultar conjuntos de datos muy grandes con una distribución uniforme de particiones, se recomienda encarecidamente la partición nativa. 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 presenta una limitación significativa y, a veces, genera errores en las consultas debido a la simultaneidad.

El conector SAP HANA 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
<a name="connectors-saphana-performance-limit-clauses"></a>

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
<a name="connectors-saphana-performance-predicates"></a>

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 SAP HANA de Athena puede combinar estas expresiones e insertarlas directamente en SAP HANA para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector SAP HANA de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-saphana-performance-pushdown-example"></a>

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;
```

## Consultas de acceso directo
<a name="connectors-saphana-passthrough-queries"></a>

El conector SAP HANA admite [consultas de acceso directo](federated-query-passthrough.md). 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 realizar consultas de acceso directo con SAP HANA, puede usar 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 de SAP HANA. 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
<a name="connectors-saphana-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-saphana/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-saphana/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-saphana-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-saphana/pom.xml) para el conector de SAP HANA en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-saphana) en GitHub.com.

# Conector Snowflake de Amazon Athena
<a name="connectors-snowflake"></a>

El conector de [Snowflake](https://www.snowflake.com/) 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.

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
<a name="connectors-snowflake-prerequisites"></a>

Implemente el conector en la Cuenta de AWS mediante la consola de Athena o la operación de la API `CreateDataCatalog`. Para obtener más información, consulte [Cómo crear una conexión de origen de datos](connect-to-a-data-source.md).

## Limitaciones
<a name="connectors-snowflake-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Solo las conexiones antiguas admiten la configuración del multiplexor. 
+ Actualmente, se admiten vistas de Snowflake con una sola división. 
+  En Snowflake, los nombres de objetos distinguen entre mayúsculas y minúsculas. Athena acepta mayúsculas y minúsculas en consultas DDL y DML, pero [minúsculas](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#table-names-and-table-column-names-in-ate-must-be-lowercase) de forma predeterminada en los nombres cuando ejecuta la consulta. El conector de Snowflake solo admite minúsculas cuando se utiliza Glue Catalog o Lake Formation. Cuando se utiliza el catálogo de Athena, los clientes pueden controlar el comportamiento de las mayúsculas y minúsculas mediante la variable de entorno `casing_mode` de Lambda, cuyos valores posibles se enumeran en la sección [Parameters](#connectors-snowflake-parameters) (por ejemplo, `key=casing_mode, value = CASE_INSENSITIVE_SEARCH`). 

## Términos
<a name="connectors-snowflake-terms"></a>

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

## Parameters
<a name="connectors-snowflake-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de Snowflake.

### Conexiones de Glue (recomendado)
<a name="snowflake-gc"></a>

Recomendamos configurar un conector de Snowflake por medio de un objeto de conexiones de Glue. Para ello, establezca la variable de entorno `glue_connection` del conector Snowflake Lambda 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 SNOWFLAKE
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **NONE**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados (ejecuta la consulta tal cual en Snowflake). Este es el valor predeterminado cuando no se especifica **casing\$1mode**. 
  + **UPPER**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados en la consulta antes de ejecutarla en Snowflake.
  + **LOWER**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados en la consulta antes de ejecutarla en Snowflake.
  + **CASE\$1INSENSITIVE\$1SEARCH**: realiza búsquedas que no distinguen entre mayúsculas y minúsculas en los nombres de esquemas y tablas en Snowflake. Por ejemplo, puede usar este modo si tiene una consulta como `SELECT * FROM EMPLOYEE` y Snowflake contiene una tabla llamada `Employee`. Sin embargo, si hay conflictos de nombres, como cuando se llama a una tabla `EMPLOYEE` y se llama a otra `Employee` en Snowflake, la consulta fallará.

**nota**  
El conector de Snowflake creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Snowflake creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

**Almacenamiento de credenciales**

Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales. Para obtener más información, consulte [Autenticación con Snowflake](connectors-snowflake-authentication.md).

### Conexiones heredadas
<a name="snowflake-legacy"></a>

**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](connect-data-source-serverless-app-repo.md) 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**
+ **default**: la cadena de conexión JDBC que se utilizará para conectarse a la instancia de base de datos de Snowflake. Por ejemplo: ., `snowflake://${jdbc_connection_string}`
+ **catalog\$1connection\$1string**: la utiliza el controlador de multiplexación (no se admite cuando se utiliza una conexión Glue). 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\$1connection\$1string.
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **NONE**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados (ejecuta la consulta tal cual en Snowflake). Este es el valor predeterminado cuando no se especifica **casing\$1mode**. 
  + **UPPER**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados en la consulta antes de ejecutarla en Snowflake.
  + **LOWER**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados en la consulta antes de ejecutarla en Snowflake.
  + **CASE\$1INSENSITIVE\$1SEARCH**: realiza búsquedas que no distinguen entre mayúsculas y minúsculas en los nombres de esquemas y tablas en Snowflake. Por ejemplo, puede usar este modo si tiene una consulta como `SELECT * FROM EMPLOYEE` y Snowflake contiene una tabla llamada `Employee`. Sin embargo, si hay conflictos de nombres, como cuando se llama a una tabla `EMPLOYEE` y se llama a otra `Employee` en Snowflake, la consulta fallará.
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

#### Cadena de conexión
<a name="connectors-snowflake-connection-string"></a>

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
<a name="connectors-snowflake-using-a-multiplexing-handler"></a>

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
<a name="connectors-snowflake-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

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&\$1\$1Test/RDS/Snowflake1\$1 | 
| snowflake\$1catalog1\$1connection\$1string | snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1\$1\$1Test/RDS/Snowflake1\$1 | 
| snowflake\$1catalog2\$1connection\$1string | snowflake://jdbc:snowflake://snowflake2.host:port/?warehouse=warehousename&db=db1&schema=schema1&user=sample2&password=sample2 | 

##### Proporcionar credenciales
<a name="connectors-snowflake-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 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
<a name="connectors-snowflake-using-a-single-connection-handler"></a>

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
<a name="connectors-snowflake-single-connection-handler-parameters"></a>


****  

| 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
<a name="connectors-snowflake-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-snowflake-data-type-support"></a>

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 | 
| Double | Float8 | 
| Date | DateDay | 
| Marca de tiempo | DateMilli | 
| Cadena | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Enumeración | 

## Conversiones de tipos de datos
<a name="connectors-snowflake-data-type-conversions"></a>

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 | 
| DATE | TIMESTAMPMILLI | 
| INTEGER | INT | 
| DECIMAL | BIGINT | 
| TIMESTAMP\$1NTZ | TIMESTAMPMILLI | 

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

## Particiones y divisiones
<a name="connectors-snowflake-partitions-and-splits"></a>

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.

Para crear esta columna sintética y las particiones, Athena requiere que se defina una clave principal. Sin embargo, dado que Snowflake no aplica restricciones de clave principal, deberá aplicar la unicidad por su cuenta. En caso contrario, Athena adoptará una única partición de forma predeterminada.

## Rendimiento
<a name="connectors-snowflake-performance"></a>

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
<a name="connectors-snowflake-performance-limit-clauses"></a>

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
<a name="connectors-snowflake-performance-predicates"></a>

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\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-snowflake-performance-pushdown-example"></a>

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;
```

# Autenticación con Snowflake
<a name="connectors-snowflake-authentication"></a>

Es posible configurar el conector de Snowflake de Amazon Athena para que use el método de autenticación mediante par de claves o el método de autenticación OAuth para conectarse al almacén de datos de Snowflake. Ambos métodos ofrecen un acceso seguro a Snowflake y evitan la necesidad de almacenar contraseñas en las cadenas de conexión.
+ **Autenticación mediante par de claves**: este método utiliza pares de claves públicas o privadas RSA para autenticarse en Snowflake. La clave privada firma digitalmente las solicitudes de autenticación, mientras que la clave pública correspondiente se registra en Snowflake para su verificación. Con este método no es necesario almacenar contraseñas.
+ **Autenticación OAuth**: este método utiliza un token de autorización y un token de actualización para la autenticación con Snowflake. Admite la actualización automática de tokens, lo que lo hace adecuado para aplicaciones de larga duración.

Para obtener más información, consulte [Autenticación mediante par de claves](https://docs.snowflake.com/en/user-guide/key-pair-auth) y [Autenticación OAuth](https://docs.snowflake.com/en/user-guide/oauth-custom) en la guía del usuario de Snowflake.

## Requisitos previos
<a name="connectors-snowflake-authentication-prerequisites"></a>

Antes de comenzar, complete los siguientes requisitos previos:
+ Acceso a la cuenta de Snowflake con privilegios administrativos.
+ Cuenta de usuario de Snowflake dedicada al conector de Athena.
+ OpenSSL u otras herramientas equivalentes de generación de claves para la autenticación mediante par de claves.
+ Acceso a AWS Secrets Manager para crear y administrar secretos.
+ Navegador web para completar el flujo de OAuth para la autenticación de OAuth.

## Cómo configurar la autenticación mediante par de claves
<a name="connectors-snowflake-keypair-authentication"></a>

Este proceso implica generar un par de claves RSA, configurar la cuenta de Snowflake con la clave pública y almacenar la clave privada de forma segura en AWS Secrets Manager. Los siguientes pasos lo guiarán en la creación de las claves criptográficas, la configuración de los permisos necesarios en Snowflake y la configuración de las credenciales de AWS para una autenticación sin inconvenientes. 

1. **Generación de par de claves de RSA**

   Genere un par de claves privada y pública con OpenSSL.
   + Para generar una versión sin cifrar, utilice el siguiente comando en la aplicación de línea de comandos local.

     ```
     openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
     ```
   + Para generar una versión cifrada, utilice el siguiente comando, que omite `-nocrypt`.

     ```
     openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
     ```
   + Para generar una clave pública a partir de una clave privada.

     ```
     openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
     # Set appropriate permissions (Unix/Linux)
     chmod 600 rsa_key.p8
     chmod 644 rsa_key.pub
     ```
**nota**  
No comparta la clave privada. La clave privada debe estar accesible únicamente para la aplicación que necesita autenticarse en Snowflake.

1. **Extraiga el contenido de la clave pública sin delimitadores para Snowflake**

   ```
   # Extract public key content (remove BEGIN/END lines and newlines)
   cat rsa_key.pub | grep -v "BEGIN\|END" | tr -d '\n'
   ```

   Guarde esta salida, ya que la necesitará más adelante en el siguiente paso.

1. **Configure el usuario de Snowflake**

   Siga estos pasos para configurar un usuario de Snowflake.

   1. Cree un usuario dedicado para el conector de Athena si aún no existe.

      ```
      -- Create user for Athena connector
      CREATE USER athena_connector_user;
      
      -- Grant necessary privileges
      GRANT USAGE ON WAREHOUSE your_warehouse TO ROLE athena_connector_role;
      GRANT USAGE ON DATABASE your_database TO ROLE athena_connector_role;
      GRANT SELECT ON ALL TABLES IN DATABASE your_database TO ROLE athena_connector_role;
      ```

   1. Conceda privilegios de autenticación. Para asignar una clave pública a un usuario, debe contar con uno de los siguientes roles o privilegios.
      + El privilegio `MODIFY PROGRAMMATIC AUTHENTICATION METHODS` o el privilegio `OWNERSHIP` sobre el usuario.
      + El rol de `SECURITYADMIN` o superior.

      Conceda los privilegios necesarios para asignar claves públicas con el siguiente comando.

      ```
      GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER athena_connector_user TO ROLE your_admin_role;
      ```

   1. Asigne la clave pública al usuario de Snowflake con el siguiente comando.

      ```
      ALTER USER athena_connector_user SET RSA_PUBLIC_KEY='RSAkey';
      ```

      Verifique que la clave pública se haya asignado correctamente al usuario con el siguiente comando.

      ```
      DESC USER athena_connector_user;
      ```

1. **Almacene la clave privada en AWS Secrets Manager**

   1. Convierta la clave privada al formato requerido por el conector.

      ```
      # Read private key content
      cat rsa_key.p8
      ```

   1. Cree un secreto en AWS Secrets Manager con la siguiente estructura.

      ```
      {
        "sfUser": "your_snowflake_user",
        "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----",
        "pem_private_key_passphrase": "passphrase_in_case_of_encrypted_private_key(optional)"
      }
      ```
**nota**  
El encabezado y el pie de página son opcionales.
La clave privada debe estar separada por `\n`.

## Configuración de la autenticación OAuth
<a name="connectors-snowflake-oauth-authentication"></a>

Este método de autenticación permite un acceso seguro a Snowflake basado en tokens, con capacidades de actualización automática de credenciales. El proceso de configuración implica crear una integración de seguridad en Snowflake, recuperar las credenciales de cliente de OAuth, completar el flujo de autorización para obtener un código de acceso y almacenar las credenciales de OAuth en AWS Secrets Manager para que las utilice el conector. 

1. **Cree una integración de seguridad en Snowflake**

   Ejecute el siguiente comando SQL en Snowflake para crear una integración de seguridad OAuth de Snowflake.

   ```
   CREATE SECURITY INTEGRATION my_snowflake_oauth_integration_a
     TYPE = OAUTH
     ENABLED = TRUE
     OAUTH_CLIENT = CUSTOM
     OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
     OAUTH_REDIRECT_URI = 'https://localhost:8080/oauth/callback'
     OAUTH_ISSUE_REFRESH_TOKENS = TRUE
     OAUTH_REFRESH_TOKEN_VALIDITY = 7776000;
   ```

   **Parámetros de configuración**
   + `TYPE = OAUTH`: especifica el tipo de autenticación de OAuth.
   + `ENABLED = TRUE`: habilita la integración de seguridad.
   + `OAUTH_CLIENT = CUSTOM`: utiliza una configuración de cliente OAuth personalizada.
   + `OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'`: establece el tipo de cliente para aplicaciones seguras.
   + `OAUTH_REDIRECT_URI`: la URL de devolución de llamada para el flujo de OAuth. Puede ser localhost para pruebas.
   + `OAUTH_ISSUE_REFRESH_TOKENS = TRUE`: permite la generación de tokens de actualización.
   + `OAUTH_REFRESH_TOKEN_VALIDITY = 7776000`: establece la validez del token de actualización (90 días en segundos).

1. **Recupera los secretos de los clientes de OAuth**

   1. Ejecute el siguiente comando SQL para obtener las credenciales de cliente.

      ```
      DESC SECURITY INTEGRATION 'MY_SNOWFLAKE_OAUTH_INTEGRATION_A';
      ```

   1. Recupere los secretos de cliente de OAuth.

      ```
      SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('MY_SNOWFLAKE_OAUTH_INTEGRATION_A');
      ```

      **Ejemplo de respuesta**

      ```
      {
        "OAUTH_CLIENT_SECRET_2": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
        "OAUTH_CLIENT_SECRET": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY,
        "OAUTH_CLIENT_ID": "AIDACKCEVSQ6C2EXAMPLE"
      }
      ```
**nota**  
Mantenga estas credenciales seguras y no las comparta. Se usarán para configurar el cliente de OAuth.

1. **Autorice al usuario y recupere el código de autorización**

   1. Abra la siguiente URL en un navegador.

      ```
      https://<your_account>.snowflakecomputing.com/oauth/authorize?client_id=<OAUTH_CLIENT_ID>&response_type=code&redirect_uri=https://localhost:8080/oauth/callback
      ```

   1. Complete el flujo de autorización.

      1. Inicie sesión con las credenciales de Snowflake.

      1. Conceda los permisos solicitados. Será redirigido al URI de retorno con un código de autorización.

   1. Extraiga el código de autorización. Para ello, copie el parámetro código de la URL de redirección.

      ```
      https://localhost:8080/oauth/callback?code=<authorizationcode>
      ```
**nota**  
El código de autorización es válido por un tiempo limitado y solo se puede usar una vez.

1. **Almacene las credenciales de OAuth en AWS Secrets Manager**

   Cree un secreto en AWS Secrets Manager con la siguiente estructura.

   ```
   {
     "redirect_uri": "https://localhost:8080/oauth/callback",
     "client_secret": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY",
     "token_url": "https://<your_account>.snowflakecomputing.com/oauth/token-request",
     "client_id": "AIDACKCEVSQ6C2EXAMPLE,
     "username": "your_snowflake_username",
     "auth_code": "authorizationcode"
   }
   ```

   **Campos obligatorios**
   + `redirect_uri`: URI de redirección de OAuth que obtuvo en el paso 1.
   + `client_secret`: secreto de cliente de OAuth que obtuvo en el paso 2.
   + `token_url`: punto de conexión de token OAuth de Snowflake.
   + `client_id`: ID de cliente de OAuth del paso 2.
   + `username`: el nombre de usuario de Snowflake para el conector.
   + `auth_code`: código de autorización que obtuvo en el paso 3.

Después de crear un secreto, obtiene un ARN de secreto que puede usar en la conexión de Glue al [crear una conexión de origen de datos](connect-to-a-data-source.md). 

## Consultas de acceso directo
<a name="connectors-snowflake-passthrough-queries"></a>

El conector Snowflake admite [consultas de acceso directo](federated-query-passthrough.md). 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 Snowflake, puede usar 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 Snowflake. 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
<a name="connectors-snowflake-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-snowflake/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-snowflake/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-snowflake-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-snowflake/pom.xml) para el conector de Snowflake en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-snowflake) en GitHub.com.

# Conector Microsoft SQL Server de Amazon Athena
<a name="connectors-microsoft-sql-server"></a>

El conector de Amazon Athena de [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/?view=sql-server-ver15) permite que Amazon Athena ejecute consultas SQL en los datos almacenados en Microsoft SQL Server mediante JDBC.

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
<a name="connectors-sqlserver-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-microsoft-sql-server-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.
+ En condiciones de filtro, debe enviar los tipos de datos `Date` y `Timestamp` al tipo de dato correspondiente.
+ Para buscar valores negativos de tipo `Real` y `Float`, use el operador `<=` o `>=`.
+ Los tipos de datos `binary`, `varbinary`, `image` y `rowversion` no son compatibles.

## Términos
<a name="connectors-microsoft-sql-server-terms"></a>

Los siguientes términos hacen referencia al conector de SQL Server.
+ **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.

## Parameters
<a name="connectors-microsoft-sql-server-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de SQL Server.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-microsoft-sql-server-gc"></a>

Recomendamos configurar un conector de SQL Server 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 SQL Server con el nombre de la conexión de Glue que desea 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 SQLSERVER
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado.
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de SQL Server creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de SQL Server creado por medio de conexiones Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-microsoft-sql-server-legacy"></a>

#### Cadena de conexión
<a name="connectors-microsoft-sql-server-connection-string"></a>

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

```
sqlserver://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-microsoft-sql-server-using-a-multiplexing-handler"></a>

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 | SqlServerMuxCompositeHandler | 
| Controlador de metadatos | SqlServerMuxMetadataHandler | 
| Controlador de registros | SqlServerMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-microsoft-sql-server-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 mysqlservercatalog, el nombre de la variable de entorno será mysqlservercatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de SQL Server MUX que admite dos instancias de base de datos: `sqlserver1` (la predeterminada) y `sqlserver2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | sqlserver://jdbc:sqlserver://sqlserver1.hostname:port;databaseName=<database\$1name>;\$1\$1secret1\$1name\$1 | 
| sqlserver\$1catalog1\$1connection\$1string | sqlserver://jdbc:sqlserver://sqlserver1.hostname:port;databaseName=<database\$1name>;\$1\$1secret1\$1name\$1 | 
| sqlserver\$1catalog2\$1connection\$1string | sqlserver://jdbc:sqlserver://sqlserver2.hostname:port;databaseName=<database\$1name>;\$1\$1secret2\$1name\$1 | 

##### Proporcionar credenciales
<a name="connectors-microsoft-sql-server-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${secret_name}`.

```
sqlserver://jdbc:sqlserver://hostname:port;databaseName=<database_name>;${secret_name}
```

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.

```
sqlserver://jdbc:sqlserver://hostname:port;databaseName=<database_name>;user=<user>;password=<password>
```

#### Uso de un controlador de conexión única
<a name="connectors-microsoft-sql-server-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | SqlServerCompositeHandler | 
| Controlador de metadatos | SqlServerMetadataHandler | 
| Controlador de registros | SqlServerRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-microsoft-sql-server-single-connection-handler-parameters"></a>


****  

| 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 SQL Server compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | sqlserver://jdbc:sqlserver://hostname:port;databaseName=<database\$1name>;\$1\$1secret\$1name\$1 | 

#### Parámetros de vertido
<a name="connectors-microsoft-sql-server-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-microsoft-sql-server-data-type-support"></a>

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


****  

| SQL Server | Arrow | 
| --- | --- | 
| bit | TINYINT | 
| tinyint | SMALLINT | 
| smallint | SMALLINT | 
| int | INT | 
| bigint | BIGINT | 
| decimal | DECIMAL | 
| numérico | FLOAT8 | 
| smallmoney | FLOAT8 | 
| money | DECIMAL | 
| float[24] | FLOAT4 | 
| float[53] | FLOAT8 | 
| real | FLOAT4 | 
| datetime | Date(MILLISECOND) | 
| datetime2 | Date(MILLISECOND) | 
| smalldatetime | Date(MILLISECOND) | 
| date | Date(DAY) | 
| hora | VARCHAR | 
| datetimeoffset | Date(MILLISECOND) | 
| char[n] | VARCHAR | 
| varchar[n/max] | VARCHAR | 
| nchar[n] | VARCHAR | 
| nvarchar[n/max] | VARCHAR | 
| text | VARCHAR | 
| ntext | VARCHAR | 

## Particiones y divisiones
<a name="connectors-microsoft-sql-server-partitions-and-splits"></a>

Una partición se representa mediante una sola columna de partición del tipo `varchar`. En el caso del conector de SQL Server, una función de partición determina cómo se aplican las particiones en la tabla. La información sobre la función de partición y el nombre de la columna se recuperan de la tabla de metadatos de SQL Server. A continuación, una consulta personalizada obtiene la partición. Las divisiones se crean en función del número de particiones distintas recibidas.

## Rendimiento
<a name="connectors-microsoft-sql-server-performance"></a>

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 SQL Server resiste las limitaciones debidas a la simultaneidad.

El conector SQL Server de Athena inserta predicados para reducir los datos analizados en la consulta. 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. 

### Predicados
<a name="connectors-sqlserver-performance-predicates"></a>

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 SQL Server de Athena puede combinar estas expresiones e insertarlas directamente en SQL Server para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector SQL Server de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, IS\$1DISTINCT\$1FROM, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-sqlserver-performance-pushdown-example"></a>

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%');
```

## Consultas de acceso directo
<a name="connectors-sqlserver-passthrough-queries"></a>

El conector de SQL Server admite [consultas de acceso directo](federated-query-passthrough.md). 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 realizar consultas directas con SQL Server, 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 de SQL Server. 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
<a name="connectors-sqlserver-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-sqlserver/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-sqlserver/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-sqlserver-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-sqlserver/pom.xml) para el conector de SQL Server en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-sqlserver) en GitHub.com.

# Conector Teradata de Amazon Athena
<a name="connectors-teradata"></a>

 El conector de Teradata de Amazon Athena permite que este servicio ejecute consultas SQL en los datos almacenados en las bases de datos de Teradata. 

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

## Requisitos previos
<a name="connectors-teradata-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Limitaciones
<a name="connectors-teradata-limitations"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.

## Términos
<a name="connectors-teradata-terms"></a>

Los siguientes términos hacen referencia al conector de Teradata.
+ **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.

## Parameters
<a name="connectors-teradata-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de Teradata.

### Conexiones de Glue (recomendado)
<a name="connectors-teradata-gc"></a>

Recomendamos configurar un conector de Teradata 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 Teradata 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 TERADATA
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado.
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Teradata creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Teradata creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-teradata-legacy"></a>

#### Cadena de conexión
<a name="connectors-teradata-connection-string"></a>

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

```
teradata://${jdbc_connection_string}
```

#### Uso de un controlador de multiplexación
<a name="connectors-teradata-using-a-multiplexing-handler"></a>

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 | TeradataMuxCompositeHandler | 
| Controlador de metadatos | TeradataMuxMetadataHandler | 
| Controlador de registros | TeradataMuxRecordHandler | 

##### Parámetros del controlador de multiplexación
<a name="connectors-teradata-multiplexing-handler-parameters"></a>


****  

| Parámetro | Descripción | 
| --- | --- | 
| \$1catalog\$1connection\$1string | 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 myteradatacatalog, el nombre de la variable de entorno será myteradatacatalog\$1connection\$1string. | 
| default | Obligatorio. La cadena de conexión predeterminada. Esta cadena se usa cuando el catálogo es lambda:\$1\$1AWS\$1LAMBDA\$1FUNCTION\$1NAME\$1. | 

Las siguientes propiedades de ejemplo son para una función de Lambda de Teradata MUX que admite dos instancias de base de datos: `teradata1` (la predeterminada) y `teradata2`.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | teradata://jdbc:teradata://teradata2.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,user=sample2&password=sample2 | 
| teradata\$1catalog1\$1connection\$1string | teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,\$1\$1Test/RDS/Teradata1\$1 | 
| teradata\$1catalog2\$1connection\$1string | teradata://jdbc:teradata://teradata2.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,user=sample2&password=sample2 | 

##### Proporcionar credenciales
<a name="connectors-teradata-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 nombre secreto**  
La siguiente cadena tiene el nombre secreto `${Test/RDS/Teradata1}`.

```
teradata://jdbc:teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,${Test/RDS/Teradata1}&...
```

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.

```
teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,...&user=sample2&password=sample2&...
```

Actualmente, Teradata 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
<a name="connectors-teradata-using-a-single-connection-handler"></a>

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


****  

| Tipo de controlador | Clase | 
| --- | --- | 
| Controlador compuesto | TeradataCompositeHandler | 
| Controlador de metadatos | TeradataMetadataHandler | 
| Controlador de registros | TeradataRecordHandler | 

##### Parámetros de controlador de conexión única
<a name="connectors-teradata-single-connection-handler-parameters"></a>


****  

| 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 Teradata compatible con una función de Lambda.


****  

| Propiedad | Valor | 
| --- | --- | 
| default | teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,secret=Test/RDS/Teradata1 | 

#### Parámetros de vertido
<a name="connectors-teradata-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-teradata-data-type-support"></a>

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 | 
| Double | Float8 | 
| Date | DateDay | 
| Marca de tiempo | DateMilli | 
| Cadena | Varchar | 
| Bytes | Varbinary | 
| BigDecimal | Decimal | 
| ARRAY | Enumeración | 

## Particiones y divisiones
<a name="connectors-teradata-partitions-and-splits"></a>

Una partición se representa mediante una sola columna de partición del tipo `Integer`. La columna contiene los nombres de las particiones definidas en una tabla de Teradata. Para una tabla que no tiene nombres de partición, se devuelve \$1, que equivale a una sola partición. Una partición equivale a una división.


****  

| Nombre | Tipo | Descripción | 
| --- | --- | --- | 
| partición  | Entero | Partición con nombre en Teradata. | 

## Rendimiento
<a name="connectors-teradata-performance"></a>

Teradata admite particiones nativas. El conector Teradata de Athena puede recuperar datos de estas particiones en paralelo. Si quiere consultar conjuntos de datos muy grandes con una distribución uniforme de particiones, se recomienda encarecidamente la partición nativa. La selección de un subconjunto de columnas ralentiza significativamente el tiempo de ejecución de las consultas. El conector presenta ciertas limitaciones debido a la simultaneidad.

El conector Teradata de Athena inserta predicados para reducir los datos analizados en la consulta. 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.

### Predicados
<a name="connectors-teradata-performance-predicates"></a>

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 Teradata de Athena puede combinar estas expresiones e insertarlas directamente en Teradata para mejorar la funcionalidad y reducir la cantidad de datos analizados.

Los siguientes operadores del conector Teradata de Athena admiten la inserción de predicados:
+ **Booleano: **AND, OR, NOT.
+ **Igualdad: **EQUAL, NOT\$1EQUAL, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL, NULL\$1IF, IS\$1NULL.
+ **Aritmética: **ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE.
+ **Otros: **LIKE\$1PATTERN, IN.

### Ejemplo de inserción combinada
<a name="connectors-teradata-performance-pushdown-example"></a>

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%');
```

## Consultas de acceso directo
<a name="connectors-teradata-passthrough-queries"></a>

El conector Teradata admite [consultas de acceso directo](federated-query-passthrough.md). 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 Teradata, puede utilizar 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 Teradata. La consulta selecciona todas las columnas de la tabla `customer`.

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

## Información sobre licencias
<a name="connectors-teradata-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-teradata/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-teradata/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-teradata-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-teradata/pom.xml) para el conector de Teradata en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-teradata) en GitHub.com.

# Conector para Timestream de Amazon Athena
<a name="connectors-timestream"></a>

El conector de Timestream de Amazon Athena permite que este servicio se comunique con [Amazon Timestream](https://aws.amazon.com/timestream/), lo que permite el acceso a los datos de serie temporal a través de Amazon Athena. De manera opcional, puede utilizar AWS Glue Data Catalog como fuente de metadatos complementarios.

Amazon Timestream es una base de datos de serie temporal rápida, escalable, completamente administrada y diseñada específicamente que facilita el almacenamiento y el análisis de billones de puntos de datos de serie temporal por día. Timestream le ahorra tiempo y costo en la administración del ciclo de vida de los datos de serie temporal al mantener los datos recientes en la memoria y mover los datos históricos a un nivel de almacenamiento de información de costo optimizado en función de las políticas definidas por el usuario.

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.

Si Lake Formation está habilitado en la cuenta, el rol de IAM del conector de Lambda federado de Athena que haya implementado en AWS Serverless Application Repository debe tener acceso de lectura en Lake Formation para AWS Glue Data Catalog.

## Requisitos previos
<a name="connectors-timestream-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Parameters
<a name="connectors-timestream-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de Timestream.

### Conexiones de Glue (recomendado)
<a name="connectors-timestream-gc"></a>

Recomendamos configurar un conector de Timestream por medio de un objeto de conexiones de Glue. Para ello, establezca la variable de entorno `glue_connection` del conector Timestream Lambda 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 TIMESTREAM
```

**Propiedades del entorno Lambda**

**glue\$1connection**: 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 Timestream creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Timestream creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-timestream-legacy"></a>

**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](connect-data-source-serverless-app-repo.md) 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\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
+ **glue\$1catalog**: (opcional) use esta opción para especificar un [catálogo de AWS Glue entre cuentas](data-sources-glue-cross-account.md). De forma predeterminada, el conector intenta obtener los metadatos de su propia cuenta de AWS Glue.

## Configuración de bases de datos y tablas en AWS Glue
<a name="connectors-timestream-setting-up-databases-and-tables-in-aws-glue"></a>

De manera opcional, puede usar AWS Glue Data Catalog como fuente de metadatos complementarios. Para habilitar una tabla de AWS Glue con la intención de usarla con Timestream, debe disponer de una tabla y una base de datos de AWS Glue con nombres que coincidan con la base de datos y la tabla de Timestream a los que quiere proporcionar metadatos complementarios.

**nota**  
Para obtener el mejor rendimiento, use solo minúsculas en los nombres de las bases de datos y tablas. El uso combinado de mayúsculas y minúsculas hace que el conector realice una búsqueda que no distinga mayúsculas de minúsculas, lo que requiere un mayor esfuerzo computacional.

Para configurar una tabla de AWS Glue con la intención de usarla con Timestream, debe establecer las propiedades de la tabla en AWS Glue.

**Para usar una tabla de AWS Glue para metadatos complementarios**

1. Edite la tabla en la consola de AWS Glue para agregar las siguientes propiedades de tabla:
   + **timestream-metadata-flag**: esta propiedad indica al conector de Timestream que este puede usar la tabla para obtener metadatos complementarios. Puede proporcionar cualquier valor para `timestream-metadata-flag` siempre y cuando la `timestream-metadata-flag` esté presente en la lista de propiedades de la tabla.
   + **\$1view\$1template**: cuando use AWS Glue para obtener metadatos complementarios, puede usar esta propiedad de tabla y especificar cualquier SQL de Timestream como vista. El conector de Timestream de Athena usa el SQL de la vista junto con el SQL de Athena para ejecutar la consulta. Esta opción es útil si quiere usar una característica de SQL de Timestream que no está disponible en Athena de otro modo.

1. Asegúrese de usar los tipos de datos adecuados para AWS Glue, como se indica en este documento.

### Tipos de datos
<a name="connectors-timestream-data-types"></a>

Actualmente, el conector de Timestream solo admite un subconjunto de los tipos de datos disponibles en Timestream, específicamente: los valores escalares `varchar`, `double` y `timestamp`.

Para consultar el tipo de datos `timeseries`, debe configurar una vista en las propiedades de la tabla de AWS Glue que use la función `CREATE_TIME_SERIES` de Timestream. También debe proporcionar un esquema para la vista que use la sintaxis `ARRAY<STRUCT<time:timestamp,measure_value::double:double>>` como el tipo de cualquiera de las columnas de la serie temporal. Asegúrese de reemplazar `double` por el tipo escalar adecuado para la tabla.

En la siguiente imagen, se muestra un ejemplo de propiedades de tabla de AWS Glue configuradas para crear una vista en una serie temporal.

![\[Configuración de propiedades de tabla en AWS Glue para crear una vista de una serie temporal.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-timestream-1.png)


## Permisos necesarios
<a name="connectors-timestream-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-timestream.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-timestream/athena-timestream.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.
+ **AWS Glue Data Catalog**: el conector de Timestream requiere acceso de solo lectura a AWS Glue Data Catalog para obtener información sobre el esquema.
+ **Registros de CloudWatch**: el conector requiere acceso a Registros de CloudWatch para almacenar registros.
+ **Acceso a Timestream**: para ejecutar consultas de Timestream.

## Rendimiento
<a name="connectors-timestream-performance"></a>

Le recomendamos usar la cláusula `LIMIT` para limitar los datos devueltos (no los datos analizados) a menos de 256 MB para garantizar que las consultas interactivas tengan un buen rendimiento.

El conector Timestream de Athena inserta predicados para reducir los datos analizados en 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. 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 para Timestream resiste las limitaciones debidas a la simultaneidad.

## Consultas de acceso directo
<a name="connectors-timestream-passthrough-queries"></a>

El conector para Timestream admite [consultas de acceso directo](federated-query-passthrough.md). 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 Timestream, puede utilizar 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 Timestream. 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
<a name="connectors-timestream-license-information"></a>

El proyecto de conector de Timestream de Amazon Athena está cubierto por la [Licencia de Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionales
<a name="connectors-timestream-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-timestream) en GitHub.com.

# Conector para TPC Benchmark DS (TPC-DS) de Amazon Athena
<a name="connectors-tpcds"></a>

El conector de TPC-DS de Amazon Athena permite que este servicio se comunique con un origen de datos de TPC Benchmark DS generados aleatoriamente para usarlo en evaluaciones comparativas y pruebas de funcionamiento de la federación de Athena. El conector Athena TPC-DS genera una base de datos compatible con TPC-DS en uno de cuatro factores de escala. No recomendamos usar este conector como alternativa a las pruebas de rendimiento de lagos de datos basados en Amazon S3.

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
<a name="connectors-tpcds-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).

## Parameters
<a name="connectors-tpcds-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de TPC-DS.

**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 antes del 3 de diciembre de 2024. Estos pueden variar respecto a las [propiedades de conexión de AWS Glue correspondientes](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html). A partir del 3 de diciembre de 2024, utilice los parámetros que se indican a continuación únicamente al [implementar manualmente](connect-data-source-serverless-app-repo.md) una versión anterior de un conector de origen de datos de Athena.

### Conexiones de Glue (recomendado)
<a name="connectors-tpcds-gc"></a>

Recomendamos configurar un conector de TPC-DS 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 TPC-DS 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 TPCDS
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: 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 TPC-DS creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de TPC-DS creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-tpcds-legacy"></a>
+ **spill\$1bucket**: especifica el bucket de Amazon S3 para los datos que superen los límites de la función de Lambda.
+ **spill\$1prefix**: (opcional) de forma predeterminada, se establece una subcarpeta en la carpeta especificada `spill_bucket` llamada `athena-federation-spill`. Le recomendamos configurar un [ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) de Amazon S3 en esta ubicación para eliminar vertidos de más de un número predeterminado de días u horas.
+ **spill\$1put\$1request\$1headers**: (opcional) un mapa codificado en JSON de encabezados y valores de solicitudes para la solicitud `putObject` de Amazon S3 que se usa para el vertidos (por ejemplo, `{"x-amz-server-side-encryption" : "AES256"}`). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la *referencia de la API de Amazon Simple Storage Service*.
+ **kms\$1key\$1id**: (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\$1spill\$1encryption**: (opcional) cuando se establece en `True`, desactiva el cifrado del vertido. El valor predeterminado es `False`, 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

## Prueba de bases de datos y tablas
<a name="connectors-tpcds-test-databases-and-tables"></a>

El conector de TPC-DS de Athena genera una base de datos compatible con TPC-DS en uno de cuatro factores de escala: `tpcds1`, `tpcds10`, `tpcds100`, `tpcds250` o `tpcds1000`.

### Resumen de tablas
<a name="connectors-tpcds-table-summary"></a>

Para obtener una lista completa de las tablas y columnas de datos de prueba, ejecute las consultas `SHOW TABLES` o `DESCRIBE TABLE`. Se proporciona el siguiente resumen de tablas para mayor comodidad.

1. call\$1center

1. catalog\$1page

1. catalog\$1returns

1. catalog\$1sales

1. cliente

1. customer\$1address

1. customer\$1demographics

1. date\$1dim

1. dbgen\$1version

1. household\$1demographics

1. income\$1band

1. inventario

1. elemento

1. promotion

1. razón

1. ship\$1mode

1. almacenar

1. store\$1returns

1. store\$1sales

1. time\$1dim

1. almacén

1. web\$1page

1. web\$1returns

1. web\$1sales

1. web\$1site

Para las consultas de TPC-DS que sean compatibles con este esquema y datos generados, consulte el directorio [athena-tpcds/src/main/resources/queries/](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-tpcds/src/main/resources/queries) en GitHub.

### Consulta de ejemplo
<a name="connectors-tpcds-example-query"></a>

El siguiente ejemplo de consulta `SELECT` revisa en el catálogo de `tpcds` los datos demográficos de clientes de condados específicos.

```
SELECT
  cd_gender,
  cd_marital_status,
  cd_education_status,
  count(*) cnt1,
  cd_purchase_estimate,
  count(*) cnt2,
  cd_credit_rating,
  count(*) cnt3,
  cd_dep_count,
  count(*) cnt4,
  cd_dep_employed_count,
  count(*) cnt5,
  cd_dep_college_count,
  count(*) cnt6
FROM
  "lambda:tpcds".tpcds1.customer c, "lambda:tpcds".tpcds1.customer_address ca, "lambda:tpcds".tpcds1.customer_demographics
WHERE
  c.c_current_addr_sk = ca.ca_address_sk AND
    ca_county IN ('Rush County', 'Toole County', 'Jefferson County',
                  'Dona Ana County', 'La Porte County') AND
    cd_demo_sk = c.c_current_cdemo_sk AND
    exists(SELECT *
           FROM "lambda:tpcds".tpcds1.store_sales, "lambda:tpcds".tpcds1.date_dim
           WHERE c.c_customer_sk = ss_customer_sk AND
             ss_sold_date_sk = d_date_sk AND
             d_year = 2002 AND
             d_moy BETWEEN 1 AND 1 + 3) AND
    (exists(SELECT *
            FROM "lambda:tpcds".tpcds1.web_sales, "lambda:tpcds".tpcds1.date_dim
            WHERE c.c_customer_sk = ws_bill_customer_sk AND
              ws_sold_date_sk = d_date_sk AND
              d_year = 2002 AND
              d_moy BETWEEN 1 AND 1 + 3) OR
      exists(SELECT *
             FROM "lambda:tpcds".tpcds1.catalog_sales, "lambda:tpcds".tpcds1.date_dim
             WHERE c.c_customer_sk = cs_ship_customer_sk AND
               cs_sold_date_sk = d_date_sk AND
               d_year = 2002 AND
               d_moy BETWEEN 1 AND 1 + 3))
GROUP BY cd_gender,
  cd_marital_status,
  cd_education_status,
  cd_purchase_estimate,
  cd_credit_rating,
  cd_dep_count,
  cd_dep_employed_count,
  cd_dep_college_count
ORDER BY cd_gender,
  cd_marital_status,
  cd_education_status,
  cd_purchase_estimate,
  cd_credit_rating,
  cd_dep_count,
  cd_dep_employed_count,
  cd_dep_college_count
LIMIT 100
```

## Permisos necesarios
<a name="connectors-tpcds-required-permissions"></a>

Para obtener información completa sobre las políticas de IAM que requiere este conector, consulte la sección `Policies` del archivo [athena-tpcds.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-tpcds/athena-tpcds.yaml). En la siguiente lista se resumen los permisos requeridos.
+ **Acceso de escritura a Amazon S3**: el conector requiere acceso de escritura a una ubicación de Amazon S3 para volcar los resultados de consultas de gran tamaño.
+ **Athena GetQueryExecution**: el conector usa este permiso para fallar rápidamente cuando finaliza la consulta ascendente de Athena.

## Rendimiento
<a name="connectors-tpcds-performance"></a>

El conector de TPC-DS de Athena intenta paralelizar las consultas en función del factor de escala que elija. La inserción de predicados se lleva a cabo dentro de la función de Lambda.

## Información sobre licencias
<a name="connectors-tpcds-license-information"></a>

El proyecto de conector de TPC-DS de Amazon Athena está cubierto por la [Licencia de Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html).

## Recursos adicionales
<a name="connectors-tpcds-additional-resources"></a>

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-tpcds) en GitHub.com.

# Conector para Vertica de Amazon Athena
<a name="connectors-vertica"></a>

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.

Este conector no utiliza Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

## Requisitos previos
<a name="connectors-vertica-prerequisites"></a>
+ 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](connect-to-a-data-source.md) o [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md).
+ Antes de usar este conector, debe configurar una VPC y un grupo de seguridad. Para obtener más información, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md).

## Limitaciones
<a name="connectors-vertica-limitations"></a>
+ Dado que el conector de Vertica de Athena lee archivos Parquet exportados de Amazon S3, el rendimiento del conector puede ser lento. Cuando consulte tablas grandes, le recomendamos usar una consulta [CREAR TABLA COMO (SELECCIONAR...)](ctas.md) 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) en la *Guía para desarrolladores de AWS Lambda*.

## Flujo de trabajo
<a name="connectors-vertica-workflow"></a>

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\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-vertica-1.png)


1. Se emite una consulta SQL en una o más tablas de Vertica.

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

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

1. 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;
   ```

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

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

1. Athena hace varias llamadas a la función de Lambda y usa un `ArrowReader` de Apache para leer los archivos Parquet del conjunto de datos resultante. Varias llamadas permiten a Athena paralelizar la lectura de los archivos de Amazon S3 y lograr un rendimiento de hasta 100 GB por segundo.

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

## Términos
<a name="connectors-vertica-terms"></a>

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

## Parameters
<a name="connectors-vertica-parameters"></a>

Utilice los parámetros de esta sección para configurar el conector de Vertica.

### Conexiones de Glue (recomendado)
<a name="connectors-vertica-gc"></a>

Recomendamos configurar un conector de Vertica 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 Vertica 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 VERTICA
```

**Propiedades del entorno Lambda**
+ **glue\$1connection**: especifica el nombre de la conexión de Glue asociada al conector federado. 
+ **casing\$1mode**: (opcional) especifica cómo manejar el uso de mayúsculas y minúsculas en los nombres de esquemas y tablas. El parámetro `casing_mode` utiliza los siguientes valores para especificar el comportamiento de las mayúsculas y minúsculas.
  + **none**: no modifica las mayúsculas y minúsculas de los nombres de esquemas y tablas proporcionados. Este es el valor predeterminado para los conectores que tienen una conexión de Glue asociada. 
  + **upper**: convierte a mayúsculas todos los nombres de esquemas y tablas proporcionados.
  + **lower**: convierte a minúsculas todos los nombres de esquemas y tablas proporcionados.

**nota**  
Todos los conectores que utilizan conexiones de Glue deben utilizar AWS Secrets Manager para almacenar credenciales.
El conector de Vertica creado por medio de conexiones de Glue no admite el uso de un controlador de multiplexación.
El conector de Vertica creado por medio de conexiones de Glue solo es compatible con `ConnectionSchemaVersion` 2.

### Conexiones heredadas
<a name="connectors-vertica-legacy"></a>

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
<a name="connectors-vertica-connection-string"></a>

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
<a name="connectors-vertica-using-a-single-connection-handler"></a>

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
<a name="connectors-vertica-single-connection-handler-parameters"></a>


****  

| 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
<a name="connectors-vertica-providing-credentials"></a>

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](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html) 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](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) o un [punto de conexión de VPC](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html) 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 \$1\$1`vertica-username`\$1 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
<a name="connectors-vertica-spill-parameters"></a>

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\$1bucket | Obligatorio. Nombre del bucket de vertido. | 
| spill\$1prefix | Obligatorio. Prefijo de la clave del bucket de vertido. | 
| spill\$1put\$1request\$1headers | (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, \$1"x-amz-server-side-encryption" : "AES256"\$1). Para ver otros encabezados posibles, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) en la referencia de la API de Amazon Simple Storage Service. | 

## Compatibilidad con tipos de datos
<a name="connectors-vertica-data-type-support"></a>

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


****  

| Booleano | 
| --- | 
| BigInt | 
| Short | 
| Entero | 
| Largo | 
| Flotante | 
| Double | 
| Date | 
| Varchar | 
| Bytes | 
| BigDecimal | 
| TimeStamp como Varchar | 

## Rendimiento
<a name="connectors-vertica-performance"></a>

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
<a name="connectors-vertica-passthrough-queries"></a>

El conector para Vertica admite [consultas de acceso directo](federated-query-passthrough.md). 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
<a name="connectors-vertica-license-information"></a>

Al usar este conector, reconoce la inclusión de componentes de terceros, cuya lista se puede encontrar en el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-vertica/pom.xml) para este conector y acepta los términos de las licencias de terceros correspondientes que se proporcionan en el archivo [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-vertica/LICENSE.txt) de GitHub.com.

## Recursos adicionales
<a name="connectors-vertica-additional-resources"></a>

Para obtener la información más reciente sobre la versión del controlador JDBC, consulte el archivo [pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-vertica/pom.xml) para el conector de Vertica en GitHub.com.

Para obtener más información acerca de este conector, consulte [el sitio correspondiente](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-vertica) en GitHub.com y [Consulta de un origen de datos de Vertica en Amazon Athena mediante el SDK de consulta federada de Athena](https://aws.amazon.com/blogs/big-data/querying-a-vertica-data-source-in-amazon-athena-using-the-athena-federated-query-sdk/) en el *Blog de macrodatos de AWS*.

# Cómo crear una conexión de origen de datos
<a name="connect-to-a-data-source"></a>

Para utilizar un conector de origen de datos de Athena, se crea la conexión de AWS Glue que almacena la información de conexión sobre el conector y el origen de datos. Al crear la conexión, se asigna al origen de datos un nombre que se utilizará para hacer referencia al origen de datos en las consultas SQL.

Puede crear y configurar una conexión de origen de datos en Athena a través de la [consola](connect-to-a-data-source-console-steps.md) o de las operaciones de la [API CreateDataCatalog](https://docs.aws.amazon.com/athena/latest/APIReference/API_CreateDataCatalog.html).

**Topics**
+ [Permisos para crear y utilizar un origen de datos en Athena](connect-to-a-data-source-permissions.md)
+ [Uso de la consola de Athena para conectarse a un origen de datos](connect-to-a-data-source-console-steps.md)
+ [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos](connect-data-source-serverless-app-repo.md)
+ [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md)
+ [Extracción de imágenes de ECR a la cuenta de AWS](pull-ecr-customer-account.md)
+ [Cómo registrar la conexión como Catálogo de datos de Glue](register-connection-as-gdc.md)
+ [Habilitación de las consultas federadas entre cuentas](xacct-fed-query-enable.md)
+ [Actualización de un conector de origen de datos](connectors-updating.md)

# Permisos para crear y utilizar un origen de datos en Athena
<a name="connect-to-a-data-source-permissions"></a>

Para crear y utilizar un origen de datos, necesita los siguientes conjuntos de permisos.
+ AmazonAthenaFullAccess que proporciona acceso completo a Amazon Athena y acceso delimitado a las dependencias necesarias para habilitar la consulta, la escritura de resultados y la administración de datos. Para obtener más información, consulte [AmazonAthenaFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html) en la Guía de referencia de políticas administradas por AWS.
+ Permisos para llamar a la API CreateDataCatalog. Estos permisos solo se necesitan cuando se crea un origen de datos que se integra con las conexiones de Glue. Para obtener más información sobre la política de ejemplo, consulte [Permisos necesarios para crear el conector y el catálogo de Athena](athena-catalog-access.md).
+ Si desea utilizar el control de acceso detallado de Lake Formation, además de los permisos indicados anteriormente, también necesitará los siguientes permisos.

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lakeformation:RegisterResource",
          "iam:ListRoles",
          "glue:CreateCatalog",
          "glue:GetCatalogs",
          "glue:GetCatalog"
        ],
        "Resource": "*"
      }
    ]
  }
  ```

------

# Uso de la consola de Athena para conectarse a un origen de datos
<a name="connect-to-a-data-source-console-steps"></a>

Puede utilizar la consola de Athena para crear y configurar una conexión de origen de datos.

**Para crear una conexión a un origen de datos**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.  
![\[Elija el menú de expansión.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/nav-pane-expansion.png)

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, elija **Crear origen de datos**.

1. En **Elegir origen de datos**, elija el origen de datos que quiera que Athena consulte, tenga en cuenta las siguientes recomendaciones:
   + Elija una opción de conexión que corresponda al origen de datos. Athena tiene conectores de orígenes de datos precreados que se pueden configurar para los orígenes, entre ellos, MySQL, Amazon DocumentDB y PostgreSQL.
   + Elija **S3 -AWS Glue Data Catalog** si quiere consultar datos en Amazon S3 y no utiliza un metastore de Apache Hive ni ninguna de las otras opciones de origen de datos de consultas federadas de esta página. Athena utiliza AWS Glue Data Catalog para almacenar metadatos e información de esquemas de orígenes de datos en Amazon S3. Esta es la opción predeterminada (no federada). Para obtener más información, consulte [Utilice AWS Glue Data Catalog para conectarse a los datos](data-sources-glue.md). Para conocer los pasos a seguir con este flujo de trabajo, consulte [Registro y uso de catálogos de datos en Athena](gdc-register.md).
   + Elija **S3 - Apache Hive metastore** (S3: metastore de Apache Hive) para consultar conjuntos de datos en Amazon S3 que utilicen un metastore de Apache Hive. Para obtener más información acerca de esta opción, consulta [Conexión de Athena a un metastore de Apache Hive](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md).
   + Elija **Custom or shared connector** (Conector personalizado o compartido) si quiere crear su propio conector de origen de datos para usarlo con Athena. Para obtener información sobre cómo la escritura de un conector de origen de datos, consulte [Desarrollo de un conector de origen de datos mediante el SDK de Athena Query Federation](connect-data-source-federation-sdk.md).

1. Elija **Siguiente**.

1. En la página **Ingresar detalles del origen de datos**, en **Nombre del origen de datos**, utilice el nombre autogenerado o ingrese un nombre único que desee utilizar en las instrucciones SQL cuando consulte el origen de datos desde Athena. El nombre puede tener hasta 127 caracteres y debe ser único dentro de su cuenta. No se puede cambiar después crearlo. Los caracteres válidos son a-z, A-Z, 0-9, \$1 (guion bajo), @ (arroba) y - (guion). Los nombres `awsdatacatalog`, `hive`, `jmx` y `system` están reservados por Athena y no se pueden utilizar para nombres de orígenes de datos. 

1. Si el origen de datos elegido se integra con las conexiones AWS Glue.

   1. Para los **detalles de conexión de AWS Glue**, ingrese la información requerida. Una conexión contiene las propiedades que se necesitan para conectarse a un origen de datos concreto. Las propiedades necesarias varían en función del tipo de conexión. Para obtener más información sobre las propiedades relacionadas con el conector, consulte [Conectores de orígenes de datos disponibles](connectors-available.md). Para obtener información sobre propiedades de conexión adicionales, consulte [Propiedades de conexión de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) en la *Guía del usuario de AWS Glue*.
**nota**  
Al actualizar las propiedades de la conexión de Glue, es necesario reiniciar el conector de Lambda para obtener las propiedades actualizadas. Para ello, edite las propiedades del entorno y guárdelas sin cambiar nada. 
Al actualizar una conexión de Glue, las siguientes propiedades no se actualizarán automáticamente en la función de Lambda correspondiente. Debe actualizar manualmente la función de Lambda para estas propiedades.  
Configuración de la VPC de Lambda: `security_group_ids`, `subnet_ids`
Rol de ejecución de Lambda: `spill_bucket`, `secret_name`, `spill_kms_key_id`

   1. En el ** rol de IAM de ejecución de Lambda**, elija uno de los siguientes:
      + **Creación y uso de un nuevo rol de ejecución**: (predeterminado) Athena crea un rol de ejecución que utilizará para acceder a los recursos en AWS Lambda en su nombre. Athena necesita este rol para crear el origen de datos federado.
      + **Uso de un rol de ejecución existente**: utilice esta opción para elegir un rol de ejecución existente. En esta opción, elija el rol de ejecución que desee utilizar en el menú desplegable **Rol de ejecución**.

1. Si el origen de datos elegido no se integra con las conexiones AWS Glue. 

   1. Para **Función de Lambda**, elija **Crear una función de Lambda**. La página de funciones del conector elegido se abre en la consola AWS Lambda. La página incluye información detallada sobre el conector.

   1. En **Application settings** (Configuración de aplicación), lea detenidamente la descripción de cada configuración de aplicación y, a continuación, ingrese los valores que correspondan a los requisitos.

      La configuración de aplicación que ve varía según el conector del origen de datos. La configuración mínima requerida incluye lo siguiente:
      + **AthenaCatalogName**: un nombre para la función de Lambda en minúsculas que indica el origen de datos de destino, como `cloudwatchlogs`.
      + **SpillBucket**: un bucket de Amazon S3 en la cuenta para almacenar datos que superen los límites de tamaño de respuesta de la función de Lambda.
**nota**  
Los datos volcados no se volverán a utilizar en ejecuciones posteriores y se podrán eliminar de forma segura. Athena no elimina estos datos por usted. Para administrar estos objetos, considere agregar una política del ciclo de vida de los objetos que elimine los datos antiguos del bucket de vertido de Simple Storage Service (Amazon S3). Para obtener más información, consulte [Administración del ciclo de vida del almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) en la Guía del usuario de Amazon S3.

   1. Seleccione **Confirmo que esta aplicación puede crear roles de IAM y políticas de recursos personalizados**. Para obtener más información, elija el enlace **Info**.

   1. Elija **Desplegar**. Una vez finalizada la implementación, aparece la función de Lambda en la sección **Recursos** en la consola de Lambda.

      Después de implementar el conector de origen de datos en su cuenta, puede conectar Athena a este.

   1. Vuelva a la página **Enter data source details** (Ingresar detalles de orígenes de datos) de la consola de Athena.

   1. En la sección **Detalles de la conexión**, elija el icono de actualización situado junto al cuadro de búsqueda **Seleccione o introduzca una función de Lambda**.

   1. Elija el nombre de la función que acaba de crear en la consola de Lambda. Se muestra el ARN de la función de Lambda.

1. (Opcional) En **Tags** (Etiquetas), agregue pares clave-valor que asociar con este origen de datos. Para obtener más información acerca de las etiquetas, consulte [Etiquetado de recursos de Athena](tags.md).

1. Elija **Siguiente**.

1. En la página **Revisar y crear**, revise los detalles del origen de datos. Para realizar cambios, seleccione **Editar**. 

1. Lea la información que aparece en **Athena creará recursos en la cuenta**. Si está de acuerdo, seleccione **Reconozco que Athena creará recursos en mi nombre**.

1. Elija **Crear origen de datos**. **Athena** creará los siguientes recursos en su nombre.
   + Rol de IAM de ejecución de Lambda
   + Conexión AWS Glue (solo si el origen de datos es compatible con las Conexiones de AWS Glue)
   + Función de Lambda

La sección **Data source details** (Detalles del origen de datos) de la página de la fuente de datos muestra información sobre el nuevo conector. Ahora puede usar el conector en sus consultas de Athena. 

Para obtener información sobre cómo utilizar conectores de datos en las consultas, consulte [Ejecución de consultas federadas](running-federated-queries.md).

# Uso del AWS Serverless Application Repository para implementar un conector de origen de datos
<a name="connect-data-source-serverless-app-repo"></a>

Para implementar un conector de origen de datos, puede utilizar [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/) en lugar de utilizar una conexión de AWS Glue.

**nota**  
Recomendamos utilizar SAR únicamente si se dispone de un conector personalizado o se requiere el uso de un conector antiguo. En caso contrario, se recomienda utilizar la consola de Athena. 

Puede utilizar AWS Serverless Application Repository para encontrar el conector que desea utilizar, proporcionar los parámetros que este requiere y, a continuación, implementar el conector en la cuenta. Luego, después de implementar el conector, utilice la consola de Athena para poner el origen de datos a disposición de Athena.

## Implementación del conector en su cuenta
<a name="connect-data-source-serverless-app-repo-deploying"></a>

**Para usar AWS Serverless Application Repository para implementar un conector de origen de datos en su cuenta, realice el siguiente procedimiento:**

1. Inicie sesión en la Consola de administración de AWS y abra el **repositorio de aplicaciones sin servidor**.

1. En el panel de navegación, elija **Aplicaciones disponibles**.

1. Seleccione la opción **Show apps that create custom IAM roles or resource policies** (Mostrar aplicaciones que crean roles de IAM personalizados o políticas de recursos).

1. En el cuadro de búsqueda, escriba el nombre del conector. Para obtener una lista de conectores de datos de Athena preconstruidos, consulte [Conectores de orígenes de datos disponibles](connectors-available.md).

1. Elija el nombre del conector. Al elegir un conector, se abre la página **Detalles de la aplicación** de la función de Lambda en la consola de AWS Lambda.

1. A la derecha de la página de detalles, en **Application settings** (Configuración de aplicación), complete la información requerida. La configuración mínima requerida incluye lo siguiente. Para obtener información sobre las opciones configurables restantes de los conectores de datos creados por Athena, consulte el tema [Conectores disponibles](https://github.com/awslabs/aws-athena-query-federation/wiki/Available-Connectors) correspondiente en GitHub.
   + **AthenaCatalogName**: un nombre para la función de Lambda en minúsculas que indica el origen de datos de destino, como `cloudwatchlogs`.
   + **SpillBucket**: especifique un bucket de Amazon S3 en la cuenta para recibir datos de cualquier carga de respuesta grande que supere los límites de tamaño de respuesta de la función de Lambda.

1. Seleccione **I acknowledge that this app creates custom IAM roles and resource policies** (Confirmo que esta aplicación puede crear roles de IAM y políticas de recursos personalizados). Para obtener más información, elija el enlace **Info**.

1. En la parte inferior derecha de la sección **Configuración de aplicación**, elija **Implementar**. Una vez finalizada la implementación, aparece la función de Lambda en la sección **Recursos** en la consola de Lambda.

## Hacer que el conector esté disponible en Athena
<a name="connect-data-source-serverless-app-repo-making-the-connector-available-in-athena"></a>

Ahora está listo para usar la consola de Athena para poner el conector de origen de datos a disposición de Athena.

**Para poner el origen de datos a disposición de Athena.**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.  
![\[Elija el menú de expansión.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/nav-pane-expansion.png)

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, elija **Crear origen de datos**.

1. Para **Choose a data source** (Elegir un origen de datos), elija el origen de datos para el que ha creado un conector en el AWS Serverless Application Repository. Este tutorial usa **Amazon CloudWatch Logs** como origen de datos federado.

1. Elija **Siguiente**.

1. En la página **Ingresar detalles del origen de datos**, en **Nombre del origen de datos**, ingrese el nombre que quiera utilizar en las instrucciones SQL cuando consulte el origen de datos desde Athena (por ejemplo, `CloudWatchLogs`). El nombre puede tener hasta 127 caracteres y debe ser único dentro de su cuenta. No se puede cambiar después crearlo. Los caracteres válidos son a-z, A-Z, 0-9, \$1 (guion bajo), @ (arroba) y - (guion). Los nombres `awsdatacatalog`, `hive`, `jmx` y `system` están reservados por Athena y no se pueden utilizar para nombres de orígenes de datos. 

1. En la sección **Detalles de la conexión**, utilice el cuadro **Seleccione o introduzca una función de Lambda** para elegir el nombre de la función que acaba de crear. Se muestra el ARN de la función de Lambda.

1. (Opcional) En **Tags** (Etiquetas), agregue pares clave-valor que asociar con este origen de datos. Para obtener más información acerca de las etiquetas, consulte [Etiquetado de recursos de Athena](tags.md).

1. Elija **Siguiente**.

1. En la página **Review and create** (Revisar y crear), revise los detalles del origen de datos y, a continuación, elija **Create data source** (Crear origen de datos). 

1. La sección **Data source details** (Detalles del origen de datos) de la página de la fuente de datos muestra información sobre el nuevo conector. Ahora puede usar el conector en sus consultas de Athena. 

   Para obtener información sobre cómo utilizar conectores de datos en las consultas, consulte [Ejecución de consultas federadas](running-federated-queries.md).

# Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue
<a name="athena-connectors-vpc-creation"></a>

Algunos conectores de orígenes de datos de Athena y conexiones de AWS Glue requieren una VPC y un grupo de seguridad. Este tema muestra cómo crear una VPC con una subred y un grupo de seguridad para la VPC. En este proceso, se recuperan los ID de la VPC, la subred y el grupo de seguridad que usted haya creado. Estos ID son necesarios cuando se configura la conexión AWS Glue o el conector de origen de datos para su uso con Athena.

**Para crear una VPC para un conector de origen de datos de Athena**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon VPC en [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. Seleccione **Creación de VPC**.

1. En la página **Crear VPC**, en **Configuración de VPC**, en **Recursos para crear**, seleccione **VPC y más**.

1. En **Generación automática de etiquetas de nombre**, en **Generación automática**, ingrese un valor que se utilizará para generar etiquetas de nombre para todos los recursos en la VPC.

1. Seleccione **Creación de VPC**.

1. Cuando finalice el proceso, seleccione **Ver VPC**.

1. En la sección **Details** (Detalles), en **VPC ID** (ID de la VPC), copie el ID de la VPC para su posterior referencia.

A continuación, ya podrá recuperar el ID de subred de la VPC que acaba de crear.

**Para recuperar el ID de subred de la VPC**

1. En el panel de navegación de la consola de la VPC, elija **Subnets** (Subredes).

1. Seleccione el nombre de una subred cuya columna de **VPC** tenga el ID de VPC que anotó.

1. En la sección **Details** (Detalles), en **Subnet ID** (ID de la subred), copie el ID de la subred para su posterior referencia.

A continuación, cree un grupo de seguridad para la VPC.

**Para crear un grupo de seguridad para la VPC**

1. En el panel de navegación de la consola de la VPC, elija **Security** (Seguridad), **Security Groups** (Grupos de seguridad).

1. Elija **Create Security Group** (Crear grupo de seguridad).

1. En la página **Create Security Group** (Crear grupo de seguridad), ingrese la información que se indica a continuación:
   + En **Security group name** (Nombre del grupo de seguridad), ingrese un nombre para el grupo de seguridad.
   + En **Description** (Descripción), ingrese una descripción para el grupo de seguridad. Se requiere una descripción.
   + En **VPC**, ingrese el ID de la VPC de aquella que creó para el conector de origen de datos.
   + En **Inbound rules** (Reglas de entrada) y **Outbound rules** (Reglas de salida), agregue las reglas entrantes y salientes que necesite.

1. Elija **Create Security Group** (Crear grupo de seguridad).

1. En la página **Details** (Detalles) del grupo de seguridad, copie el **ID de grupo de seguridad** para su posterior referencia.

## Consideraciones importantes para usar VPC con conectores de Athena
<a name="vpc-warning-instructions"></a>

Las siguientes instrucciones se aplican a todos los conectores de Athena, ya que todos pueden utilizar VPC.

**nota**  
Al utilizar una VPC con conexiones AWS Glue, deberá configurar los siguientes puntos de conexión de PrivateLink:  
Amazon S3
AWS Glue
AWS Secrets Manager

Como alternativa, puede utilizar el acceso público a Internet. Sin embargo, no se recomienda esta opción por motivos de seguridad.

**aviso**  
Si utiliza acceso público a Internet, es posible que los recursos estén expuestos a riesgos de seguridad adicionales. Se recomienda enfáticamente utilizar puntos de conexión de PrivateLink para mejorar la seguridad en la configuración de la VPC.

# Extracción de imágenes de ECR a la cuenta de AWS
<a name="pull-ecr-customer-account"></a>

Las funciones de Lambda del conector de la federación de Athena utilizan imágenes de contenedor almacenadas en repositorios de Amazon ECR administrados por Athena. Para realizar análisis de seguridad en estas imágenes de contenedor, primero debe copiarlas en un repositorio de Amazon ECR en la cuenta. En esta sección se proporcionan instrucciones paso a paso sobre cómo copiar una imagen en el repositorio y configurar la función de Lambda de modo que utilice la imagen.

## Requisitos previos
<a name="pull-ecr-customer-account-prereq"></a>
+ Un conector de la federación de Athena: el conector se puede crear a través de cualquier origen, siempre que este utilice una imagen de contenedor.
**nota**  
Para verificar la implementación de la imagen, revise la pestaña Imagen en la función de Lambda del conector de federación de Athena
+ Docker instalado y en ejecución
+ AWS CLI instalada
+ Credenciales de cuenta con los permisos de extracción adecuados

## Cómo transferir una imagen
<a name="image-transfer-procedure"></a>

1. Localice el URI de la imagen de la función de Lambda del conector de la federación de Athena  
**Example**  

   ```
   account_id_1.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.15.1
   ```

1. Genere un token de autenticación de Docker para la cuenta administrada por Athena:

   ```
   aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin athena-managed-registry
   ```

   Donde:
   + *regionID* es la región de implementación (por ejemplo, us-east-1)
   + *athena-managed-registry* es la parte del registro del URI de la imagen (por ejemplo, account\$1id\$11.dkr.ecr.us-east-1.amazonaws.com)

1. Extraiga la imagen de la cuenta administrada por Athena:

   ```
   docker pull athenaImageURI
   ```

1. Autentique Docker en el registro:

   ```
   aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin customer-registry
   ```

   *customer-registry* es el registro de ECR (por ejemplo, account\$1id\$12.dkr.ecr.us-east-1.amazonaws.com)

1. Etiquete la imagen extraída para el repositorio:

   ```
   docker tag athenaImageURI yourImageURI
   ```

1. Envíe la imagen al repositorio:

   ```
   docker push yourImageURI
   ```

1. Actualice el conector de la federación de Athena:

   1. Vaya a la función de Lambda

   1. Seleccione **Implementar nueva imagen**

   1. Ingrese el nuevo URI de la imagen

   La imagen del conector federado de Athena ahora se encuentra en la cuenta, con lo que se pueden realizar análisis CVE en la imagen.

# Cómo registrar la conexión como Catálogo de datos de Glue
<a name="register-connection-as-gdc"></a>

Después de crear el origen de datos, podrá utilizar la consola de Athena para registrar la conexión como un Catálogo de datos de Glue. Una vez registrado, podrá administrar el catálogo de datos federados y habilitar un control de acceso detallado mediante Lake Formation. Para más información, consulte [Creación de un catálogo federado](https://docs.aws.amazon.com/lake-formation/latest/dg/create-fed-catalog-data-source.html).

Puede registrar los siguientes conectores para integrarlos con AWS Glue para obtener un control de acceso detallado.
+ Redshift
+ BigQuery
+ DynamoDB (versión preliminar)
+ Snowflake (versión preliminar)
+ MySQL
+ PostgreSQL
+ AWS CMDB
+ Timestream
+ Azure Data Lake Storage
+ Azure Synapse
+ IBM Db2
+ IBM Db2 AS/400 (Db2 iSeries)
+ DocumentDB
+ Google Cloud Storage
+ HBase
+ OpenSearch
+ Oracle
+ SAP HANA
+ SQL Server
+ TPC-DS
+ Cloudera Hive
+ CloudWatch
+ Métricas de CloudWatch
+ Teradata
+ Vertica

## Requisitos previos
<a name="register-connection-as-gdc-pre"></a>

Antes de comenzar, debe completar los requisitos previos.
+ Asegúrese de que dispone de los roles y permisos necesarios para registrar ubicaciones. Para obtener más información, consulte los [Requisitos de los roles](https://docs.aws.amazon.com/lake-formation/latest/dg/registration-role.html) en la Guía para desarrolladores de AWS Lake Formation.
+ Asegúrese de que dispone de los roles necesarios de Lake Formation. Para obtener más información, consulte [Requisitos previos para conectar el catálogo de datos a orígenes de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/federated-catalog-data-connection.html) externos en la Guía para desarrolladores de AWS Lake Formation.
+ El rol que registre en Glue debe tener los permisos que se indican en el siguiente ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket",
                  "s3:GetObject"
              ],
              "Resource": [
      "arn:aws:s3:::amzn-s3-demo-bucket/spill-prefix/*",
      "arn:aws:s3:::amzn-s3-demo-bucket/spill-prefix"
              ]
          },
          {
              "Sid": "lambdainvoke",
              "Effect": "Allow",
              "Action": "lambda:InvokeFunction",
              "Resource": "arn:aws:lambda:us-east-1:111122223333:function:lambda_function_name"
          },
          {
              "Sid": "gluepolicy",
              "Effect": "Allow",
              "Action": "glue:*",
              "Resource": [
              "arn:aws:glue:us-east-1:111122223333:connection/<connection_name>",
      "arn:aws:glue:us-east-1:111122223333:catalog"
              ]
          }
      ]
  }
  ```

------
+ Es su responsabilidad determinar y administrar el acceso adecuado a los datos. Con controles de acceso detallados en consultas federadas, se recomienda utilizar la política administrada [AmazonAthenaFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html). Si desea utilizar una política propia, debe asegurarse de que los usuarios que ejecuten consultas federadas no tengan acceso a los siguientes recursos.
  + `lambda:InvokeFunction` en el conector de Lambda especificado en la conexión de Glue
  + Acceso a la ubicación del bucket de vertido en IAM
  + Acceso a la conexión de Glue asociada al catálogo federado
  + Rol de Lake Formation en IAM

## Cómo registrar la conexión mediante la consola
<a name="register-connection-as-gdc-steps"></a>

**Para registrar la conexión como catálogo de datos de Glue**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la lista **Orígenes de datos**, seleccione el origen de datos que creó para abrir la página **Detalles del origen de datos**. 

1. Seleccione **Introducción a AWS Lake Formation**.
**nota**  
Después de elegir esta opción, deberá administrar la función de Lambda por cuenta propia. Athena no eliminará la función de Lambda.

1. En **Nombre de catálogo de datos**, ingrese un nombre único para el catálogo.

1. Elija el **rol de IAM de Lake Formation** que concede permiso a Lake Formation para invocar la función Lambda. Asegúrese de que el rol tiene los permisos que aparecen en [el ejemplo](#register-connection-as-gdc-pre).

1. En el cuadro de texto, escriba **confirmar** para eliminar el origen de datos de Athena y sustituirlo por un registro de catálogo de datos de Glue.
**nota**  
Esta acción eliminará el origen de datos de Athena y creará un nuevo Catálogo de datos de Glue en su lugar. Una vez completado este proceso, es posible que tenga que actualizar las consultas que acceden al origen de datos para que hagan referencia al Catálogo de datos Glue recién creado.

1. Elija **Crear catálogo e ir a Lake Formation**. Se abrirá la consola de Lake Formation, donde podrá administrar el catálogo y conceder permisos a los usuarios sobre los catálogos, las bases de datos y las tablas.

# Habilitación de las consultas federadas entre cuentas
<a name="xacct-fed-query-enable"></a>

La consulta federada permite consultar orígenes de datos distintos de Amazon S3 mediante conectores de origen de datos implementados en AWS Lambda. La característica de consulta federada entre cuentas permite que la función de Lambda y los orígenes de datos que se van a consultar se encuentren en cuentas diferentes.

**nota**  
Utilice este método únicamente si no ha registrado el origen de datos federado en el AWS Glue Data Catalog. Si registró el origen de datos en el AWS Glue Data Catalog, utilice el modelo de características y permisos entre cuentas de AWS Glue Data Catalog. Para más información, consulte [Concesión de acceso entre cuentas](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html) en la *Guía del usuario de AWS Glue*.

Como administrador de datos, puede habilitar las consultas federadas entre cuentas al compartir el conector de datos con la cuenta de un analista de datos o, como analista de datos, al utilizar un ARN Lambda compartido de un administrador de datos para agregarlo a su cuenta. Cuando se hacen cambios de configuración en un conector de la cuenta de origen, la configuración actualizada se aplica automáticamente a las instancias compartidas del conector en las cuentas de otro usuario.

## Consideraciones y limitaciones
<a name="xacct-fed-query-enable-considerations-and-limitations"></a>
+ La característica de consulta federada entre cuentas está disponible para conectores de datos de metastore que no son de Hive y utilizan un origen de datos basado en Lambda.
+ La característica no está disponible para el tipo de origen de datos AWS Glue Data Catalog. Para obtener información sobre el acceso entre cuentas a AWS Glue Data Catalog, consulte [Configuración del acceso entre cuentas a los catálogos de datos de AWS Glue](security-iam-cross-account-glue-catalog-access.md).
+ Si la respuesta de la función de Lambda del conector supera el límite de tamaño de respuesta de Lambda de 6 MB, Athena cifra, agrupa y distribuye de forma automática la respuesta en un bucket de Amazon S3 que configure. La entidad que ejecuta la consulta de Athena debe tener acceso a la ubicación de la distribución para que Athena pueda leer los datos distribuidos. Le recomendamos que establezca una política de ciclo de vida de Amazon S3 para eliminar los objetos de la ubicación de la distribución, ya que los datos no son necesarios una vez que finaliza la consulta. 
+ No se admite el uso de consultas federadas entre Regiones de AWS. 

## Permisos necesarios
<a name="xacct-fed-query-enable-required-permissions"></a>

Para configurar los permisos necesarios, se deben realizar acciones tanto en la cuenta A (*444455556666*) como en la cuenta B (*111122223333*).

### Acciones en la cuenta A
<a name="xacct-fed-query-enable-required-permissions-account-a"></a>

Para que la cuenta A del administrador de datos comparta una función de Lambda con la cuenta B de analista de datos, la cuenta B requiere la función de invocación de Lambda y el acceso al bucket de desbordamiento. En consecuencia, la cuenta A debería agregar una [política basada en recursos](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) a la función de Lambda y el acceso de la [entidad principal](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html) al bucket de desbordamiento en Amazon S3.

1. La siguiente política otorga permisos de función de invocación de Lambda a la cuenta B en una función de Lambda en la cuenta A.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "CrossAccountInvocationStatement",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:user/username"
                   ]
               },
               "Action": "lambda:InvokeFunction",
               "Resource": "arn:aws:lambda:us-east-1:444455556666:function:lambda-function-name"
           }
       ]
   }
   ```

------

1. La siguiente política permite el acceso del bucket de desbordamiento a la entidad principal de la cuenta B.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
               "AWS": ["arn:aws:iam::111122223333:user/username"]
               },
               "Action": [
                   "s3:GetObject",
                   "s3:ListBucket"
                ],
               "Resource": [
                   "arn:aws:s3:::spill-bucket",
                   "arn:aws:s3:::spill-bucket/*"
               ]
           }
        ]
    }
   ```

------

1. Si la función de Lambda cifra el bucket de desbordamiento con una clave AWS KMS en lugar del cifrado predeterminado que ofrece el SDK de federación, la política de claves AWS KMS de la cuenta A debe conceder acceso al usuario de la cuenta B, como en el ejemplo siguiente.

   ```
   { 
       "Sid": "Allow use of the key", 
       "Effect": "Allow", 
       "Principal": 
       { 
          "AWS": ["arn:aws:iam::account-B-id:user/username"] 
       }, 
       "Action": [ "kms:Decrypt" ], 
       "Resource": "*" // Resource policy that gets placed on the KMS key. 
    }
   ```

### Acciones en la cuenta B
<a name="xacct-fed-query-enable-required-permissions-account-b"></a>

Para que la cuenta A comparta el conector con la cuenta B, la cuenta B debe crear un rol denominado `AthenaCrossAccountCreate-account-A-id` que la cuenta A asume al llamar a la acción de la API [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) de AWS Security Token Service.

1. Utilice la consola de IAM o la AWS CLI para crear el rol de `AthenaCrossAccountCreate-account-A-id` como un rol de política de confianza personalizado. Una política de confianza personalizada delega el acceso y permite a otros realizar acciones en la cuenta de AWS. Para conocer los pasos, consulte [Creación de un rol mediante políticas de confianza personalizadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html) en la *Guía del usuario de IAM*.

   La relación de confianza debe tener un objeto de entidad principal en el que la clave sea `AWS` y el valor sea el ARN de la cuenta A, como en el siguiente ejemplo.

   ```
   ...
   "Principal": 
   { 
      "AWS": ["arn:aws:iam::account-A-id:user/username"]
   }, 
   ...
   ```

1. En la Cuenta B, cree también una política como la siguiente que permita la acción `CreateDataCatalog`. 

   ```
   {
    "Effect": "Allow",
    "Action": "athena:CreateDataCatalog",
    "Resource": "arn:aws:athena:*:account-B-id:datacatalog/*"
   }
   ```

1. Agregue la política que permite la acción `CreateDataCatalog` al rol de `AthenaCrossAccountCreate-account-A-id` que creó con la cuenta B. 

## Uso compartido de un origen de datos de la cuenta A con la cuenta B
<a name="xacct-fed-query-enable-sharing-a-lambda-data-source-in-account-a-with-account-b"></a>

Una vez establecidos los permisos, puede utilizar la página **Orígenes de datos y catálogos** en la consola de Athena para compartir un conector de datos de la cuenta (cuenta A) con otra cuenta (cuenta B). La cuenta A mantiene el control y la propiedad del conector. Cuando la cuenta A hace cambios de configuración en el conector, la configuración actualizada se aplica al conector compartido de la cuenta B.

**nota**  
Solo puede compartir un origen de datos de tipo Lambda y no es posible compartir orígenes de datos que utilicen conexiones de AWS Glue. Para obtener más información, consulte [Conectores de orígenes de datos disponibles](connectors-available.md).

**Para compartir un origen de datos de Lambda de la cuenta A con la cuenta B**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.  
![\[Elija el menú de expansión.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/nav-pane-expansion.png)

1. Elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, elija el enlace del conector que desea compartir.

1. En la página de detalles de un origen de datos de Lambda, en el menú **Acciones** de la esquina superior derecha, elija **Compartir**.

1. En el cuadro de diálogo ¿**Compartir *nombre de Lambda* con otra cuenta?**, introduzca la información necesaria.
   + En **Data source name** (Nombre de origen de datos), ingrese el nombre del origen de datos copiado tal como quiera que aparezca en la otra cuenta.
   + En **Account ID** ID de cuenta, ingrese el ID de la cuenta con la que quiera compartir su origen de datos (en este caso, la cuenta B).

1. Elija **Compartir**. El conector de datos compartidos que ha especificado se crea en la cuenta B. Los cambios de configuración del conector de la cuenta A se aplican al conector de la cuenta B.

## Incorporación de un origen de datos compartido de la cuenta A a la cuenta B
<a name="xacct-fed-query-enable-add-a-shared-lambda-function-arn-to-your-account"></a>

Como analista de datos, es posible que se le proporcione el ARN de un conector para agregarlo a la cuenta desde un administrador de datos. Puede utilizar la página **Orígenes de datos y catálogos** de la consola de Athena para agregar el ARN de Lambda proporcionado por el administrador de la cuenta.

**Para agregar el ARN de Lambda de un conector de datos compartido a la cuenta**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si el panel de navegación no es visible, elija el menú de expansión de la izquierda.

1. Elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, elija **Crear origen de datos**.

1. En la página **Elegir un origen de datos**, elija **Conector personalizado o compartido**.

1. Elija **Siguiente**.

1. En la página **Introducir detalles del origen de datos**, en la sección **Detalles de conexión**, para **Seleccionar o introducir una función de Lambda**, introduzca el ARN de Lambda de la cuenta A.

1. Elija **Siguiente**.

1. En la página **Revisar y crear**, elija **Crear origen de datos**.

## Solución de problemas
<a name="xacct-fed-query-enable-troubleshooting"></a>

Si recibe un mensaje de error que indica que la cuenta A no tiene permisos para asumir un rol en la cuenta B, asegúrese de que el nombre del rol creado en la cuenta B esté escrito correctamente y de que tenga adjunta la política adecuada.

# Actualización de un conector de origen de datos
<a name="connectors-updating"></a>

Athena recomienda actualizar periódicamente los conectores de orígenes de datos que utilice a la última versión para aprovechar las nuevas características y mejoras. La actualización de un conector de origen de datos incluye las instrucciones siguientes:

# Conexiones de Glue (recomendado)
<a name="connectors-updating-gc"></a>

## Búsqueda de la última versión de Athena Query Federation
<a name="connectors-updating-finding-the-latest-version"></a>

El número de versión más reciente de los conectores de orígenes de datos de Athena corresponde a la última versión de Athena Query Federation. En ciertos casos, las versiones de GitHub pueden ser ligeramente más recientes que las que están disponibles en el AWS Serverless Application Repository (SAR).

**Para buscar la última versión de Athena Query Federation**

1. Visite la URL de GitHub [https://github.com/awslabs/aws-athena-query-federation/releases/latest](https://github.com/awslabs/aws-athena-query-federation/releases/latest).

1. Anote el número de la versión en el encabezado de la página principal en el siguiente formato:

   **Versión v** *year*.*week\$1of\$1year*.*iteration\$1of\$1week* **de Athena Query Federation **

   Por ejemplo, el número de versión de la **Versión v2023.8.3 de Athena Query Federation** es 2023.8.3.

## Cómo encontrar la versión del conector
<a name="connectors-find-version"></a>

Siga estos pasos para determinar qué versión del conector utiliza actualmente.

**Para encontrar la versión del conector**

1. En la página de la consola de Lambda de la aplicación de Lambda, seleccione la pestaña **Imagen**.

1. En la pestaña Imagen, localice el URI de la imagen. La URI sigue este formato:

   ```
   Image_location_account.dkr.ecr.us-west-2.amazonaws.com/athena-federation-repository:Version
   ```

1. El número de versión del URI de la imagen sigue el formato `year.week_of_year.iteration_of_week` (por ejemplo, `2021.42.1`). Este número representa la versión del conector.

## Implementación de una nueva versión del conector
<a name="connectors-deploy-new-version"></a>

Siga estos pasos para implementar una nueva versión del conector.

**Para implementar una nueva versión del conector**

1. Para encontrar la versión deseada, siga el procedimiento para hallar la versión más reciente de la federación de consultas de Athena.

1. En la función de Lambda del conector federado, localice ImageURI y actualice la etiqueta a la versión deseada. Por ejemplo:

   De:

   ```
   509399631660.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.15.1
   ```

   Para:

   ```
   509399631660.dkr.ecr.us-east-1.amazonaws.com/athena-federation-repository:2025.26.1
   ```

**nota**  
Si la versión actual es anterior a la 2025.15.1, tenga en cuenta que se producirán cambios importantes:  
El nombre del repositorio se ha actualizado a `athena-federation-repository`
En las versiones anteriores a esta actualización, es posible que la anulación del comando no esté configurada. Debe configurarlo en el controlador compuesto.

# Conexiones heredadas
<a name="connectors-updating-legacy"></a>

## Búsqueda de la última versión de Athena Query Federation
<a name="connectors-updating-finding-the-latest-version"></a>

El número de versión más reciente de los conectores de orígenes de datos de Athena corresponde a la última versión de Athena Query Federation. En ciertos casos, las versiones de GitHub pueden ser ligeramente más recientes que las que están disponibles en el AWS Serverless Application Repository (SAR).

**Para buscar la última versión de Athena Query Federation**

1. Visite la URL de GitHub [https://github.com/awslabs/aws-athena-query-federation/releases/latest](https://github.com/awslabs/aws-athena-query-federation/releases/latest).

1. Anote el número de la versión en el encabezado de la página principal en el siguiente formato:

   **Versión v** *year*.*week\$1of\$1year*.*iteration\$1of\$1week* **de Athena Query Federation **

   Por ejemplo, el número de versión de la **Versión v2023.8.3 de Athena Query Federation** es 2023.8.3.

## Búsqueda y notas de los nombres de los recursos
<a name="connectors-updating-finding-and-noting-resource-names"></a>

Como preparación para la actualización, debe buscar y anotar la siguiente información:

1. El nombre de la función de Lambda del conector.

1. Las variables de entorno para la función de Lambda.

1. El nombre de la aplicación de Lambda, que administra la función de Lambda del conector.

**Para buscar nombres de recursos en la consola de Athena**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.  
![\[Elija el menú de expansión.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/nav-pane-expansion.png)

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la columna **Nombre del origen de datos**, elija el enlace al origen de datos del conector.

1. En la sección **Detalles del origen de datos**, en **Función de Lambda**, elija el enlace a su función de Lambda.  
![\[Elija el enlace a su función de Lambda.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-updating-1.png)

1. En la página **Funciones**, en la columna **Nombre de la función**, anote el nombre de la función del conector.  
![\[Anote el nombre de la función.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-updating-2.png)

1. Seleccione el enlace del nombre de la función.

1. En la sección **Información general de la función**, seleccione la pestaña **Configuración**.

1. En el panel de la izquierda, elija **Variables de entorno**.

1. En la sección **Variables de entorno**, anote las claves y sus valores correspondientes.

1. Desplácese hasta la parte superior de la página.

1. En el mensaje **Esta función pertenece a una aplicación. Haga clic aquí para administrarla**, seleccione el enlace **Haga clic aquí**.

1. En la página **serverlessrepo-*your\$1application\$1name***, anote el nombre de su aplicación sin **serverlessrepo**. Por ejemplo, si el nombre de la aplicación es **serverlessrepo-DynamoDbTestApp**, el nombre de su aplicación es **DynamoDbTestApp**.

1. Permanezca en la página de la consola de Lambda de su aplicación y, a continuación, siga con los pasos de **Búsqueda de la versión del conector que está utilizando**.

## Búsqueda de la versión del conector que utiliza
<a name="connectors-updating-finding-the-version-that-you-are-using"></a>

Siga estos pasos para encontrar la versión del conector que está utilizando.

**Para buscar la versión del conector que está utilizando**

1. En la página de la consola de Lambda correspondiente a la aplicación de Lambda, seleccione la pestaña **Implementaciones.**

1. En la pestaña **Implementaciones**, expanda la **Plantilla de SAM**.

1. Busque **CodeUri**.

1. En el campo **Clave** de **CodeUri**, busque la siguiente cadena:

   ```
   applications-connector_name-versions-year.week_of_year.iteration_of_week/hash_number
   ```

   En el siguiente ejemplo, se muestra una cadena para el conector de CloudWatch:

   ```
   applications-AthenaCloudwatchConnector-versions-2021.42.1/15151159...
   ```

1. Registre el valor *year*.*week\$1of\$1year*.*iteration\$1of\$1week* (por ejemplo, **2021.42.1**). Esta es la versión de su conector.

## Implementación de una nueva versión del conector
<a name="connectors-updating-deploying-the-new-version"></a>

Siga estos pasos para implementar una nueva versión del conector.

**Para implementar una nueva versión del conector**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.  
![\[Elija el menú de expansión.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/nav-pane-expansion.png)

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, elija **Crear origen de datos**.

1. Seleccione el origen de datos que desee actualizar y, a continuación, seleccione **Siguiente**.

1. En la sección **Detalles de la conexión**, elija **Crear función de Lambda**. Con esto, se abre la consola de Lambda, donde podrá implementar la aplicación actualizada.  
![\[Página del conector en la consola de AWS Lambda.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-updating-3.png)

1. Como en realidad no va a crear un nuevo origen de datos, puede cerrar la pestaña de la consola de Athena.

1. En la página de la consola de Lambda correspondiente al conector, proceda con los siguientes pasos:

   1. Asegúrese de haber eliminado el prefijo **serverlessrepo-** del nombre de la aplicación y, a continuación, copie el nombre de la aplicación en el campo **Nombre de la aplicación**.

   1. Copie el nombre de la función de Lambda en el campo **AthenaCatalogName**. Algunos conectores llaman a este campo **LambdaFunctionName**.

   1. Copie las variables de entorno que ha registrado en los campos correspondientes.

1. Seleccione la opción **Confirmo que esta aplicación puede crear políticas de recursos y roles de IAM personalizados** y, a continuación, elija **Implementar**.

1. Para comprobar que la aplicación se ha actualizado, seleccione la pestaña **Implementaciones**.

   En la sección **Historial de implementaciones**, se muestra que la actualización se ha completado.  
![\[Se ha completado la actualización del conector.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connectors-updating-4.png)

1. Para confirmar el nuevo número de versión, puede expandir la **Plantilla de SAM** como antes, buscar **CodeUri** y comprobar el número de versión del conector en el campo **Clave**.

Ahora puede usar el conector actualizado para crear consultas federadas de Athena.

# Edición o eliminación de una conexión a un origen de datos
<a name="connectors-edit-data-source"></a>

Puede utilizar la consola de Athena para actualizar la descripción, el host, el puerto, la base de datos y otras propiedades de una conexión existente. También puede eliminar los orígenes de datos desde la consola de Athena.

## Edición de una conexión de origen de datos
<a name="connectors-edit-data-source-editsteps"></a>

**Para editar una conexión de origen de datos**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si el panel de navegación de la consola no está visible, elija el menú de expansión de la izquierda.  
![\[Elija el menú de expansión.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/nav-pane-expansion.png)

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, seleccione la conexión del origen de datos que desea editar.

1. En **Detalles de la conexión de AWS Glue**, seleccione **Editar**.

1. Elija **Siguiente**.

1. En la página **Editar <connection-name>**, actualice la información según sea necesario. Las propiedades disponibles dependen del tipo de conexión.
**nota**  
Cuando actualice las propiedades de conexión de los secretos, la ubicación del vertido o el ID de clave de AWS KMS, asegúrese de que el rol de ejecución de Lambda aún tenga acceso a los recursos actualizados. Para obtener más información, consulte [Visualización y actualización de los permisos de la función de ejecución](https://docs.aws.amazon.com/lambda/latest/dg/permissions-executionrole-update.html) en la Guía para desarrolladores de AWS Lambda.
   + **Descripción**: edite la descripción de la conexión.
   + **Host**: edite el nombre de host de la base de datos.
   + **Puerto**: edite el número de puerto de la base de datos.
   + **Base de datos**: edite el nombre de la base de datos.
   + **Parámetros de JDBC**: edite cualquier parámetro de JDBC adicional necesario para su conexión. 
   + **Secreto**: elija o cree un secreto desde AWS Secrets Manager. Utilice secretos de AWS para evitar incrustar información confidencial directamente en la cadena de conexión JDBC. Para obtener más información, consulte [¿Qué es AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte [Cómo crear un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) en la *Guía del usuario de AWS Secrets Manager*.

     Para utilizar AWS Secrets Manager con consultas federadas de Athena, debe configurar un punto de conexión privado de Amazon VPC para Secrets Manager. Para obtener más información, consulte [Creación de un punto de conexión privado de VPC de Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint-create) en la *Guía del usuario de AWS Secrets Manager*.
   + **Ubicación de vertido en Amazon S3**: elija o cree una ubicación de bucket de Amazon S3 en la cuenta para almacenar los datos que superen los límites de tamaño de respuesta de la función de Lambda.
**nota**  
Los datos vertidos no se reutilizan en ejecuciones posteriores y se pueden eliminar de forma segura después de 12 horas. Athena no elimina estos datos por usted. Para administrar estos objetos, considere agregar una política del ciclo de vida de los objetos que elimine los datos antiguos del bucket de vertido de Simple Storage Service (Amazon S3). Para obtener más información, consulte [Administración del ciclo de vida de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) en la *Guía del usuario de Amazon S3*.
   + **Cifrado para resultados de consultas en S3**: elija una de las siguientes opciones:
     + (Predeterminado) **Utilización de una clave generada aleatoriamente**: los datos que se vierten a Amazon S3 se cifran con el modo de cifrado autenticado AES-GCM y una clave generada aleatoriamente.
     + **Utilización de una clave de AWS KMS**: elija o cree una clave de cifrado generada por AWS KMS más robusta. Para obtener más información, consulte [Creación de claves](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) en la *Guía para desarrolladores de AWS Key Management Service*.
     + **Desactivar**: no cifra los datos vertidos.
   + **Configuración de red**: algunas conexiones requieren una nube privada virtual (VPC). Elija o cree una VPC que tenga el almacén de datos al que desea acceder, una subred y uno o varios grupos de seguridad. Para obtener más información, consulte [Cómo crear una VPC para un conector de origen de datos o una conexión de AWS Glue](athena-connectors-vpc-creation.md).
**nota**  
Después de actualizar las propiedades de conexión de los recursos, como los secretos, la ubicación del vertido o el ID de clave de AWS KMS, asegúrese de que el rol de ejecución de Lambda aún tenga acceso a los recursos actualizados.
Después de actualizar la configuración de red de la conexión, asegúrese de actualizar la función de Lambda con la misma configuración para que la conexión sea compatible con el origen de datos.

   Para obtener información sobre las propiedades de conexión adicionales, consulte las [propiedades de conexión de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) en la *Guía del usuario de AWS Glue* o [Conectores de orígenes de datos disponibles](connectors-available.md) en la *Guía del usuario de Amazon Athena*.

1. Seleccione **Save**.

La sección **Detalles de conexión de AWS Glue ** de la página del origen de datos muestra la información actualizada del conector.

## Eliminación de un origen de datos
<a name="connectors-edit-data-source-delete"></a>

Cuando se elimina un origen de datos, solo se elimina el origen de datos de Athena y no se eliminan recursos, como las conexiones de Glue, el rol de ejecución de IAM y la función de Lambda.

**Eliminación de un origen de datos**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. En el panel de navegación, elija **Orígenes de datos y catálogos**.

1. En la página **Orígenes de datos y catálogos**, seleccione el origen de datos que desea eliminar.

1. Elija **Eliminar**.

1. En la página **Eliminar origen de datos**, escriba *confirmar* para confirmar la eliminación y seleccione **Eliminar**. Es posible que la eliminación del origen de datos tarde algún tiempo en completarse. Recibirá una alerta de confirmación cuando se haya eliminado el origen de datos.

# Ejecución de consultas federadas
<a name="running-federated-queries"></a>

Una vez que haya configurado uno o más conectores de datos y los haya implementado en su cuenta, podrá usarlos en sus consultas de Athena. 

## Consulta de un único origen de datos
<a name="running-federated-queries-single-data-source"></a>

En los ejemplos de esta sección se presupone que ha configurado e implementado los [Conector CloudWatch de Amazon Athena](connectors-cloudwatch.md) en su cuenta. Utilice el mismo enfoque para realizar consultas cuando utilice otros conectores.

**Para crear una consulta de Athena que utilice el conector CloudWatch**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. En el editor de consultas de Athena, cree una consulta SQL que utilice la siguiente sintaxis en la cláusula `FROM`.

   ```
   MyCloudwatchCatalog.database_name.table_name       
   ```

### Ejemplos
<a name="running-federated-queries-single-data-source-examples"></a>

En el siguiente ejemplo, se utiliza el conector Athena CloudWatch para conectarse a la vista `all_log_streams` en el [Grupo de registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) de CloudWatch Logs `/var/ecommerce-engine/order-processor`. La vista `all_log_streams` es una vista de todas las secuencias de registro del grupo de registros. La consulta de ejemplo limita el número de filas devueltas a 100.

```
SELECT * 
FROM "MyCloudwatchCatalog"."/var/ecommerce-engine/order-processor".all_log_streams 
LIMIT 100;
```

En el siguiente ejemplo se analiza la información de la misma vista que el ejemplo anterior. En el ejemplo se extrae el ID de pedido y el nivel de registro y se filtra cualquier mensaje que tenga el nivel `INFO`.

```
SELECT 
    log_stream as ec2_instance, 
    Regexp_extract(message '.*orderId=(\d+) .*', 1) AS orderId, 
    message AS order_processor_log, 
    Regexp_extract(message, '(.*):.*', 1) AS log_level 
FROM MyCloudwatchCatalog."/var/ecommerce-engine/order-processor".all_log_streams 
WHERE Regexp_extract(message, '(.*):.*', 1) != 'INFO'
```

## Consulta de varios orígenes de datos
<a name="running-federated-queries-multiple-sources"></a>

Como ejemplo más complejo, imagine una empresa de comercio electrónico que utiliza los siguientes orígenes de datos para almacenar datos relacionados con las compras de los clientes:
+ [Amazon RDS para MySQL](https://aws.amazon.com/rds/mysql/) para almacenar los datos del catálogo de productos.
+ [Amazon DocumentDB](https://aws.amazon.com/documentdb/) para almacenar datos de las cuenta de los cliente, como direcciones de correo electrónico y direcciones de envío.
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) para almacenar datos de seguimiento y envío de pedidos.

Imagine que un analista de datos de esta aplicación de comercio electrónico descubre que el tiempo de envío en algunas regiones se ha visto afectado por las condiciones meteorológicas locales. El analista quiere saber cuántos pedidos están atrasados, dónde se encuentran los clientes afectados y qué productos están más comprometidos. En lugar de investigar las fuentes de información por separado, el analista utiliza Athena para unir los datos en una única consulta federada.

**Example**  

```
SELECT 
     t2.product_name AS product, 
     t2.product_category AS category, 
     t3.customer_region AS region, 
     count(t1.order_id) AS impacted_orders 
FROM my_dynamodb.default.orders t1 
JOIN my_mysql.products.catalog t2 ON t1.product_id = t2.product_id 
JOIN my_documentdb.default.customers t3 ON t1.customer_id = t3.customer_id 
WHERE 
     t1.order_status = 'PENDING'
     AND t1.order_date between '2022-01-01' AND '2022-01-05' 
GROUP BY 1, 2, 3 
ORDER BY 4 DESC
```

## Consulta de vistas federadas
<a name="running-federated-queries-federated-views"></a>

Al consultar orígenes federados, puede utilizar las vistas para ocultar los orígenes de datos subyacentes u ocultar las combinaciones complejas a otros analistas que consulten los datos.

### Consideraciones y limitaciones
<a name="running-federated-queries-federated-views-considerations"></a>
+ Las vistas federadas requieren la versión 3 del motor de Athena. 
+ Las vistas federadas se almacenan en el AWS Glue, no con el origen de datos subyacente.
+ Las vistas federadas no se admiten en los orígenes de datos que están [registrados como un catálogo de datos de Glue](register-connection-as-gdc.md).
+ Las vistas creadas con catálogos federados deben utilizar una sintaxis de nombres calificada completa, como en el siguiente ejemplo:

  ```
  "ddbcatalog"."default"."customers"
  ```
+ Los usuarios que realicen consultas en orígenes federados deben tener permiso para consultar los orígenes federados.
+ El permiso `athena:GetDataCatalog` es obligatorio para las vistas federadas. Para obtener más información, consulte [Permiso de acceso a la consulta federada de Athena: políticas de ejemplo](federated-query-iam-access.md).

### Ejemplos
<a name="running-federated-queries-federated-views-examples"></a>

En el siguiente ejemplo, se crea una vista denominada `customers` en los datos almacenados en un origen de datos federado.

**Example**  

```
CREATE VIEW customers AS
SELECT *
FROM my_federated_source.default.table
```

En el siguiente ejemplo de consulta, se muestra una consulta que hace referencia a la vista `customers` en lugar de al origen de datos federado subyacente.

**Example**  

```
SELECT id, SUM(order_amount)
FROM customers
GROUP by 1
ORDER by 2 DESC
LIMIT 50
```

En el siguiente ejemplo, se crea una vista denominada `order_summary` que combina datos de un origen de datos federado y de un origen de datos de Amazon S3. Desde el origen federado, que ya se creó en Athena, la vista usa las tablas `person` y `profile`. Desde Amazon S3, la vista usa las tablas `purchase` y `payment`. Para hacer referencia a Amazon S3, la instrucción utiliza la palabra clave `awsdatacatalog`. Tenga en cuenta que el origen de datos federado utiliza la sintaxis de nombres calificada completa *federated\$1source\$1name*.*federated\$1source\$1database*.*federated\$1source\$1table*.

**Example**  

```
CREATE VIEW default.order_summary AS
SELECT *
FROM federated_source_name.federated_source_database."person" p
    JOIN federated_source_name.federated_source_database."profile" pr ON pr.id = p.id
    JOIN awsdatacatalog.default.purchase i ON p.id = i.id
    JOIN awsdatacatalog.default.payment pay ON pay.id = p.id
```

### Recursos adicionales
<a name="running-federated-queries-federated-views-additional-resources"></a>
+ Para ver un ejemplo de una vista federada que está desacoplada de su fuente de origen y que se encuentra disponible para su análisis bajo demanda en un modelo multiusuario, consulte [Amplíe la malla de datos con Amazon Athena y las vistas federadas](https://aws.amazon.com/blogs/big-data/extend-your-data-mesh-with-amazon-athena-and-federated-views/) en el *Blog sobre macrodatos de AWS*. 
+ Para obtener más información sobre cómo trabajar con vistas en Athena, consulte [Trabajo con vistas](views.md).

# Uso de consultas de acceso directo federadas
<a name="federated-query-passthrough"></a>

En Athena, puede ejecutar consultas en orígenes de datos federados utilizando el lenguaje de consulta del propio origen de datos y enviar la consulta completa al origen de datos para su ejecución. Estas consultas se denominan consultas de acceso directo. Para ejecutar consultas de acceso directo, utilice una función de tabla en la consulta de Athena. Incluya la consulta de acceso directo que se ejecutará en el origen de datos en uno de los argumentos de la función de tabla. Las consultas de acceso directo devuelven una tabla que puede analizar con Athena SQL.

## Conectores admitidos
<a name="federated-query-passthrough-supported-connectors"></a>

Los siguientes conectores de orígenes de datos de Athena admiten consultas de acceso directo.
+ [Azure Data Lake Storage](connectors-adls-gen2.md)
+ [Azure Synapse](connectors-azure-synapse.md)
+ [Cloudera Hive](connectors-cloudera-hive.md)
+ [Cloudera Impala](connectors-cloudera-impala.md)
+ [CloudWatch](connectors-cloudwatch.md)
+ [Db2](connectors-ibm-db2.md)
+ [Db2 iSeries](connectors-ibm-db2-as400.md)
+ [DocumentDB](connectors-docdb.md) 
+ [DynamoDB](connectors-dynamodb.md) 
+ [HBase](connectors-hbase.md)
+ [Google BigQuery](connectors-bigquery.md)
+ [Hortonworks](connectors-hortonworks.md)
+ [MySQL](connectors-mysql.md)
+ [Neptune](connectors-neptune.md)
+ [OpenSearch](connectors-opensearch.md) 
+ [Oracle](connectors-oracle.md)
+ [PostgreSQL](connectors-postgresql.md)
+ [Redshift](connectors-redshift.md)
+ [SAP HANA](connectors-sap-hana.md)
+ [Snowflake](connectors-snowflake.md)
+ [SQL Server](connectors-microsoft-sql-server.md)
+ [Teradata](connectors-teradata.md)
+ [Timestream](connectors-timestream.md)
+ [Vertica](connectors-vertica.md)

## Consideraciones y limitaciones
<a name="federated-query-passthrough-considerations-and-limitations"></a>

Cuando utilice las consultas de acceso directo en Athena, tenga en cuenta los siguientes puntos:
+ El acceso directo de consultas solo se admite para las instrucciones de `SELECT` u operaciones de lectura de Athena.
+ El rendimiento de las consultas puede variar en función de la configuración del origen de datos.
+ El acceso directo de consultas no es compatible con el control de acceso detallado de Lake Formation.
+ Las consultas de acceso directo no son compatibles con los orígenes de datos registrados como [catálogos de datos de Glue](register-connection-as-gdc.md).

## Sintaxis
<a name="federated-query-passthrough-syntax"></a>

La sintaxis general del acceso directo de las consultas de Athena es la siguiente.

```
SELECT * FROM TABLE(catalog.system.function_name(arg1 => 'arg1Value'[, arg2 => 'arg2Value', ...]))
```

Tenga en cuenta lo siguiente:
+ **catálogo**: el nombre del conector federado de Athena de destino o el nombre del catálogo de datos.
+ **sistema**: el espacio de nombres que contiene la función. Todas las implementaciones del conector Athena utilizan este espacio de nombres.
+ **function\$1name**: el nombre de la función que envía la consulta de acceso directo al origen de datos. Suele denominarse `query`. La combinación `catalog.system.function_name` es la ruta de resolución completa de la función.
+ **arg1, arg2 y así sucesivamente**: argumentos de la función. El usuario debe proporcionarlos a la función. En la mayoría de los casos, se trata de la cadena de consulta que se transmite al origen de datos.

En la mayoría de los orígenes de datos, el primer y único argumento es `query` seguido del operador de flecha `=>` y la cadena de consulta.

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

Para simplificar, puede omitir el argumento con nombre opcional `query` y el operador de flecha `=>`.

```
SELECT * FROM TABLE(catalog.system.query('query string'))
```

Puede simplificar aún más la consulta al eliminar el nombre del `catalog` si la consulta se ejecuta dentro del contexto del catálogo objetivo.

```
SELECT * FROM TABLE(system.query('query string'))
```

Si el origen de datos requiere más que la cadena de consulta, utilice los argumentos con nombre en el orden esperado por el origen de datos. Por ejemplo, la expresión `arg1 => 'arg1Value'` contiene el primer argumento y su valor. El nombre *arg1* es específico del origen de datos y puede variar de un conector a otro.

```
SELECT * FROM TABLE(
        system.query(
            arg1 => 'arg1Value',
            arg2 => 'arg2Value',
            arg3 => 'arg3Value'
        ));
```

Lo anterior también se puede simplificar al eliminar los nombres de los argumentos. Sin embargo, debe seguir el orden de la firma del método. Consulte la documentación de cada conector para obtener más información sobre la firma de la función.

```
SELECT * FROM TABLE(catalog.system.query('arg1Value', 'arg2Value', 'arg3Value'))
```

Puede ejecutar varias consultas de acceso directo a través de diferentes conectores de Athena mediante la ruta de resolución completa de la función, como se muestra en el siguiente ejemplo.

```
SELECT c_customer_sk 
    FROM TABLE (postgresql.system.query('select * from customer limit 10'))
UNION
SELECT c_customer_sk 
    FROM TABLE(dynamodb.system.query('select * from customer')) LIMIT 10
```

Puede utilizar las consultas de acceso directo como parte de una vista federada. Se aplican las mismas limitaciones. Para más información, consulte [Consulta de vistas federadas](https://docs.aws.amazon.com/athena/latest/ug/running-federated-queries.html#running-federated-queries-federated-views).

```
CREATE VIEW catalog.database.ViewName AS
    SELECT * FROM TABLE (
        catalog.system.query('query')
    )
```

Para obtener información sobre la sintaxis exacta a utilizar con un conector particular, consulte la documentación del conector correspondiente.

### Uso de comillas
<a name="federated-query-passthrough-syntax-quotation-marks"></a>

Los valores de los argumentos, incluida la cadena de consulta que pase, deben escribirse entre comillas simples, como en el siguiente ejemplo.

```
SELECT * FROM TABLE(system.query(query => 'SELECT * FROM testdb.persons LIMIT 10'))
```

Cuando la cadena de consulta está entre comillas dobles, la consulta falla. Se produce un error en la siguiente consulta y aparece el mensaje de error COLUMNA\$1NO\$1ENCONTRADA: línea 1:43: Columna 'seleccionar \$1 de testdb.persons límite 10' no se puede resolver.

```
SELECT * FROM TABLE(system.query(query => "SELECT * FROM testdb.persons LIMIT 10"))
```

Para evitar una comilla simple, añada una comilla simple al original (por ejemplo, `terry's_group` a `terry''s_group`).

## Ejemplos
<a name="federated-query-passthrough-sql-based-connectors-examples"></a>

El siguiente ejemplo de consulta envía una consulta a un origen de datos. La consulta selecciona todas las columnas de la tabla `customer` y limita los resultados a 10.

```
SELECT * FROM TABLE(
        catalog.system.query(
            query => 'SELECT * FROM customer LIMIT 10;'
        ))
```

La siguiente instrucción ejecuta la misma consulta, pero elimina el argumento con nombre opcional `query` y el operador de flecha `=>`.

```
SELECT * FROM TABLE(
        catalog.system.query(
            'SELECT * FROM customer LIMIT 10;'
        ))
```

Además, se puede agrupar en una vista federada para optimizar su reutilización. Cuando se utiliza con una vista, debe emplear la ruta de resolución completa de la función.

```
CREATE VIEW AwsDataCatalog.default.example_view AS
    SELECT * FROM TABLE (
        catalog.system.query('SELECT * FROM customer LIMIT 10;')
    )
```

## Exclusión del acceso directo de las consultas
<a name="federated-query-passthrough-sql-based-connectors-opting-out"></a>

Para desactivar las consultas de acceso directo, agregue una variable de entorno de Lambda denominada `enable_query_passthrough` y configúrela en `false`.

# Descripción de los calificadores de nombres de tablas federadas
<a name="tables-qualifiers"></a>

Athena utiliza los siguientes términos para referirse a las jerarquías de los objetos de datos:
+ **Origen de datos**: un grupo de bases de datos.
+ **Base de datos**: un grupo de tablas.
+ **Tabla**: datos organizados como un grupo de filas o columnas.

En ocasiones, también se hace referencia a estos objetos con nombres alternativos pero equivalentes, como los siguientes:
+ Un origen de datos es lo que a veces se denomina catálogo.
+ Una base de datos es lo que a veces se denomina esquema.

## Términos en orígenes de datos federados
<a name="tables-qualifiers-terms-in-federated-data-sources"></a>

Cuando consulte orígenes de datos federados, tenga en cuenta que es posible que el origen de datos subyacente no utilice la misma terminología que Athena. Tenga en cuenta esta distinción al escribir las consultas federadas. En las siguientes secciones se describe cómo los términos de objetos de datos de Athena se corresponden con los de los orígenes de datos federados.

### Amazon Redshift
<a name="tables-qualifiers-redshift"></a>

Una *base de datos* de Amazon Redshift es un grupo de *esquemas* de Redshift que contiene un grupo de *tablas* de Redshift.


****  

| Athena | Redshift | 
| --- | --- | 
| Origen de datos de Redshift | Función de Lambda del conector de Redshift configurada para apuntar a una database de Redshift. | 
| data\$1source.database.table | database.schema.table | 

Consulta de ejemplo

```
SELECT * FROM 
Athena_Redshift_connector_data_source.Redshift_schema_name.Redshift_table_name
```

Para obtener más información sobre este conector, consulte [Conector para Redshift de Amazon Athena](connectors-redshift.md).

### Cloudera Hive
<a name="tables-qualifiers-cloudera-hive"></a>

Un *servidor* o *clúster* de Cloudera Hive es un grupo de *bases de datos* de Cloudera Hive que contiene un grupo de *tablas* de Cloudera Hive.


****  

| Athena | Hive | 
| --- | --- | 
| Origen de datos de Cloudera Hive | Función de Lambda del conector de Cloudera Hive configurada para apuntar a un server de Cloudera Hive. | 
| data\$1source.database.table | server.database.table | 

Consulta de ejemplo

```
SELECT * FROM 
Athena_Cloudera_Hive_connector_data_source.Cloudera_Hive_database_name.Cloudera_Hive_table_name
```

Para obtener más información sobre este conector, consulte [Conector Cloudera Hive de Amazon Athena](connectors-cloudera-hive.md).

### Cloudera Impala
<a name="tables-qualifiers-cloudera-impala"></a>

Un *servidor* o *clúster* de Impala es un grupo de *bases de datos* de Impala que contiene un grupo de *tablas* de Impala.


****  

| Athena | Impala | 
| --- | --- | 
| Origen de datos de Impala | Función de Lambda del conector de Impala configurada para apuntar a un server de Impala. | 
| data\$1source.database.table | server.database.table | 

Consulta de ejemplo

```
SELECT * FROM 
Athena_Impala_connector_data_source.Impala_database_name.Impala_table_name
```

Para obtener más información sobre este conector, consulte [Conector Cloudera Impala de Amazon Athena](connectors-cloudera-impala.md).

### MySQL
<a name="tables-qualifiers-mysql"></a>

Un *servidor* de MySQL es un grupo de *bases de datos* de MySQL que contiene un grupo de *tablas* de MySQL.


****  

| Athena | MySQL | 
| --- | --- | 
| Origen de datos de MySQL | Función de Lambda del conector de MySQL configurada para apuntar a un server de MySQL. | 
| data\$1source.database.table | server.database.table | 

Consulta de ejemplo

```
SELECT * FROM 
Athena_MySQL_connector_data source.MySQL_database_name.MySQL_table_name
```

Para obtener más información sobre este conector, consulte [Conector para MySQL de Amazon Athena](connectors-mysql.md).

### Oracle
<a name="tables-qualifiers-oracle"></a>

Un *servidor* (o *base de datos*) de Oracle es un grupo de *esquemas* de Oracle que contiene un grupo de *tablas* de Oracle.


****  

| Athena | Oracle | 
| --- | --- | 
| Origen de datos de Oracle | Función de Lambda del conector de Oracle configurada para apuntar a un server de Oracle. | 
| data\$1source.database.table | server.schema.table | 

Consulta de ejemplo

```
SELECT * FROM 
Athena_Oracle_connector_data_source.Oracle_schema_name.Oracle_table_name
```

Para obtener más información sobre este conector, consulte [Conector Oracle de Amazon Athena](connectors-oracle.md).

### Postgres
<a name="tables-qualifiers-postgres"></a>

Un *servidor* (o *clúster*) de Postgres es un grupo de *bases de datos* de Postgres. Una *base de datos* de Postgres es un grupo de *esquemas* de Postgres que contiene un grupo de *tablas* de Postgres.


****  

| Athena | Postgres | 
| --- | --- | 
| Origen de datos de Postgres | Función de Lambda del conector de Postgres configurada para apuntar a un server y una database de Postgres. | 
| data\$1source.database.table | server.database.schema.table | 

Consulta de ejemplo

```
SELECT * FROM 
Athena_Postgres_connector_data_source.Postgres_schema_name.Postgres_table_name
```

Para obtener más información sobre este conector, consulte [Conector para PostgreSQL de Amazon Athena](connectors-postgresql.md).

# Desarrollo de un conector de origen de datos mediante el SDK de Athena Query Federation
<a name="connect-data-source-federation-sdk"></a>

Para escribir conectores de orígenes de datos propios, puede utilizar el [SDK de Athena Query Federation](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-federation-sdk). El SDK de Athena Query Federation define un conjunto de interfaces y protocolos de cable que se pueden utilizar para permitir a Athena delegar partes de su plan de ejecución de consultas en el código que se escribe e implementa. El SDK incluye un conjunto de conectores y un conector de ejemplo.

Los conectores personalizados no utilizan Conexiones de Glue para centralizar las propiedades de configuración en Glue. La conexión se configura a través de Lambda.

También puede personalizar los [conectores prediseñados](https://github.com/awslabs/aws-athena-query-federation/wiki/Available-Connectors) de Amazon Athena para su propio uso. Puede modificar una copia del código de origen de GitHub y luego, utilizar la [herramienta de publicación de conectores](https://github.com/awslabs/aws-athena-query-federation/wiki/Connector_Publish_Tool) para crear su propio paquete de AWS Serverless Application Repository. Después de implementar el conector de esta manera, puede usarlo en sus consultas de Athena.

Para obtener información sobre cómo descargar el SDK e instrucciones detalladas para escribir su propio conector, consulte [Conector de Athena de ejemplo](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-example) en GitHub.

# Uso de conectores de orígenes de datos de Athena para Apache Spark
<a name="connectors-spark"></a>

Algunos conectores de orígenes de datos de Athena están disponibles como conectores DSV2 de Spark. Los nombres de los conectores DSV2 de Spark tienen un sufijo `-dsv2` (por ejemplo, `athena-dynamodb-dsv2`).

A continuación, se muestran los conectores DSV2 disponibles actualmente, su nombre de clase `.format()` de Spark y los enlaces a la documentación correspondiente de Amazon Athena Federated Query:


| Conector DSV2 | Nombre de clase .format() de Spark | Documentación | 
| --- | --- | --- | 
| athena-cloudwatch-dsv2 | com.amazonaws.athena.connectors.dsv2.cloudwatch.CloudwatchTableProvider | [CloudWatch](connectors-cloudwatch.md) | 
| athena-cloudwatch-metrics-dsv2 | com.amazonaws.athena.connectors.dsv2.cloudwatch.metrics.CloudwatchMetricsTableProvider | [Métricas de CloudWatch](connectors-cwmetrics.md) | 
| athena-aws-cmdb-dsv2 | com.amazonaws.athena.connectors.dsv2.aws.cmdb.AwsCmdbTableProvider | [CMDB](connectors-cmdb.md) | 
| athena-dynamodb-dsv2 | com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider | [DynamoDB](connectors-dynamodb.md) | 

Para descargar archivos `.jar` para los conectores DSV2, visite la página de GitHub [Amazon Athena Query Federation DSV2](https://github.com/awslabs/aws-athena-query-federation-dsv2) y consulte la sección **Releases** (Versiones), **Release *<version>*** (Versión <version>), **Assets** (Activos).

## Especificación del archivo jar para Spark
<a name="connectors-spark-specifying-the-jar-to-spark"></a>

Para usar los conectores DSV2 de Athena con Spark, envíe el archivo `.jar` del conector al entorno de Spark que esté utilizando. En las siguientes secciones se describen casos específicos.

### Athena para Spark
<a name="connectors-spark-ate"></a>

Para obtener información sobre cómo agregar archivos `.jar` personalizados y configuraciones personalizadas a Amazon Athena para Apache Spark, consulte [Uso de las propiedades de Spark para especificar una configuración personalizada](notebooks-spark-custom-jar-cfg.md).

### Spark general
<a name="connectors-spark-general"></a>

Para pasar el archivo `.jar` del conector a Spark, utilice el comando `spark-submit` y especifique el archivo `.jar` en la opción `--jars`, como en el siguiente ejemplo:

```
spark-submit \ 
  --deploy-mode cluster \ 
  --jars https://github.com/awslabs/aws-athena-query-federation-dsv2/releases/download/some_version/athena-dynamodb-dsv2-some_version.jar
```

### Amazon EMR Spark
<a name="connectors-spark-emr"></a>

Para ejecutar un comando `spark-submit` con el parámetro `--jars` en Amazon EMR, debe agregar un paso a su clúster de Amazon EMR Spark. Para obtener más información sobre cómo usar `spark-submit` en Amazon EMR, consulte [Add a Spark step](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-submit-step.html) (Agregar un paso de Spark) en la *Guía de publicación de Amazon EMR*.

### ETL de AWS Glue para Spark
<a name="connectors-spark-glue-etl"></a>

En el caso de ETL de AWS Glue, puede pasar la URL de GitHub.com del archivo `.jar` al argumento `--extra-jars` del comando `aws glue start-job-run`. En la documentación de AWS Glue, se describe que el parámetro `--extra-jars` toma una ruta de Amazon S3, pero el parámetro también puede tomar una URL HTTPS. Para obtener más información, consulte [Referencia de parámetros de trabajos](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html#w5aac32c13c11) en la *Guía para desarrolladores de AWS Glue*.

## Consulta del conector en Spark
<a name="connectors-spark-querying-the-connector"></a>

Para enviar el equivalente a su consulta federada de Athena existente en Apache Spark, use la función `spark.sql()`. Por ejemplo, supongamos que tiene la siguiente consulta de Athena que desea utilizar en Apache Spark.

```
SELECT somecola, somecolb, somecolc 
FROM ddb_datasource.some_schema_or_glue_database.some_ddb_or_glue_table 
WHERE somecola > 1
```

Para realizar la misma consulta en Spark mediante el conector DynamoDB DSV2 de Amazon Athena, utilice el siguiente código:

```
dynamoDf = (spark.read 
    .option("athena.connectors.schema", "some_schema_or_glue_database") 
    .option("athena.connectors.table", "some_ddb_or_glue_table") 
    .format("com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider") 
    .load()) 
 
dynamoDf.createOrReplaceTempView("ddb_spark_table") 
 
spark.sql(''' 
SELECT somecola, somecolb, somecolc 
FROM ddb_spark_table 
WHERE somecola > 1 
''')
```

## Especifique los parámetros de
<a name="connectors-spark-parameters"></a>

Las versiones DSV2 de los conectores de orígenes de datos de Athena utilizan los mismos parámetros que los conectores de orígenes de datos de Athena correspondientes. Para obtener información sobre los parámetros, consulte la documentación del conector de origen de datos de Athena correspondiente.

En su código de PySpark, use la siguiente sintaxis para configurar sus parámetros.

```
spark.read.option("athena.connectors.conf.parameter", "value")
```

Por ejemplo, el siguiente código establece el parámetro `disable_projection_and_casing` del conector DynamoDB de Amazon Athena en `always`.

```
dynamoDf = (spark.read 
    .option("athena.connectors.schema", "some_schema_or_glue_database") 
    .option("athena.connectors.table", "some_ddb_or_glue_table") 
    .option("athena.connectors.conf.disable_projection_and_casing", "always") 
    .format("com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider") 
    .load())
```