

# Conexión con orígenes de datos
<a name="work-with-data-stores"></a>

Puede utilizar Amazon Athena para consultar datos almacenados en diferentes ubicaciones y formatos en un *conjunto de datos*. Este conjunto de datos puede estar en formato CSV, JSON, Avro, Parquet u cualquier otro.

Las tablas y bases de datos con las que trabaja Athena para ejecutar consultas se basan en *metadatos*. Los metadatos son datos sobre los datos subyacentes del conjunto de datos. La forma en que los metadatos describen su conjunto de datos se denomina *esquema*. Por ejemplo, un nombre de tabla, los nombres de columna de la tabla y el tipo de datos de cada columna son esquemas, guardados como metadatos, que describen un conjunto de datos subyacente. En Athena, denominamos al sistema para organizar metadatos *catálogo de datos* o *metaalmacén*. La combinación de un conjunto de datos y el catálogo de datos que lo describe se denomina “*origen de datos*”.

La relación de los metadatos con un conjunto de datos subyacente depende del tipo de origen de datos con el que trabaje. Los orígenes de datos relacionales como MySQL, PostgreSQL y SQL Server integran estrechamente los metadatos con el conjunto de datos. En estos sistemas, los metadatos se escriben con mayor frecuencia cuando se escriben los datos. Otros orígenes de datos, como los creados con [Hive](https://hive.apache.org), le permiten definir metadatos sobre la marcha cuando se lee el conjunto de datos. El conjunto de datos puede estar en una variedad de formatos, por ejemplo, CSV, JSON, Parquet o Avro.

Athena admite AWS Glue Data Catalog de forma nativa. El AWS Glue Data Catalog es un catálogo de datos creado sobre otros conjuntos de datos y orígenes de datos como Amazon S3, Amazon Redshift y Amazon DynamoDB. También puede conectar Athena a otros orígenes de datos mediante una variedad de conectores.

**Topics**
+ [Utilice AWS Glue Data Catalog para conectarse a los datos](data-sources-glue.md)
+ [Uso de consulta federada de Amazon Athena](federated-queries.md)
+ [Uso de Amazon DataZone en Athena](datazone-using.md)
+ [Uso de un metastore de Hive externo](connect-to-data-source-hive.md)
+ [Administración de orígenes de datos](data-sources-managing.md)

# Utilice AWS Glue Data Catalog para conectarse a los datos
<a name="data-sources-glue"></a>

Athena utiliza AWS Glue Data Catalog para almacenar metadatos, como nombres de tablas y columnas para los datos almacenados en Amazon S3. Esta información de metadatos se convierte en las tablas de datos, las tablas y las vistas que aparecen en el editor de consultas de Athena.

Al utilizar Athena con el AWS Glue Data Catalog, puede usar AWS Glue para crear las bases de datos y las tablas (esquemas) que consultará en Athena, o bien puede utilizar Athena para crear un esquema y entonces utilizarlo en AWS Glue u otros servicios relacionados. 

Para definir la información del esquema para AWS Glue, puede usar un formulario en la consola de Athena, usar el editor de consultas de Athena o crear un rastreador de AWS Glue en la consola de AWS Glue. Los rastreadores de AWS Glue infieren automáticamente el esquema de tablas y bases de datos des los datos que tiene en Amazon S3. El uso de un formulario ofrece una mayor personalización. Redactar sus propias instrucciones de `CREATE TABLE` requiere más esfuerzo, pero ofrece más control. Para obtener más información, consulte [CREATE TABLE](create-table.md).

## Recursos adicionales
<a name="glue-additional-resources"></a>
+ Para obtener más información sobre AWS Glue Data Catalog, consulte [Catálogo de datos y rastreadores en AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html) en la *Guía para desarrolladores de AWS Glue*.
+ Para ver un artículo ilustrativo que muestra cómo utilizar AWS Glue y Athena para procesar datos XML, consulte [Procesar y analizar archivos XML altamente anidados y de gran tamaño mediante AWS Glue y Amazon Athena](https://aws.amazon.com/blogs/big-data/process-and-analyze-highly-nested-and-large-xml-files-using-aws-glue-and-amazon-athena/) en el Blog de macrodatos de AWS.
+  está sujeto a cargos por separado AWS Glue. Para más información, consulte [Precios de AWS Glue](https://aws.amazon.com/glue/pricing).

**Topics**
+ [Recursos adicionales](#glue-additional-resources)
+ [Registro y uso de catálogos de datos en Athena](gdc-register.md)
+ [Registrar un catálogo de datos desde otra cuenta](data-sources-glue-cross-account.md)
+ [Control del acceso a los catálogos de datos con políticas de IAM](datacatalogs-iam-policy.md)
+ [Utilice un formulario de la consola de Athena para agregar una tabla de AWS Glue](data-sources-glue-manual-table.md)
+ [Utilice un rastreador para agregar una tabla](schema-crawlers.md)
+ [Optimización de las consultas con indexación y filtrado de particiones de AWS Glue](glue-best-practices-partition-index.md)
+ [Usar la AWS CLI para recrear una base de datos de AWS Glue y sus tablas](glue-recreate-db-and-tables-cli.md)
+ [Creación de tablas para los trabajos de ETL](schema-classifier.md)
+ [Trabajar con datos CSV en AWS Glue](schema-csv.md)
+ [Uso de datos geoespaciales en AWS Glue](schema-geospatial.md)

# Registro y uso de catálogos de datos en Athena
<a name="gdc-register"></a>

Athena permite montar varios catálogos de datos y conectarse a estos. 
+ Puede montar datos de Amazon Redshift en el AWS Glue Data Catalog y consultarlos desde Athena sin tener que copiar o trasladar datos. Para obtener más información, consulte [Incorporación de datos de Amazon Redshift a AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-namespaces-datacatalog.html).
+  Conecte el AWS Glue Data Catalog a orígenes de datos externos mediante conexiones de AWS Glue y cree catálogos federados para administrar de forma centralizada los permisos de los datos con un control de acceso detallado mediante Lake Formation. Para obtener más información, consulte [Cómo registrar la conexión como Catálogo de datos de Glue](register-connection-as-gdc.md).
+ Cree catálogos a partir de los buckets de tabla de Amazon S3 y utilice Lake Formation para administrar de forma centralizada los permisos de acceso y restringir el acceso de los usuarios a los objetos del bucket de tabla. Para obtener más información, consulte [Cómo trabajar con tablas y buckets de tablas de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.html) en la Guía del usuario de Amazon S3.

**nota**  
En cualquier catálogo de Glue, solo se puede registrar un catálogo multinivel como `123412341234:my_catalog/my_child`. No puede registrar un catálogo de un solo nivel como `123412341234:linkcontainer` o `my_catalog`. Los catálogos de un solo nivel solo se pueden consultar con el catálogo de datos de Glue directamente en la consulta de Athena. Para obtener más información, consulte [Cómo consultar los catálogos de datos de AWS Glue en Athena](gdc-register-query-the-data-source.md). 

**Topics**
+ [Registrar catálogos de datos de Redshift en Athena](gdc-register-rs.md)
+ [Registro de catálogos federados en Athena](gdc-register-federated.md)
+ [Registro de catálogos de buckets de tabla de S3 y consulta de tablas desde Athena](gdc-register-s3-table-bucket-cat.md)
+ [Cómo consultar los catálogos de datos de AWS Glue en Athena](gdc-register-query-the-data-source.md)

# Registrar catálogos de datos de Redshift en Athena
<a name="gdc-register-rs"></a>

Athena puede leer y escribir datos almacenados en clústeres de Redshift o espacios de nombres sin servidor que se hayan registrado en el AWS Glue Data Catalog. Esto funciona en tándem con AWS Lake Formation, que proporciona seguridad y gobernanza centralizadas, lo que garantiza que el acceso a los datos se administra de forma coherente en los distintos motores de consulta y mantiene controles de acceso detallados para los datos compartidos de Redshift.

## Consideraciones y limitaciones
<a name="gdc-register-rs-considerations-and-limitations"></a>
+ **Vistas materializadas**: las vistas materializadas de Amazon Redshift se pueden consultar desde Athena, pero no es posible crear vistas materializadas con Athena o Spark.
+ No se admiten las operaciones DDL, incluido el ajuste de la configuración de AWS Glue Data Catalog y las operaciones en tablas de almacenamiento administrado de Amazon Redshift.

## Requisitos previos
<a name="gdc-register-rs-prerequisites"></a>

Antes de poder consultar un catálogo de datos de AWS Glue desde Athena, complete las siguientes tareas:

1. Cree y registre un clúster de Amazon Redshift o un espacio de nombres sin servidor en el AWS Glue Data Catalog. Para obtener más información, consulte [Cómo registrar un clúster en el AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/register-cluster.html) o [Cómo registrar espacios de nombres en el AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless_datasharing-register-namespace.html) en la guía de administración de Amazon Redshift.

1. Cree un catálogo de datos en AWS Lake Formation a partir del espacio de nombres registrado. Para obtener más información, consulte [Creación de catálogos federados de Amazon Redshift](https://docs.aws.amazon.com/lake-formation/latest/dg/create-ns-catalog.html) en la Guía para desarrolladores de AWS Lake Formation.

1. (Opcional) Utilice Lake Formation para establecer controles de acceso detallados en el catálogo. Para obtener más información, consulte [Cómo incluir los datos en el AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/bring-your-data-overview.html) en la Guía para desarrolladores de AWS Lake Formation.

## Registrar un catálogo de datos de Redshift en la consola Athena
<a name="gdc-register-rs-console-steps"></a>

Para registrar un catálogo de datos de Redshift en la consola de Athena, siga estos pasos.

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

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 un origen de datos**, elija **Amazon S3: AWS Glue Data Catalog**.

1. En la sección **AWS Glue Data Catalog**, bajo **Cuenta de origen de datos**, elija **AWS Glue Data Catalog en esta cuenta**.

1. En **Crear una tabla o registrar un catálogo**, elija **Registrar un nuevo catálogo de AWS Glue**.

1. En la sección **Detalles del origen de datos**, en **Nombre del origen de datos**, ingrese el nombre que desea utilizar para especificar el origen de datos en las consultas SQL o utilice el nombre predeterminado que se genera.

1. En **Catálogo**, seleccione **Examinar** para buscar una lista de catálogos de AWS Glue en la misma cuenta. Si no ve ningún catálogo existente, cree uno en la [consola de AWS Glue](https://console.aws.amazon.com/glue/). 

1. En el cuadro de diálogo **Examinar catálogos de AWS Glue**, seleccione el catálogo que desea utilizar y, a continuación, elija **Seleccionar**.

1. (Opcional) En **Etiquetas**, ingrese cualquier par de clave/valor que desee asociar al origen de datos.

1. Elija **Siguiente**.

1. En la página **Revisar y crear**, compruebe que la información introducida es correcta y, a continuación, seleccione **Crear origen de datos**.

# Registro de catálogos federados en Athena
<a name="gdc-register-federated"></a>

Una vez creadas las conexiones a los orígenes de datos federados, puede registrarlos como catálogos de datos federados para simplificar la detección de datos y administrar el acceso a los datos con permisos detallados mediante Lake Formation. Para obtener más información, consulte [Cómo registrar la conexión como Catálogo de datos de Glue](register-connection-as-gdc.md).

## Consideraciones y limitaciones
<a name="gdc-register-federated-consideration"></a>
+ No se admiten operaciones DDL en catálogos federados. 
+ Puede registrar los siguientes conectores para integrarlos con AWS Glue y obtener un control de acceso detallado:
  + [Azure Data Lake Storage](connectors-adls-gen2.md)
  + [Azure Synapse](connectors-azure-synapse.md)
  + [BigQuery](connectors-bigquery.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 Cloud Storage](connectors-gcs.md)
  + [HBase](connectors-hbase.md)
  + [MySQL](connectors-mysql.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)
  + [de SQL Server](connectors-microsoft-sql-server.md)
  + [Timestream](connectors-timestream.md)
  + [TPC-DS](connectors-tpcds.md)
+ Al crear un enlace de recursos para la federación de la conexión de Glue, el nombre del [enlace de recursos](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html) debe ser el mismo que el nombre de la base de datos del productor.
+ Actualmente, solo se reconocen los nombres de tablas y columnas en minúscula, incluso si el origen de datos no distingue entre mayúsculas y minúsculas.

# Registro de catálogos de buckets de tabla de S3 y consulta de tablas desde Athena
<a name="gdc-register-s3-table-bucket-cat"></a>

Los buckets de tabla de S3 son un tipo de bucket de Amazon S3 diseñado específicamente para almacenar datos tabulares en tablas de Apache Iceberg. Los buckets de tablas automatizan tareas de administración de tablas, como la compactación, la administración de instantáneas y la recopilación de elementos no utilizados, para optimizar continuamente el rendimiento de las consultas y minimizar los costos. Tanto si recién comienza como si cuenta con miles de tablas en el entorno de Iceberg, los buckets de tabla simplifican el uso de los lagos de datos a cualquier escala. Para obtener más información, consulte [buckets de tabla](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html).

## Consideraciones y limitaciones
<a name="gdc-register-s3-table-consideration"></a>
+ Todas las operaciones DDL compatibles con las tablas de Iceberg son compatibles con las tablas de S3, excepto los siguientes:
  + `ALTER TABLE RENAME`, `CREATE VIEW` y `ALTER DATABASE` no son compatibles.
  + `OPTIMIZE` y `VACUUM`: puede gestionar la compactación y la gestión de instantáneas en S3. Para obtener más información, consulte [la documentación de mantenimiento de tablas de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html).
+ No se admiten consultas DDL en tablas de S3 registradas como orígenes de datos de Athena.
+ No se admite la reutilización del resultado de la consulta.
+ En los grupos de trabajo con el cifrado SSE-KMS, CSE-KMS activado, no se pueden ejecutar operaciones de escritura como `INSERT`, `UPDATE`, `DELETE` o `MERGE` en tablas de S3.
+ En los grupos de trabajo con la opción Pagos de solicitantes de S3 (S3 Requester Pays) habilitada, no puede ejecutar operaciones DML en tablas de S3.

## Consulta de tablas de S3 desde Athena
<a name="gdc-register-s3-table-prereq-setup"></a>

**Complete estos requisitos previos antes de consultar las tablas de S3 desde Athena**

1. Cree un bucket de tabla de S3. Para obtener más información, consulte [Cómo crear un bucket de tabla](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html) en la Guía del usuario de Amazon Simple Storage Service. 

1. Asegúrese de que la integración de sus cubos de mesa con AWS Glue Data Catalog sea correcta. Para conocer los permisos necesarios y los pasos de configuración, consulte [Requisitos previos para la integración de las Tablas de S3](https://docs.aws.amazon.com/glue/latest/dg/s3tables-catalog-prerequisites.html) y [Habilitar la integración de las tablas de S3 con los Catálogo de datos de Glue](https://docs.aws.amazon.com/glue/latest/dg/enable-s3-tables-catalog-integration.html) en la Guía para desarrolladores AWS Glue.

1. Para la entidad principal que utilice para ejecutar consultas con Athena, conceda permisos sobre el catálogo de tablas de S3 mediante uno de los siguientes enfoques: 

   **Opción 1: usar permisos de IAM**

   Al utilizar el control de acceso de IAM, su entidad principal necesita permisos tanto en los recursos AWS Glue Data Catalog como en los recursos de tablas de Amazon S3.

   La siguiente lista contiene todos los permisos `s3tables` necesarios para realizar cualquier operación DDL o DML compatible en sus tablas de S3 en Athena:
   + `s3tables:GetTableBucket`
   + `s3tables:GetNamespace`
   + `s3tables:GetTable`
   + `s3tables:GetTableData`
   + `s3tables:PutTableData`
   + `s3tables:ListNamespaces`
   + `s3tables:ListTables`
   + `s3tables:DeleteNamespace`
   + `s3tables:DeleteTable`
   + `s3tables:CreateNamespace`
   + `s3tables:CreateTable`
   + `s3tables:UpdateTableMetadataLocation`

   Aplique estos permisos a un grupo de tablas de S3 y a recursos de tablas de S3 específicos o utilice `*` como recurso para conceder acceso a todos los grupos de tablas y tablas de su cuenta. Estos permisos se pueden combinar con la política administrada [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html) para habilitar una funcionalidad completa.

   **Opción 2: usar los permisos de Lake Formation**

   Para habilitar el control de acceso detallado, puede conceder permisos de Lake Formation en el catálogo de la tabla de S3, ya sea a través de la consola de Lake Formation o la AWS CLI. Esto requiere registrar sus buckets de tablas de S3 como una ubicación de datos de Lake Formation. Para obtener más información sobre el proceso de migración o integración, consulte [Creación de un catálogo de tablas de Amazon S3 en la AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) en la Guía para desarrolladores de Lake Formation.

------
#### [ Consola de administración de AWS ]

   1. Abra la consola de AWS Lake Formation en [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) e inicie sesión como administrador del lago de datos. Para obtener más información sobre cómo crear un administrador del lago de datos, consulte [Cómo crear un administrador del lago de datos](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin).

   1. En el panel de navegación, elija **Permisos de datos** y, a continuación, seleccione **Conceder**. 

   1. En la página **Conceder permisos**, en **Entidades principales**, elija la entidad principal que desea utilizar para enviar consultas desde Athena.

   1. En **Etiquetas LF o recursos de catálogo**, elija **Recursos de catálogo de datos con nombre**.

   1. En **Catálogos**, elija un catálogo de datos de Glue que haya creado a partir de la integración del bucket de tablas. Por ejemplo, *<accoundID>*:s3tablescatalog/*amzn-s3-demo-bucket*.

   1. En **Permisos del catálogo**, elija **Super**.

   1. Elija **Conceder**.

------
#### [ AWS CLI ]

   Ejecute el siguiente comando con el rol de administrador del lago de datos de Lake Formation para conceder acceso a la entidad principal que utiliza para enviar consultas desde Athena. 

   ```
   aws lakeformation grant-permissions \
   --region <region (Example,us-east-1)> \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "<user or role ARN (Example, arn:aws:iam::<Account ID>:role/ExampleRole>"
       },
       "Resource": {
           "Catalog": {
               "Id":"<Account ID>:s3tablescatalog/amzn-s3-demo-bucket"
           }
       },
       "Permissions": ["ALL"]
   }'
   ```

------

**Enviar consultas para tablas de S3**

1. Envíe una consulta `CREATE DATABASE` desde Athena con el usuario/rol concedido anteriormente. En este ejemplo, `s3tablescatalog` es el catálogo de datos de Glue principal creado a partir de la integración, y ` s3tablescatalog/amzn-s3-demo-bucket` es el catálogo de datos de Glue secundario creado para cada bucket de tabla de S3. Existen dos formas de realizar la consulta.

------
#### [ Option 1 ]

   Especifique el catálogo de datos de Glue secundario (`s3tablescatalog/amzn-s3-demo-bucket`) directamente desde la consola o la AWS CLI.

   **Uso de Consola de administración de AWS**

   1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

   1. En el menú de navegación de la izquierda, en **Nombre del origen de datos**, elija **AwsDataCatalog**.

   1. Para **Catálogo**, elija **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. En el editor de consultas, ingrese una consulta como `CREATE DATABASE test_namespace`.

   **Uso de AWS CLI**

   Ejecute el siguiente comando.

   ```
   aws athena start-query-execution \ 
   --query-string 'CREATE DATABASE `test_namespace`' \ 
   --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket"}' \
   --work-group "primary"
   ```

------
#### [ Option 2 ]

   Cree un catálogo de datos de Athena a partir del catálogo de datos de Glue secundario en la consola de Athena y especifíquelo como catálogo en la consulta. Para obtener más información, consulte [Registro de catálogos de buckets de tabla de S3 como orígenes de datos de Athena](#gdc-register-s3-table-console-steps).

------

1. Con la base de datos que creó en el paso anterior, utilice `CREATE TABLE` para crear una tabla. En el siguiente ejemplo, se crea una tabla en la base de datos *`test_namespace`* que creó anteriormente en el catálogo `s3tablescatalog/amzn-s3-demo-bucket` de Glue.

------
#### [ Consola de administración de AWS ]

   1. En el menú de navegación de la izquierda, en **Nombre del origen de datos**, elija **AwsDataCatalog**.

   1. Para **Catálogo**, elija **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Para **Base de datos**, elija **test\$1namespace**.

   1. En el editor de consultas, ejecute la siguiente consulta.

      ```
      CREATE TABLE daily_sales (
              sale_date date,
              product_category
              string, sales_amount double)
      PARTITIONED BY (month(sale_date))
      TBLPROPERTIES ('table_type' = 'iceberg')
      ```

------
#### [ AWS CLI ]

   Ejecute el siguiente comando.

   ```
   aws athena start-query-execution \
   --query-string "CREATE TABLE daily_sales (
           sale_date date,
           product_category
           string, sales_amount double)
   PARTITIONED BY (month(sale_date))
   TBLPROPERTIES ('table_type' = 'iceberg')" \
   --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket", "Database":"test_namespace"}' \
   --work-group "primary"
   ```

------

1. Inserte datos en la tabla que creó en el paso anterior.

------
#### [ Consola de administración de AWS ]

   1. En el menú de navegación de la izquierda, en **Nombre del origen de datos**, elija **AwsDataCatalog**.

   1. Para **Catálogo**, elija **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Para **Base de datos**, elija **test\$1namespace**.

   1. En el editor de consultas, ejecute la siguiente consulta.

      ```
      INSERT INTO daily_sales
      VALUES 
          (DATE '2024-01-15', 'Laptop', 900.00),
          (DATE '2024-01-15', 'Monitor', 250.00),
          (DATE '2024-01-16', 'Laptop', 1350.00),
          (DATE '2024-02-01', 'Monitor', 300.00);
      ```

------
#### [ AWS CLI ]

   Ejecute el siguiente comando.

   ```
   aws athena start-query-execution \
   --query-string "INSERT INTO \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales
   VALUES 
   (DATE '2024-01-15', 'Laptop', 900.00),
   (DATE '2024-01-15', 'Monitor', 250.00),
   (DATE '2024-01-16', 'Laptop', 1350.00),
   (DATE '2024-02-01', 'Monitor', 300.00)"\ 
   --work-group "primary"
   ```

------

1. Después de insertar los datos en la tabla, puede consultarlos.

------
#### [ Consola de administración de AWS ]

   1. En el menú de navegación de la izquierda, en **Nombre del origen de datos**, elija **AwsDataCatalog**.

   1. Para **Catálogo**, elija **s3tablescatalog/*amzn-s3-demo-bucket***.

   1. Para **Base de datos**, elija **test\$1namespace**.

   1. En el editor de consultas, ejecute la siguiente consulta.

      ```
      SELECT
          product_category,
          COUNT(*) AS units_sold,
          SUM(sales_amount) AS total_revenue,
          AVG(sales_amount) AS average_price
      FROM
          daily_sales
      WHERE
          sale_date BETWEEN DATE '2024-02-01' 
                       AND DATE '2024-02-29'
      GROUP BY
          product_category
      ORDER BY
          total_revenue DESC
      ```

------
#### [ AWS CLI ]

   Ejecute el siguiente comando.

   ```
   aws athena start-query-execution \
   --query-string "SELECT product_category,
       COUNT(*) AS units_sold,
       SUM(sales_amount) AS total_revenue,
       AVG(sales_amount) AS average_price
   FROM \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales
   WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29'
   GROUP BY product_category
   ORDER BY total_revenue DESC"\
   --work-group "primary"
   ```

------

## Creación de tablas de S3 en Athena
<a name="gdc-create-s3-tables-athena"></a>

Athena admite la creación de tablas en los espacios de nombres de tablas de S3 existentes o en los espacios de nombres creados en Athena con introducciones `CREATE DATABASE`. Para crear una tabla de S3 desde Athena, la sintaxis es la misma que cuando se [crea una tabla de Iceberg normal](querying-iceberg-creating-tables.md), excepto que no se especifica la `LOCATION`, como se muestra en el siguiente ejemplo.

```
CREATE TABLE
[db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] )
[PARTITIONED BY (col_name | transform, ... )]
[TBLPROPERTIES ([, property_name=property_value] )]
```

También puede crear tablas de S3 por medio de las instrucciones CREATE TABLE AS SELECT (CTAS). Para obtener más información, consulte [CTAS para tablas de S3](#ctas-s3-tables).

## Registro de catálogos de buckets de tabla de S3 como orígenes de datos de Athena
<a name="gdc-register-s3-table-console-steps"></a>

Para registrar catálogos de buckets de tabla de S3 en la consola de Athena, siga estos pasos.

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

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 un origen de datos**, elija **Amazon S3: AWS Glue Data Catalog**.

1. En la sección **AWS Glue Data Catalog**, bajo **Cuenta de origen de datos**, elija **AWS Glue Data Catalog en esta cuenta**.

1. En **Crear una tabla o registrar un catálogo**, elija **Registrar un nuevo catálogo de AWS Glue**.

1. En la sección **Detalles del origen de datos**, en **Nombre del origen de datos**, ingrese el nombre que desea utilizar para especificar el origen de datos en las consultas SQL o utilice el nombre predeterminado que se genera.

1. En **Catálogo**, seleccione **Examinar** para buscar una lista de catálogos de AWS Glue en la misma cuenta. Si no ve ningún catálogo existente, cree uno en la [consola de AWS Glue](https://console.aws.amazon.com/glue/). 

1. En el cuadro de diálogo **Examinar catálogos de AWS Glue**, seleccione el catálogo que desea utilizar y, a continuación, elija **Seleccionar**.

1. (Opcional) En **Etiquetas**, ingrese cualquier par de clave/valor que desee asociar al origen de datos.

1. Elija **Siguiente**.

1. En la página **Revisar y crear**, compruebe que la información introducida es correcta y, a continuación, seleccione **Crear origen de datos**.

## CTAS para tablas de S3
<a name="ctas-s3-tables"></a>

Amazon Athena ahora admite operaciones CREATE TABLE AS SELECT (CTAS) para tablas de S3. Esta característica permite crear nuevas tablas de S3 en función de los resultados de una consulta SELECT. 

Al crear una consulta CTAS para una tabla de S3, existen algunas diferencias importantes en comparación con las tablas estándar de Athena:
+ Debe omitir la propiedad de ubicación porque las tablas de S3 administran automáticamente sus propias ubicaciones de almacenamiento.
+ La propiedad `table_type` se establece de forma predeterminada en `ICEBERG`, por lo que no es necesario especificarla explícitamente en la consulta.
+ Si no se especifica un formato, el sistema utiliza automáticamente `PARQUET` como formato predeterminado para los datos.
+ Todas las demás propiedades siguen la misma sintaxis que las tablas de Iceberg normales.

Antes de crear tablas de S3 por medio de CTAS, asegúrese de contar con los permisos necesarios configurados en IAM o AWS Lake Formation. Específicamente, necesita permisos para crear tablas en el catálogo de las tablas de S3. Sin estos permisos, se producirá un error en las operaciones CTAS.

**nota**  
Si se produce un error en la consulta CTAS, es posible que tenga que eliminar la tabla por medio de la [API de las tablas de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-delete.html) antes de intentar volver a ejecutar la consulta. No puede usar las instrucciones `DROP TABLE` de Athena para eliminar la tabla que fue creada parcialmente por la consulta. 

**Ejemplo**

```
CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name"
WITH (
    format = 'PARQUET'
)
AS SELECT *
FROM source_table;
```

# Cómo consultar los catálogos de datos de AWS Glue en Athena
<a name="gdc-register-query-the-data-source"></a>

Para consultar catálogos de datos desde Athena, realice una de las siguientes acciones.
+ Registre el catálogo en Athena como origen de datos y, a continuación, utilice el nombre del origen de datos para consultar el catálogo. En este uso, las siguientes consultas son equivalentes.

  ```
  SELECT * FROM my_data_source.my_database.my_table
  ```
+ Si va a consultar un catálogo que no se ha registrado como origen de datos de Athena, puede proporcionar la ruta completa al catálogo en las consultas `SELECT`, como en el siguiente ejemplo.

  ```
  SELECT * FROM "my_catalog/my_subcatalog".my_database.my_table
  ```
+ También puede hacerlo a través de la Consola de administración de AWS.

  1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

  1. En el editor de consultas, en **Origen de datos**, seleccione **AwsDataCatalog**.

  1. En **Catálogo**, elija el nombre del catálogo que desea utilizar.

  1. En **Base de datos**, elija la base de datos que contiene la tabla que desea consultar.

  1. Ingrese una consulta como `SELECT * FROM my_table` y, a continuación, elija **Ejecutar**.

# Registrar un catálogo de datos desde otra cuenta
<a name="data-sources-glue-cross-account"></a>

Puede utilizar la característica de catálogo de AWS Glue de cuentas cruzadas de Athena para registrar un catálogo AWS Glue desde una cuenta que no sea la suya. Después de configurar los permisos de IAM necesarios para AWS Glue y registrar el catálogo como recurso de `DataCatalog` de Athena, puede utilizar Athena para ejecutar consultas entre cuentas. Para obtener información sobre la configuración de los permisos necesarios, consulte [Configuración del acceso entre cuentas a los catálogos de datos de AWS Glue](security-iam-cross-account-glue-catalog-access.md).

El procedimiento siguiente muestra cómo utilizar Athena para configurar un AWS Glue Data Catalog en una cuenta de Amazon Web Services distinta de la suya como origen de datos.

## Registrar desde la consola
<a name="data-sources-glue-cross-account-console"></a>

1. Siga los pasos de [Configuración del acceso entre cuentas a los catálogos de datos de AWS Glue](security-iam-cross-account-glue-catalog-access.md) para asegurarse de que tiene permisos para consultar el catálogo de datos en la otra 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 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 parte superior derecha de la consola, seleccione **Create data source** (Crear origen de datos).

1. En la página **Choose a data source** (Elegir un origen de datos), para **Data Sources** (Orígenes de datos), elija **S3 -AWS Glue Data Catalog** y, a continuación, elija **Next** (Siguiente).

1. En la página **Introducir detalles del origen de datos**, en la sección **AWS Glue Data Catalog**, para **Elegir un AWS Glue Data Catalog**, elija **AWS Glue Data Catalog en otra cuenta**.

1. En **Dataset details** (Detalles del origen de datos), ingrese la siguiente información:
   + **Data source name** (Nombre del origen de datos): ingrese el nombre que desea utilizar en las consultas SQL para hacer referencia al catálogo de datos de la otra cuenta.
   + **Descripción**: (opcional) ingrese una descripción del catálogo de datos en la otra cuenta.
   + **ID del catálogo**: ingrese el ID de cuenta de Amazon Web Services de 12 dígitos de la cuenta a la que pertenece el catálogo de datos. El ID de cuenta de Amazon Web Services es el ID del catálogo.

1. (Opcional) En **Tags** (Etiquetas), ingrese pares clave-valor que quiera asociar con el 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 la información que ha proporcionado y, a continuación, elija **Create data source** (Crear un origen de datos). En la página **Data source details** (Detalles de origen de datos) se enumeran las bases de datos y etiquetas del catálogo de datos que ha registrado.

1. Elija **Orígenes de datos y catálogos**. El catálogo de datos que ha registrado se muestra en la columna **Data source name** (Nombre de origen de datos).

1. Para ver o editar información sobre el nuevo catálogo de datos, elija el catálogo y, a continuación, elija **Actions** (Acciones) y **Edit** (Editar).

1. Para eliminar el nuevo catálogo de datos, elija el catálogo y, a continuación, elija **Actions** (Acciones) y **Delete** (Eliminar).

## Registrar usando las operaciones API
<a name="data-sources-glue-cross-account-api"></a>

1. El siguiente cuerpo de solicitud de `CreateDataCatalog` registra un catálogo de AWS Glue para acceso entre cuentas:

   ```
   # Example CreateDataCatalog request to register a cross-account Glue catalog:
   {
       "Description": "Cross-account Glue catalog",
       "Name": "ownerCatalog",
       "Parameters": {"catalog-id" : "<catalogid>"  # Owner's account ID
       },
       "Type": "GLUE"
   }
   ```

1. El siguiente código de muestra utiliza un cliente Java para crear el objeto `DataCatalog`.

   ```
   # Sample code to create the DataCatalog through Java client
   CreateDataCatalogRequest request = new CreateDataCatalogRequest()
       .withName("ownerCatalog")
       .withType(DataCatalogType.GLUE)
       .withParameters(ImmutableMap.of("catalog-id", "<catalogid>"));
   
   athenaClient.createDataCatalog(request);
   ```

   Después de estos pasos, el prestatario debe ver el *`ownerCatalog`* cuando llama a la operación de la API [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html).

## Registrar usando AWS CLI
<a name="data-sources-glue-cross-account-cli"></a>

Utilice el siguiente comando CLI de ejemplo para registrar una AWS Glue Data Catalog desde otra cuenta.

```
aws athena create-data-catalog \
  --name cross_account_catalog \
  --type GLUE \
  --description "Cross Account Catalog" \
  --parameters catalog-id=<catalogid>
```

Para obtener más información, consulte [Query cross-account AWS Glue Data Catalogs using Amazon Athena](https://aws.amazon.com/blogs/big-data/query-cross-account-aws-glue-data-catalogs-using-amazon-athena/) en el *Blog de macrodatos de AWS*.

# Control del acceso a los catálogos de datos con políticas de IAM
<a name="datacatalogs-iam-policy"></a>

Para controlar el acceso a los catálogos de datos, utilice permisos de IAM de nivel de recursos o políticas de IAM basadas en identidad. 

El siguiente procedimiento es específico de Athena. 

Para obtener información específica sobre IAM, consulte los enlaces que se enumeran al final de esta sección. Para obtener información sobre políticas de catálogo de datos JSON de ejemplo, consulte [Políticas de catálogos de datos de ejemplo](datacatalogs-example-policies.md).

**Para utilizar el editor visual en la consola de IAM para crear una política de catálogo de datos**

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

1. En el panel de navegación de la izquierda, elija **Políticas** y, a continuación, elija **Crear política**.

1. En la pestaña **Editor visual**, elija **Elegir un servicio**. A continuación, elija un servicio de Athena para agregar a la política.

1. Elija **Seleccionar acciones** y, a continuación, elija las acciones que desea añadir a la política. El editor visual muestra las acciones disponibles en Athena. Para obtener más información, consulte [Acciones, recursos y claves de condición de Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html) en la *Referencia de autorizaciones de servicio*.

1. Elija **Añadir acciones** para escribir una acción específica o utilice comodines (\$1) para especificar varias acciones. 

   De forma predeterminada, la política que está creando permite las acciones que usted elija. Si eligió una o más acciones que admiten permisos en el nivel de recursos para el recurso `datacatalog` en Athena, el editor visual enumera el recurso `datacatalog`. 

1. Elija **Recursos** para especificar catálogos de datos específicos para su política. Para ver políticas de catálogo de datos JSON de ejemplo, consulte [Políticas de catálogos de datos de ejemplo](datacatalogs-example-policies.md).

1. Especifique el recurso `datacatalog` como se indica a continuación:

   ```
   arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>
   ```

1. Elija **Revisar la política** y, a continuación, escriba un **Nombre** y una **Descripción** (opcional) para la política que está creando. Revise el resumen de la política para asegurarse de que ha concedido los permisos deseados. 

1. Elija **Crear política** para guardar la nueva política.

1. Asocie esta política basada en la identidad a un usuario, grupo o rol y especifique los recursos de `datacatalog` a los que pueden acceder.

Para obtener más información, consulte los siguientes temas en la *Referencia de autorizaciones de servicio* y la *Guía del usuario de IAM*:
+ [Acciones, recursos y claves de condición de Amazon Athena](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)
+ [Creación de políticas con el editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor)
+ [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)
+ [Control del acceso a los recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#access_controlling-resources)

Para ver políticas de catálogo de datos JSON de ejemplo, consulte [Políticas de catálogos de datos de ejemplo](datacatalogs-example-policies.md).

Para obtener información sobre los permisos de AWS Glue y los permisos del rastreador de AWS Glue, consulte [Configuración de permisos de IAM para AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html) y [Requisitos previos del rastreador](https://docs.aws.amazon.com/glue/latest/dg/crawler-prereqs.html) en la *Guía para desarrolladores de AWS Glue*.

Para obtener una lista completa de las acciones de Amazon Athena, consulte los nombres de acciones de la API en la [Referencia de API de Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). 

# Políticas de catálogos de datos de ejemplo
<a name="datacatalogs-example-policies"></a>

En esta sección se incluyen políticas de ejemplo que puede utilizar para habilitar varias acciones en catálogos de datos.

Un catálogo de datos es un recurso de IAM administrado por Athena. Por lo tanto, si la política de catálogo de datos utiliza acciones que toman `datacatalog` como entrada, debe especificar el ARN del catálogo de datos de la siguiente manera:

```
"Resource": [arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>]
```

El `<datacatalog-name>` es el nombre del catálogo de datos. Por ejemplo, para un catálogo de datos denominado `test_datacatalog`, especifíquelo como recurso de la siguiente manera:

```
"Resource": ["arn:aws:athena:us-east-1:123456789012:datacatalog/test_datacatalog"]
```

Para obtener una lista completa de las acciones de Amazon Athena, consulte los nombres de acciones de la API en la [Referencia de API de Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/). Para obtener más información sobre las políticas de IAM, consulte [Creación de políticas con el editor visual](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor) en la *Guía del usuario de IAM*. Para obtener más información acerca de la creación de políticas de IAM para grupos de trabajo, consulte [Control del acceso a los catálogos de datos con políticas de IAM](datacatalogs-iam-policy.md).
+ [Example Policy for Full Access to All Data Catalogs](#datacatalog-policy-full-access-to-all-data-catalogs)
+ [Example Policy for Full Access to a Specified Data Catalog](#datacatalog-policy-full-access-to-a-specified-catalog)
+ [Example Policy for Querying a Specified Data Catalog](#datacatalog-policy-querying-a-specified-data-catalog)
+ [Example Policy for Management Operations on a Specified Data Catalog](#datacatalog-policy-management-operations-on-a-specified-catalog)
+ [Example Policy for Listing Data Catalogs](#datacatalog-policy-listing-data-catalogs)
+ [Example Policy for Metadata Operations on Data Catalogs](#datacatalog-policy-metadata-operations)

**Example Ejemplo de política para el acceso completo a todos los catálogos de datos**  
La siguiente política permite el acceso completo a todos los recursos de catálogos de datos que podrían existir en la cuenta. Le recomendamos que utilice esta política para aquellos usuarios en su cuenta que deben administrar catálogos de datos para los demás usuarios.    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "athena:*"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

**Example Ejemplo de política para el acceso completo a un catálogo de datos especificado**  
La siguiente política permite acceso completo al recurso de catálogo de datos específico individual, denominado `datacatalogA`. Puede utilizar esta política para los usuarios con control total sobre un catálogo de datos en particular.    
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement":[ { "Effect":"Allow", "Action":[
   "athena:ListDataCatalogs", "athena:ListWorkGroups", "athena:GetDatabase", "athena:ListDatabases",
   "athena:ListTableMetadata", "athena:GetTableMetadata" ], "Resource":"*" }, { "Effect":"Allow",
   "Action":[ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery",
   "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution",
   "athena:GetQueryResultsStream", "athena:ListNamedQueries", "athena:CreateNamedQuery",
   "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution",
   "athena:DeleteWorkGroup", "athena:UpdateWorkGroup", "athena:GetWorkGroup",
   "athena:CreateWorkGroup" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:workgroup/*"
   ] }, { "Effect":"Allow", "Action":[ "athena:CreateDataCatalog", "athena:DeleteDataCatalog",
   "athena:GetDataCatalog", "athena:GetDatabase", "athena:GetTableMetadata", "athena:ListDatabases",
   "athena:ListTableMetadata", "athena:UpdateDataCatalog" ],
      "Resource":"arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
   } ] }
```

**Example Ejemplo de política para consultar un catálogo de datos especificado**  
En la siguiente política, un usuario puede ejecutar consultas en el especificado `datacatalogA`. El usuario no tiene permiso para realizar las tareas de administración para el catálogo de datos en sí, como, por ejemplo, actualizarlo o eliminarlo.     
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement":[ { "Effect":"Allow", "Action":[
   "athena:StartQueryExecution" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:workgroup/*"
   ] }, { "Effect":"Allow", "Action":[ "athena:GetDataCatalog" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
   ] } ] }
```

**Example Ejemplo de política para operaciones de administración en un catálogo de datos especificado**  
En la siguiente política, se permite a un usuario crear, eliminar, obtener detalles y actualizar un catálogo de datos `datacatalogA`.     
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Action": [
    "athena:CreateDataCatalog", "athena:GetDataCatalog", "athena:DeleteDataCatalog",
    "athena:UpdateDataCatalog" ], "Resource": [
        "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
    ] } ] }
```

**Example Ejemplo de política para generar listas de catálogos de datos**  
La siguiente política permite a todos los usuarios enumerar todos los catálogos de datos:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example Ejemplo de política para realizar operaciones de metadatos en catálogos de datos**  
La siguiente política permite operaciones de metadatos en catálogos de datos:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetDatabase",
                "athena:GetTableMetadata",
                "athena:ListDatabases",
                "athena:ListTableMetadata"
            ],
            "Resource": "*"
        }
    ]
}
```

# Utilice un formulario de la consola de Athena para agregar una tabla de AWS Glue
<a name="data-sources-glue-manual-table"></a>

En el procedimiento siguiente se muestra cómo utilizar la consola de Athena para agregar una tabla mediante el formulario **Create Table From S3 bucket data** (Crear tabla a partir de datos de buckets de S3).

**Para agregar una tabla e ingresar información del esquema mediante un formulario**

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, junto a **Tables and views** (Tablas y vistas), elija **Create** (Crear) y, a continuación, **S3 bucket data** (Datos del bucket de S3).

1. En el formulario **Create Table From S3 bucket data** (Crear tabla a partir de datos de buckets de S3), en **Table name** (Nombre de la tabla), ingrese un nombre para la tabla. Para obtener información sobre los caracteres aceptables para los nombres de base de datos, los nombres de tablas y los nombres de columnas en Athena, consulte [Nombrar tablas, bases de datos y columnas](tables-databases-columns-names.md).

1. En **Database configuration** (Configuración de la base de datos), elija una base de datos existente o cree una nueva.

1. En **Location of Input Data Set** (Ubicación del conjunto de datos de entrada), especifique la ruta de acceso en Amazon S3 para la carpeta que contiene el conjunto de datos que desea procesar. No incluya ningún nombre de archivo en la ruta. Athena analiza todos los archivos de la carpeta que especifique. Si sus datos ya están particionados (por ejemplo, 

    s3://amzn-s3-demo-bucket/logs/year=2004/month=12/day=11/), ingrese únicamente la ruta base (por ejemplo, s3://amzn-s3-demo-bucket/logs/).

1. En **Data Format** (Formato de datos), elija una de las siguientes opciones:
   + Para **Table type** (Tipo de tabla), elija **Apache Hive**, **Apache Iceberg** o **Delta Lake**. Athena usa el tipo de tabla Apache Hive como tipo de tabla predeterminado. Para obtener información acerca de la consulta de tablas de Apache Iceberg en Athena, consulte [Consulta de tablas de Apache Iceberg](querying-iceberg.md). Para obtener información acerca del uso de tablas de Delta Lake en Athena, consulte [Consulta de las tablas de Linux Foundation Delta Lake](delta-lake-tables.md).
   + En **File format** (Formato de archivo), elija el formato de archivo o registro en el que se encuentran los datos.
     + Para la opción **Text File with Custom Delimiters** (Archivo de texto con delimitadores personalizados), especifique un **terminador de campo** (es decir, un delimitador de columna). Si lo desea, puede especificar un **Collection terminator** (Terminador de colección) que marque el final de un tipo de matriz o un **Collection terminator** (Terminador de colección) que marque el final de un tipo de datos de mapa.
   + **SerDe library** (Biblioteca SerDe): una biblioteca SerDe (serializador-deserializador) analiza un formato de datos determinado para que Athena pueda crearle una tabla. Para la mayoría de los formatos, se elige una biblioteca SerDe predeterminada. Para los siguientes formatos, elija una biblioteca según sus requisitos:
     + **Apache Web Logs** (Registros web de Apache): elija la biblioteca **RegexSerDe** o **GrokSerDe**. Para RegexSerDe, proporcione una expresión regular en el cuadro **Regex definition** (Definición de regex). Para GrokSerDe, proporcione una serie de expresiones regulares con nombre para la propiedad SerDe `input.format`. Las expresiones regulares nombradas son más fáciles de leer y mantener que las expresiones regulares. Para obtener más información, consulte [Consulta de registros de Apache almacenados en Amazon S3](querying-apache-logs.md).
     + **CSV**: elija **LazySimpleSerDe** si sus datos separados por comas no contienen valores entre comillas dobles o si utilizan el formato `java.sql.Timestamp`. Elija **OpenCSVSerDe** si los datos incluyen comillas o utilizan el formato numérico de UNIX de `TIMESTAMP` (por ejemplo, `1564610311`). Para obtener más información, consulte [Lazy Simple SerDe para CSV, TSV y archivos con delimitación personalizada](lazy-simple-serde.md) y [Open CSV SerDe para el procesamiento de CSV](csv-serde.md).
     + **JSON**: elija la biblioteca SerDe JSON de **OpenX** o **Hive**. Ambos formatos esperan que cada documento JSON esté en una sola línea de texto y que los campos no estén separados por caracteres de nueva línea. El SerDe de OpenX ofrece algunas propiedades adicionales. Para obtener más información sobre estas propiedades, consulte [El SerDe JSON de OpenX](openx-json-serde.md). Para obtener más información acerca de SerDe de Hive, consulte [El SerDe JSON de Hive](hive-json-serde.md).

     Para obtener más información sobre el uso de bibliotecas SerDe en Athena, consulte [Elección de un valor de SerDe para los datos](supported-serdes.md).

1. En **SerDe properties** (Propiedades de SerDe), agregue, edite o elimine propiedades y valores de acuerdo con la biblioteca de SerDe que esté utilizando y sus requisitos.
   + Para agregar una propiedad de SerDe, elija **Add SerDe property** (Agregar propiedad de SerDe).
   + En el campo **Name** (Nombre), ingrese el nombre de la propiedad. 
   + En el campo **Value** (Valor), ingrese un valor para la propiedad. 
   + Para eliminar una propiedad de SerDe, elija **Remove** (Eliminar).

1. En **Table properties** (Propiedades de la tabla), elija o edite las propiedades de la tabla según sus requisitos.
   + En **Write compression** (Compresión de escritura), elija una opción de compresión. La disponibilidad de la opción de compresión de escritura y de las opciones de compresión disponibles depende del formato de los datos. Para obtener más información, consulte [Uso de la compresión en Athena](compression-formats.md).
   + En **Encryption** (Cifrado), seleccione **Encrypted data set** (Conjunto de datos cifrados) si los datos subyacentes están cifrados en Amazon S3. Esta opción establece la propiedad de la tabla `has_encrypted_data` en True (Verdadero) en la instrucción `CREATE TABLE`.

1. En **Column details** (Detalles de la columna), ingrese los nombres y los tipos de datos de las columnas que desee agregar a la tabla.
   + Para agregar más columnas de una a la vez, elija **Add a column** (Agregar una columna).
   + Para agregar más columnas rápidamente, elija **Bulk add columns** (Agregar columnas en bloque). En el cuadro de texto, ingrese una lista de columnas separadas por comas con el formato *column\$1name* *data\$1type*, *column\$1name* *data\$1type*, […] y, a continuación, elija **Add** (Agregar).

1. (Opcional) En **Partition details** (Detalles de la partición), agregue uno o varios nombres y tipos de datos de columnas. La partición mantiene los datos relacionados juntos en función de los valores de las columnas y puede ayudar a reducir la cantidad de datos escaneados por consulta. Para obtener información sobre las particiones, consulte [Partición de datos](partitions.md).

1. (Opcional) En **Bucketing** (Agrupación en buckets), puede especificar una o más columnas que tengan filas que desee agrupar y, a continuación, colocarlas en varios buckets. Esto le permite consultar solo el bucket que desea leer cuando se especifica el valor de las columnas agrupadas en buckets.
   + En **Buckets**, seleccione una o más columnas que tengan un gran número de valores únicos (por ejemplo, una clave principal) y que se usen con frecuencia para filtrar los datos de las consultas.
   + En **Number of buckets** (Número de buckets), ingrese un número que permita que los archivos tengan un tamaño óptimo. Para obtener información, consulte [Top 10 Performance Tuning Tips for Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/) (Los 10 principales consejos de ajuste de rendimiento de Amazon Athena) en el Blog de macrodatos de AWS.
   + Para especificar las columnas agrupadas, la instrucción `CREATE TABLE` utilizará la siguiente sintaxis:

     ```
     CLUSTERED BY (bucketed_columns) INTO number_of_buckets BUCKETS
     ```
**nota**  
La opción **Bucketing** (Agrupación en buckets) no está disponible para los tipos de tablas de **Iceberg**.

1. El recuadro **Preview table query** (Vista previa de consulta de tablas) muestra la instrucción `CREATE TABLE` generada por la información ingresada en el formulario. La instrucción de vista previa no se puede editar directamente. Para cambiar la instrucción, modifique los campos del formulario o [cree la instrucción directamente](creating-tables-how-to.md#to-create-a-table-using-hive-ddl) en el editor de consultas en lugar de utilizar el formulario. 

1. Elija **Create table** (Crear tabla) para ejecutar la instrucción generada en el editor de consultas y crear la tabla.

# Utilice un rastreador para agregar una tabla
<a name="schema-crawlers"></a>

Los rastreadores de AWS Glue son útiles para detectar el esquema de conjuntos de datos y registrarlos como tablas en el catálogo de datos de AWS Glue. Los rastreadores revisan sus datos y establecen cuál es el esquema. Además, los rastreadores puede detectar y registrar particiones. Para obtener más información, consulte [Definición de rastreadores](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) en la *Guía para desarrolladores de AWS Glue*. Las tablas de datos que se han rastreado correctamente se pueden consultar desde Athena.

**nota**  
Athena no reconoce los [patrones de exclusión](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude) que especifica en un rastreador de AWS Glue. Por ejemplo, si tiene un bucket de Amazon S3 que contiene tanto `.csv` como `.json` y se excluyen los archivos `.json` desde el rastreador, Athena consulta ambos grupos de archivos. Para evitar esto, coloque los archivos que desea excluir en una ubicación diferente. 

## Creación de un rastreador de AWS Glue
<a name="data-sources-glue-crawler-setup"></a>

Para crear un rastreador, abra la consola de Athena y, a continuación, utilice la consola de AWS Glue de forma integrada. Al crear el rastreador, especifica una ubicación de datos en Amazon S3 para rastrearla.

**Para crear un rastreador en AWS Glue desde 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. En el editor de consultas, junto a **Tablas y vistas**, elija **Crear** y, a continuación, **Rastreador de AWS Glue**. 

1. En la página **Add crawler** (Agregar rastreador) de **AWS Glue**, siga los pasos para crear un rastreador. Para obtener más información, consulte [Uso de rastreadores de AWS Glue](#schema-crawlers) en esta guía y [Rellenar AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/populate-catalog-methods.html) en la *Guía para desarrolladores de AWS Glue*.

**nota**  
Athena no reconoce los [patrones de exclusión](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude) que especifica en un rastreador de AWS Glue. Por ejemplo, si tiene un bucket de Amazon S3 que contiene tanto `.csv` como `.json` y se excluyen los archivos `.json` desde el rastreador, Athena consulta ambos grupos de archivos. Para evitar esto, coloque los archivos que desea excluir en una ubicación diferente.

Después de un rastreo, el rastreador de AWS Glue asigna automáticamente determinados metadatos de tabla para hacerlos compatibles con otras tecnologías externas como Apache Hive, Presto y Spark. Ocasionalmente, el rastreador puede asignar incorrectamente las propiedades de los metadatos. Corrija manualmente las propiedades en AWS Glue antes de consultar la tabla con Athena. Para obtener más información, consulte [Visualización y edición de los detalles de una tabla](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details) en la *Guía para desarrolladores de AWS Glue*.

AWS Glue puede asignar erróneamente metadatos cuando un archivo CSV tiene todos los campos de datos entre comillas, lo que hace que se interprete incorrectamente la propiedad `serializationLib`. Para obtener más información, consulte [Manejo de datos de archivos CSV entre comillas](schema-csv.md#schema-csv-quotes).

# Uso de varios orígenes de datos con un rastreador
<a name="schema-crawlers-data-sources"></a>

Cuando un rastreador de AWS Glue analiza Amazon S3 y detecta varios directorios, utiliza una heurística para determinar dónde se encuentra la raíz de una tabla en la estructura de directorios y qué directorios son particiones de tabla. En algunos casos en que el esquema detectado en dos o más directorios es similar, el rastreador puede tratarlos como si fueran particiones en vez de tablas diferentes. Una forma de ayudar al rastreador a detectar tablas individuales consiste en añadir el directorio raíz de cada tabla como almacén de datos para el rastreador.

Las siguientes particiones en Amazon S3 son un ejemplo:

```
s3://amzn-s3-demo-bucket/folder1/table1/partition1/file.txt
s3://amzn-s3-demo-bucket/folder1/table1/partition2/file.txt
s3://amzn-s3-demo-bucket/folder1/table1/partition3/file.txt
s3://amzn-s3-demo-bucket/folder1/table2/partition4/file.txt
s3://amzn-s3-demo-bucket/folder1/table2/partition5/file.txt
```

Si los esquemas de `table1` y `table2` son similares, y se ha establecido un único origen de datos para `s3://amzn-s3-demo-bucket/folder1/` en AWS Glue, el rastreador puede crear una única tabla con dos columnas de partición: una columna de partición que contenga `table1` y `table2`, y otra columna que contenga de `partition1` a `partition5`.

Para que el rastreador de AWS Glue cree dos tablas diferentes configure el rastreador con dos orígenes de datos, `s3://amzn-s3-demo-bucket/folder1/table1/` y `s3://amzn-s3-demo-bucket/folder1/table2`, tal y como se muestra en el siguiente procedimiento.

**Para agregar otro almacén de datos de S3 a un rastreador existente 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. En el panel de navegación, elija **Crawlers (Rastreadores)**.

1. Elija el enlace a su rastreador y, a continuación, elija **Edit** (Editar). 

1. Para**Step 2: Choose data sources and classifiers** (Paso 2: Elegir orígenes de datos y clasificadores), elija **Edit** (Editar). 

1. En **Orígenes de datos y catálogos**, seleccione **Agregar un origen de datos**.

1. En el cuadro de diálogo **Add data source** (Agregar origen de datos), en **S3 path** (Ruta de S3), elija **Browse** (Examinar). 

1. Elija el bucket que desee actualizar y, a continuación, elija **Choose** (Elegir).

   El origen de datos que ha agregado aparece en la lista **Data sources** (Orígenes de datos).

1. Elija **Siguiente**.

1. En la página **Configurar ajustes de seguridad**, cree o elija un rol de IAM para el rastreador y, a continuación, elija **Siguiente**.

1. Asegúrese de que la ruta de S3 termina en una barra diagonal y, a continuación, seleccione **Add an S3 data source** (Agregar un origen de datos de S3).

1. En la página **Set output and scheduling** (Definir la salida y la programación), en **Output configuration** (Configuración de salida), elija la base de datos de destino.

1. Elija **Siguiente**.

1. En la página **Review and update** (Revisar y actualizar), revise las elecciones que ha realizado. Para editar un paso, seleccione **Edit** (Editar).

1.  Elija **Actualizar**.

# Programar un rastreador para mantener la AWS Glue Data Catalog y Amazon S3 sincronizados
<a name="schema-crawlers-schedule"></a>

AWS GlueLos rastreadores de se pueden configurar para ejecutarse siguiendo una programación o bajo demanda. Para obtener más información, consulte [Programaciones basadas en el tiempo para trabajos y rastreadores](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html) en la *Guía para desarrolladores de AWS Glue*.

Si los datos para una tabla con particiones llegan a una hora establecida, puede configurar un rastreador de AWS Glue para que se ejecute a una hora programada y detecte y actualice las particiones de la tabla. De esta manera, puede eliminar la necesidad de ejecutar un comando `MSCK REPAIR` potencialmente largo y costoso, o ejecutar manualmente un comando `ALTER TABLE ADD PARTITION`. Para obtener más información, consulte [Particiones de tablas](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html#tables-partition) en la *Guía para desarrolladores de AWS Glue*.

# Optimización de las consultas con indexación y filtrado de particiones de AWS Glue
<a name="glue-best-practices-partition-index"></a>

Cuando Athena consulta las tablas divididas, recupera y filtra las particiones de tabla disponibles en el subconjunto relevante para la consulta. A medida que se agregan nuevos datos y particiones, se necesita más tiempo para procesar las particiones y el tiempo de ejecución de consulta puede aumentar. Si tiene una tabla con un gran número de particiones que crece con el tiempo, considere la posibilidad de utilizar indexación y filtrado de particiones de AWS Glue. La indexación de particiones permite a Athena optimizar el procesamiento de particiones y mejorar el rendimiento de las consultas en tablas altamente particionadas. La configuración del filtrado de particiones en las propiedades de una tabla es un proceso de dos pasos:

1. Creación de un índice de particiones en AWS Glue.

1. Habilitación del filtrado de particiones para la tabla.

## Creación de un índice de particiones
<a name="glue-best-practices-partition-index-creating"></a>

A fin de conocer los pasos para crear un índice de particiones en AWS Glue, consulte [Trabajar con índices de partición](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html) en la Guía para desarrolladores de AWS Glue. Para conocer las limitaciones de los índices de particiones en AWS Glue, consulte [Acerca de los índices de particiones](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html#partition-index-1) de esa página.

## Habilitación del filtrado de particiones
<a name="glue-best-practices-partition-filtering-enabling"></a>

A fin de habilitar el filtrado de particiones para la tabla, debe configurar una nueva propiedad de tabla en AWS Glue. Para conocer los pasos sobre cómo configurar las propiedades de la tabla en AWS Glue, consulte la página [Configuración de proyección de particiones](https://docs.aws.amazon.com/athena/latest/ug/partition-projection-setting-up.html). Cuando edita los detalles de la tabla en AWS Glue, agregue el siguiente valor de clave a la sección **Table properties** (Propiedades de la tabla):
+ En **Key** (Clave), agregue `partition_filtering.enabled`.
+ En **Value** (Valor), agregue `true`.

Para desactivar el filtrado de particiones en esta tabla en cualquier momento, configure el valor `partition_filtering.enabled` como `false`.

Después de completar los pasos anteriores, puede volver a la consola de Athena para consultar los datos.

Para obtener más información sobre la creación de índices y filtros de particiones, consulte el artículo [Mejora del rendimiento de consultas de Amazon Athena con índices de particiones de AWS Glue Data Catalog](https://aws.amazon.com/blogs/big-data/improve-amazon-athena-query-performance-using-aws-glue-data-catalog-partition-indexes/) en el *Blog de macrodatos de AWS*.

# Usar la AWS CLI para recrear una base de datos de AWS Glue y sus tablas
<a name="glue-recreate-db-and-tables-cli"></a>

No es posible cambiar el nombre de una base de datos de AWS Glue directamente, pero puede copiar su definición, modificarla y utilizarla para volver a crear la base de datos con un nombre diferente. Del mismo modo, puede copiar las definiciones de las tablas en la base de datos antigua, modificarlas y utilizarlas para volver a crear las tablas en la base de datos nueva.

**nota**  
 Con el método presentado no se copian las particiones de las tablas. 

En el siguiente procedimiento para Windows se supone que la AWS CLI está configurada para la salida JSON. Para cambiar el formato de salida predeterminado en la AWS CLI, ejecute `aws configure`.

**Para copiar una base de datos de AWS Glue mediante la AWS CLI**

1. En el símbolo del sistema, ejecute el siguiente comando de la AWS CLI para recuperar la definición de la base de datos de AWS Glue que desea copiar.

   ```
   aws glue get-database --name database_name
   ```

   Para obtener más información acerca del comando `get-database`, consulte [get-database](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html).

1. Guarde la salida JSON en un archivo con el nombre de la nueva base de datos (por ejemplo, `new_database_name.json`) en su escritorio.

1. Abra el archivo `new_database_name.json` en un editor de texto.

1. Siga los siguientes pasos en el archivo JSON:

   1. Elimina la entrada `{ "Database":` exterior y el corchete de cierre correspondiente `}` al final del archivo.

   1. Cambie la entrada `Name` por el nuevo nombre de la base de datos.

   1. Quite el campo `CatalogId`.

1. Guarde el archivo.

1. En el símbolo del sistema, ejecute el siguiente comando de la AWS CLI para usar el archivo de definición de base de datos modificado a fin de crear la base de datos con el nombre nuevo.

   ```
   aws glue create-database --database-input "file://~/Desktop\new_database_name.json"
   ```

   Para obtener más información acerca del comando `create-database`, consulte [create-database](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-database.html). Para obtener información acerca de cómo cargar los parámetros de la AWS CLI desde un archivo, consulte [Carga de los parámetros de la AWS CLI desde un archivo](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html) en la *Guía del usuario de la AWS Command Line Interface*.

1. Para comprobar que la base de datos nueva se ha creado en AWS Glue, ejecute el siguiente comando:

   ```
   aws glue get-database --name new_database_name
   ```

Ahora está listo para obtener la definición de una tabla que desea copiar en la base de datos nueva, modificar la definición y usar la definición modificada para volver a crear la tabla en la base de datos nueva. Con este procedimiento no se cambia el nombre de la tabla.

**Para copiar una tabla de AWS Glue mediante la AWS CLI**

1. En el símbolo del sistema, ejecute el siguiente comando de la AWS CLI.

   ```
   aws glue get-table --database-name database_name --name table_name
   ```

   Para obtener más información acerca del comando `get-table`, consulte [get-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-table.html).

1. Guarde la salida JSON en un archivo con el nombre de la tabla (por ejemplo, *table\$1name*.json) en el escritorio de Windows.

1. Abra el archivo en un editor de texto.

1. En el archivo JSON, elimine la entrada exterior `{"Table": ` y el corchete de cierre correspondiente `}` al final del archivo.

1. En el archivo JSON, elimine las siguientes entradas y sus valores:
   + `DatabaseName`: esta entrada no es necesaria porque el comando de la CLI `create-table` usa el parámetro `--database-name`.
   + `CreateTime`
   + `UpdateTime`
   + `CreatedBy`
   + `IsRegisteredWithLakeFormation`
   + `CatalogId`
   + `VersionId`

1. Guarde el archivo de definición de la tabla.

1. En el símbolo del sistema, ejecute el siguiente comando de la AWS CLI para volver a crear la tabla en la base de datos nueva:

   ```
   aws glue create-table --database-name new_database_name --table-input "file://~/Desktop\table_name.json"     
   ```

   Para obtener más información acerca del comando `create-table`, consulte [create-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-table.html).

   La tabla aparece ahora en la base de datos nueva en AWS Glue y se puede consultar desde allí.

1. Repita los pasos para copiar cada tabla adicional a la base de datos nueva en AWS Glue.

# Creación de tablas para los trabajos de ETL
<a name="schema-classifier"></a>

Puede utilizar Athena para crear tablas que AWS Glue pueda utilizar para los trabajos de ETL. Los trabajos de AWS Glue realizan operaciones de ETL. Un trabajo de AWS Glue ejecuta un script que extrae datos de las fuentes, los transforma y los carga en los destinos. Para obtener más información, consulte la sección sobre [creación de trabajos en GlueAWS](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html) en la *Guía para desarrolladores de AWS Glue*.

## Creación de tablas en Athena para los trabajos de ETL de AWS Glue
<a name="schema-etl-tables"></a>

Es necesario agregar a las tablas que cree en Athena una propiedad denominada `classification`, que identifica el formato de los datos. Esto permite a AWS Glue utilizar las tablas para trabajos de ETL. Los valores de clasificación pueden ser `avro`, `csv`, `json`, `orc`, `parquet` o `xml`. A continuación, se muestra un ejemplo de instrucción `CREATE TABLE` en Athena:

```
CREATE EXTERNAL TABLE sampleTable (
  column1 INT,
  column2 INT
  ) STORED AS PARQUET
  TBLPROPERTIES (
  'classification'='parquet')
```

Si no se añadió la propiedad de `classification` al crear la tabla, puede hacerse ahora por medio de la consola de AWS Glue.

**Para agregar la propiedad de clasificación con 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 de la consola, elija **Tables** (Tablas).

1. Elija el enlace para la tabla que quiere editar y, a continuación, elija **Actions** (Acciones), **Edit table details** (Editar detalles de la tabla).

1. Desplácese hacia abajo hasta la sección **Table properties** (Propiedades de la tabla).

1. Elija **Agregar**.

1. En **Clave**, escriba **classification**.

1. En **Value** (Valor), especifique un tipo de datos (por ejemplo, **json**).

1. Seleccione **Save**.

   En la sección **Table details** (Detalles de la tabla), el tipo de datos que ha especificado aparecerá en el campo **Classification** (Clasificación) de la tabla.

Para obtener más información, consulte [Uso de tablas](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html) en la *Guía para desarrolladores de AWS Glue*.

## Uso de los trabajos de ETL para optimizar el rendimiento de las consultas
<a name="schema-etl-performance"></a>

AWS GlueLos trabajos de son útiles para transformar los datos a un formato que optimice el rendimiento de las consultas en Athena. Los formatos de datos tienen un gran impacto en el rendimiento y el costo de las consultas en Athena.

AWS Glue es compatible con la escritura en los formatos de datos Parquet y ORC. Se puede utilizar esta característica para transformar los datos y utilizarlos en Athena. Para obtener más información sobre el uso de Parquet y ORC, y otras formas de mejorar el rendimiento en Athena, consulte los [10 mejores consejos para ajustar el rendimiento de Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).

**nota**  
Para reducir la probabilidad de que Athena no pueda leer los tipos de datos `SMALLINT` y `TINYINT` generados por un trabajo de ETL de AWS Glue, convierta `SMALLINT` y `TINYINT` a `INT` cuando crea un trabajo de ETL que convierte los datos en ORC.

## Automatización de trabajos de AWS Glue para ETL
<a name="schema-etl-automate"></a>

Puede configurar los trabajos de ETL de AWS Glue para que se ejecuten automáticamente basándose en desencadenadores. Esta característica es ideal cuando se insertan datos del exterior de AWS en un bucket de Amazon S3, en un formato que es ineficiente para realizar consultas en Athena. Para obtener más información, consulte [Desencadenar trabajos de AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) en la *Guía para desarrolladores de AWS Glue*.

# Trabajar con datos CSV en AWS Glue
<a name="schema-csv"></a>

En esta página, se describe cómo utilizar AWS Glue para crear esquemas a partir de archivos CSV que contienen comillas alrededor de los valores de datos de cada columna o de archivos CSV que incluyen valores de encabezado.

## Manejo de datos de archivos CSV entre comillas
<a name="schema-csv-quotes"></a>

Piense en un archivo CSV que contenga campos de datos entre comillas dobles como en el siguiente ejemplo.

```
"John","Doe","123-555-1231","John said \"hello\""
"Jane","Doe","123-555-9876","Jane said \"hello\""
```

Para ejecutar una consulta en Athena en una tabla creada a partir de un archivo CSV que contiene valores entre comillas, debe modificar las propiedades de la tabla en AWS Glue para utilizar el OpenCSVSerDe. Para obtener más información acerca de SerDe de OpenCSV, consulte [Open CSV SerDe para el procesamiento de CSV](csv-serde.md).

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

1. En el panel de navegación de la consola de AWS Glue, elija **Tables**.

1. Elija el enlace para la tabla que quiere editar y, a continuación, elija **Actions** (Acciones), **Edit table details** (Editar detalles de la tabla).

1. En la página **Editar tabla**, realice los siguientes cambios:
   + En **Serialization lib** (Biblioteca de serialización), ingrese `org.apache.hadoop.hive.serde2.OpenCSVSerde`.
   + Para **Patrones de Serde**, ingrese los siguientes valores para las claves `escapeChar`, `quoteChar` y `separatorChar`: 
     + Para `escapeChar`, ingrese una barra diagonal inversa (**\$1**).
     + Para `quoteChar`, ingrese una comilla doble (**"**).
     + Para `separatorChar`, ingrese una coma (**,**).

1. Seleccione **Guardar**.

Para obtener más información, consulte [Visualización y edición de los detalles de una tabla](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details) en la *Guía para desarrolladores de AWS Glue*.

También se pueden actualizar las propiedades de la tabla AWS Glue mediante programación. Puede utilizar la operación de la API [UpdateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html) de AWS Glue o el comando de AWS CLI [update-table](https://docs.aws.amazon.com/cli/latest/reference/glue/update-table.html) para modificar el bloque `SerDeInfo` en la definición de tabla, como en el siguiente ejemplo JSON.

```
"SerDeInfo": {
   "name": "",
   "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
   "parameters": {
      "separatorChar": ","
      "quoteChar": "\""
      "escapeChar": "\\"
      }
},
```

## Manejo de archivos CSV con encabezados
<a name="schema-csv-headers"></a>

Cuando define una tabla en Athena con una instrucción `CREATE TABLE`, puede utilizar la propiedad de tabla `skip.header.line.count` para ignorar los encabezados en los datos CSV, como en el siguiente ejemplo.

```
...
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/csvdata_folder/';
TBLPROPERTIES ("skip.header.line.count"="1")
```

También puede eliminar los encabezados de CSV de antemano para que la información de encabezado no se incluya en los resultados de la consulta de Athena. Una forma de hacerlo es utilizar trabajos de AWS Glue, que se encargan de las tareas de extracción, transformación y carga (ETL). Puede escribir scripts en AWS Glue en un lenguaje que es una extensión del dialecto PySpark Python. Para obtener más información, consulte la sección sobre [creación de trabajos en GlueAWS](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html) en la *Guía para desarrolladores de AWS Glue*.

En el siguiente ejemplo se muestra una función de un script de AWS Glue que escribe un marco dinámico utilizando `from_options` y establece la opción de formato `writeHeader` como "false", lo que elimina la información de encabezado:

```
glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://amzn-s3-demo-bucket/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")
```

# Uso de datos geoespaciales en AWS Glue
<a name="schema-geospatial"></a>

AWS Glue no admite de forma nativa Well-known Text (WKT), Well-Known Binary (WKB) u otros tipos de datos PostGIS. El clasificador AWS Glue analiza los datos geoespaciales y los clasifica utilizando los tipos de datos admitidos para el formato, como `varchar` para CSV. Al igual que ocurre con otras tablas de AWS Glue, es posible que tenga que actualizar las propiedades de las tablas creadas a partir de datos geoespaciales para permitir a Athena analizar estos tipos de datos tal y como están. Para obtener más información, consulte [Utilice un rastreador para agregar una tabla](schema-crawlers.md) y [Trabajar con datos CSV en AWS Glue](schema-csv.md). Es posible que Athena no pueda analizar algunos tipos de datos geoespaciales en las tablas de AWS Glue tal y como están. Para obtener más información acerca de cómo trabajar con datos geoespaciales en Athena, consulte [Consulta de datos geoespaciales](querying-geospatial-data.md).

# 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())
```

# Uso de Amazon DataZone en Athena
<a name="datazone-using"></a>

Puede utilizar [Amazon DataZone](https://aws.amazon.com/datazone) para compartir, buscar y descubrir datos a escala más allá de los límites de la organización. DataZone simplifica su experiencia en servicios de análisis de AWS como Athena, AWS Glue y AWS Lake Formation. Por ejemplo, si tiene petabytes de datos en diferentes orígenes de datos, puede utilizar Amazon DataZone para crear agrupaciones de personas, datos y herramientas basadas en casos de uso empresarial. Para obtener más información, consulte [¿Qué es Amazon DataZone?](https://docs.aws.amazon.com/datazone/latest/userguide/what-is-datazone.html)

En Athena, puede utilizar el editor de consultas para acceder a los entornos de DataZone y consultarlos. Un entorno DataZone especifica una combinación de proyecto y dominio de DataZone. Cuando utiliza un entorno DataZone desde la consola de Athena, asume el rol de IAM del entorno DataZone y solo ve las bases de datos y las tablas que pertenecen a ese entorno. Los permisos vienen determinados por los roles que especifique en DataZone.

En Athena, puede usar el selector de **entorno DataZone** en la página del editor de consultas para elegir un entorno DataZone.

**Para abrir un entorno DataZone en Athena**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. En la parte superior derecha de la consola de Athena, junto a **Workgroup**, seleccione **Entorno DataZone**.
**nota**  
La opción **DataZone enviroment** solo está presente cuando tiene uno o más dominios disponibles en DataZone.   
![\[Seleccione DataZone environment.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/datazone-using-1.png)

1. Utilice el selector de **DataZone environment** para elegir un entorno DataZone.  
![\[Seleccione un entorno DataZone.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/datazone-using-2.png)

1. En el cuadro de diálogo **Cambiar al entorno de DataZone**, compruebe que el entorno es el que desea y, a continuación, seleccione **Cambiar al entorno de DataZone**.  
![\[Compruebe el cambio a un entorno DataZone.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/datazone-using-3.png)

Para obtener más información sobre cómo empezar a utilizar DataZone y Athena, consulte el tutorial [Introducción](https://docs.aws.amazon.com/datazone/latest/userguide/getting-started.html) en *Guía del usuario de Amazon DataZone*.

# Uso de un metastore de Hive externo
<a name="connect-to-data-source-hive"></a>

Puede utilizar el conector de datos de Amazon Athena para metaalmacén externo de Hive para consultar conjuntos de datos en Amazon S3 que utilicen un metaalmacén de Apache Hive. No es necesaria la migración de los metadatos a AWS Glue Data Catalog. En la consola de administración de Athena, configure una función de Lambda para comunicarse con el metaalmacén de Hive en su VPC privada y, a continuación, conéctela al metaalmacén. La conexión desde Lambda a su metaalmacén de Hive está asegurada por un canal de Amazon VPC privado y no utiliza Internet público. Puede proporcionar su propio código de función de Lambda, o puede usar la implementación predeterminada del conector de datos de Athena para metaalmacén externo de Hive.

**Topics**
+ [Información general de las características](#connect-to-a-data-source-hive-features)
+ [Flujo de trabajo](#connect-to-data-source-hive-workflow)
+ [Consideraciones y limitaciones](#connect-to-a-data-source-hive-considerations)
+ [Conexión de Athena a un metastore de Apache Hive](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md)
+ [Uso del AWS Serverless Application Repository para implementar un conector de origen de datos de Hive](connect-data-source-sar-hive.md)
+ [Conexión de Athena a un metastore de Hive mediante un rol de ejecución de IAM existente](connect-data-source-hive-existing-iam-role.md)
+ [Configuración de Athena para utilizar un conector de almacén de metadatos de Hive implementado](connect-data-source-hive-existing-lambda.md)
+ [Omisión del nombre del catálogo en consultas de metastores externos de Hive](datastores-hive-default-catalog.md)
+ [Trabajo con vistas de Hive](hive-views.md)
+ [Uso de la AWS CLI con metastores de Hive](datastores-hive-cli.md)
+ [Modificación del conector del metastore externo de Hive de Athena](datastores-hive-reference-implementation.md)

## Información general de las características
<a name="connect-to-a-data-source-hive-features"></a>

Con el conector de datos de Athena para metaalmacén externo de Hive, puede realizar las siguientes tareas:
+ Utilice la consola de Athena para registrar catálogos personalizados y ejecutar consultas con ellos.
+ Defina funciones de Lambda para diferentes metaalmacenes externos de Hive y únalas en consultas de Athena.
+ Utilice el AWS Glue Data Catalog y sus metaalmacenes externos de Hive en la misma consulta de Athena.
+ Especifique un catálogo en el contexto de ejecución de la consulta como el catálogo predeterminado actual. Esto elimina el requisito de prefijo de nombres de catálogo a nombres de base de datos en las consultas. En lugar de usar la sintaxis `catalog.database.table`, puede usar `database.table`.
+ Utilice una variedad de herramientas para ejecutar consultas que hagan referencia a metaalmacenes externos de Hive. Puede utilizar la consola de Athena, la AWS CLI, el SDK de AWS, las API de Athena y los controladores JDBC y ODBC de Athena actualizados. Los controladores actualizados son compatibles con catálogos personalizados.

### Compatibilidad con API
<a name="connect-to-a-data-source-hive-features-api"></a>

Athena Data Connector para metaalmacenes externos de Hive incluye soporte para operaciones de API de registro de catálogos y operaciones de API de metadatos.
+ **Registro de catálogos**: registre catálogos personalizados para metaalmacenes externos de Hive y [orígenes de datos federados](federated-queries.md). 
+ **Metadatos**: utilice las API de metadatos para proporcionar información de bases de datos y tablas para AWS Glue y cualquier catálogo que registre con Athena.
+ **Cliente Athena JAVA SDK**: utilice las API de registro de catálogos, las API de metadatos y la compatibilidad con catálogos de la operación `StartQueryExecution` en el cliente Athena Java SDK actualizado.

### Implementación de referencia
<a name="connect-to-a-data-source-hive-features-reference-implementation"></a>

Athena proporciona una implementación de referencia para la función de Lambda que se conecta a metaalmacenes externos de Hive. La implementación de referencia se proporciona en GitHub como un proyecto de código abierto en el [almacén de metadatos de Athena Hive](https://github.com/awslabs/aws-athena-hive-metastore).

La implementación de referencia está disponible como las dos siguientes aplicaciones de AWS SAM en el AWS Serverless Application Repository (SAR). Puede utilizar cualquiera de estas aplicaciones en el SAR para crear sus propias funciones de Lambda.
+ `AthenaHiveMetastoreFunction`: archivo `.jar` de la función de Lambda Uber. Un “uber” JAR (también conocido como fat JAR o JAR con dependencias) es un archivo `.jar` que contiene un programa Java y sus dependencias en un solo archivo. 
+ `AthenaHiveMetastoreFunctionWithLayer`: capa de Lambda y archivo `.jar` de función delgada de Lambda.

## Flujo de trabajo
<a name="connect-to-data-source-hive-workflow"></a>

En el siguiente diagrama, se muestra cómo interactúa Athena con su metaalmacén externo de Hive.

![\[Cómo interactúa Athena con su metaalmacén externo de Hive.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connect-to-data-source-hive-workflow.png)


En este flujo de trabajo, el metaalmacén de Hive conectado a la base de datos está dentro de su VPC. Utilice Hive Server2 para administrar su metaalmacén de Hive mediante la CLI de Hive.

El flujo de trabajo para utilizar metaalmacenes externos de Hive de Athena incluye los siguientes pasos.

1. Cree una función de Lambda que conecte Athena al metaalmacén de Hive que está dentro de su VPC.

1. Usted registra un nombre de catálogo único para su metaalmacén de Hive y un nombre de función correspondiente en su cuenta.

1. Cuando ejecuta una consulta DML o DDL de Athena que utiliza el nombre del catálogo, el motor de consulta de Athena llama al nombre de la función de Lambda que asoció con el nombre del catálogo.

1. Con AWS PrivateLink, la función de Lambda se comunica con el metaalmacén externo de Hive en su VPC y recibe respuestas a solicitudes de metadatos. Athena utiliza los metadatos del metaalmacén externo de Hive al igual que usa los metadatos del predeterminado AWS Glue Data Catalog.

## Consideraciones y limitaciones
<a name="connect-to-a-data-source-hive-considerations"></a>

Cuando utilice el conector de datos de Athena para metaalmacén externo de Hive, tenga en cuenta los siguientes puntos:
+ Puede utilizar CTAS para crear una tabla en un metaalmacén externo de Hive.
+ Puede utilizar INSERT INTO para insertar datos en un metaalmacén externo de Hive.
+ El soporte de DDL para el metaalmacén externo de Hive está limitado a las siguientes instrucciones.
  + ALTER DATABASE SET DBPROPERTIES
  + ALTER TABLE ADD COLUMNS
  + ALTER TABLE ADD PARTITION
  + ALTER TABLE DROP PARTITION
  + ALTER TABLE RENAME PARTITION
  + ALTER TABLE REPLACE COLUMNS
  + ALTER TABLE SET LOCATION
  + ALTER TABLE SET TBLPROPERTIES
  + CREATE DATABASE
  + CREATE TABLE
  + CREATE TABLE AS
  + DESCRIBE TABLE
  + DROP DATABASE
  + DROP TABLE
  + SHOW COLUMNS
  + SHOW CREATE TABLE
  + SHOW PARTITIONS
  + MOSTRAR ESQUEMAS
  + SHOW TABLES
  + SHOW TBLPROPERTIES
+ El número máximo de catálogos registrados que puede tener es de 1000.
+ No se admite la autenticación Kerberos para el metaalmacén de Hive.
+ Para utilizar el controlador JDBC con un metaalmacén externo de Hive o las [consultas federadas](federated-queries.md), incluya `MetadataRetrievalMethod=ProxyAPI` en la 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).
+ Las columnas ocultas de Hive `$path`, `$bucket`, `$file_size`, `$file_modified_time`, `$partition` y `$row_id` no se pueden utilizar para un filtrado de control de acceso detallado. 
+ Las tablas ocultas del sistema de Hive como `example_table$partitions` o `example_table$properties` no son compatibles con el control de acceso detallado.

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

Los conectores de datos prediseñados y personalizados pueden requerir acceso a los siguientes recursos para funcionar correctamente. Compruebe la información del conector que utiliza para asegurarse de que ha configurado correctamente la VPC. Para obtener información sobre los permisos de IAM necesarios para ejecutar consultas y crear un conector de origen de datos en Athena, consulte [Permiso de acceso al conector de datos de Athena para el metastore externo de Hive](hive-metastore-iam-access.md) y [Permitir a la función de Lambda el acceso a los almacenes de metadatos externos de Hive](hive-metastore-iam-access-lambda.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 desbordamiento en Amazon S3. Se requiere conectividad y permisos para esta ubicación de Amazon S3. Para obtener más información, consulte [Ubicación de desbordamiento en Simple Storage Service (Amazon S3)](#connect-to-data-source-hive-spill-location) más adelante en este tema.
+ **Athena**: se requiere acceso para verificar el estado de la consulta y evitar el sobreescaneo.
+ **AWS Glue**: se requiere acceso si el conector utiliza AWS Glue para metadatos complementarios o principales.
+ **AWS Key Management Service**
+ **Políticas**: el metaalmacén de Hive, la Athena Query Federation y las UDF requieren políticas además de [AWSPolítica administrada de : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy). Para obtener más información, consulte [Identity and Access Management en Athena](security-iam-athena.md).

### Ubicación de desbordamiento en Simple Storage Service (Amazon S3)
<a name="connect-to-data-source-hive-spill-location"></a>

Debido al [límite](https://docs.aws.amazon.com/lambda/latest/dg/limits.html) en los tamaños de respuesta de la función de Lambda, las respuestas mayores que el umbral se desbordan en una ubicación de Amazon S3 que especifique al crear la función de Lambda. Athena lee estas respuestas de Amazon S3 directamente. 

**nota**  
Athena no elimina los archivos de respuesta en Amazon S3. Se recomienda configurar una política de retención para eliminar automáticamente los archivos de respuesta. 

# Conexión de Athena a un metastore de Apache Hive
<a name="connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore"></a>

Para conectar Athena al metaalmacén de Apache Hive, debe crear y configurar una función de Lambda. Para una implementación básica, puede realizar todos los pasos necesarios comenzando desde la consola de administración de Athena.

**nota**  
El siguiente procedimiento requiere tener permiso para crear un rol de IAM personalizado para la función de Lambda. Si no tiene permiso para crear un rol personalizado, puede utilizar la [implementación de referencia](connect-to-data-source-hive.md#connect-to-a-data-source-hive-features-reference-implementation) de Athena para crear una función de Lambda por separado y, a continuación, utilizar la consola AWS Lambda para elegir un rol de IAM existente para la función. Para obtener más información, consulte [Conexión de Athena a un metastore de Hive mediante un rol de ejecución de IAM existente](connect-data-source-hive-existing-iam-role.md).

**Para conectar Athena a un metaalmacén de Hive**

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 parte superior derecha de la consola, elija **Create data source** (Crear origen de datos).

1. En la página **Choose data sources** (Elegir orígenes de datos), en **Data sources** (Orígenes de datos), elija **S3 - Apache Hive metastore** (S3: metastore de Apache Hive).

1. Elija **Siguiente**.

1. En la sección **Detalles de origen de datos**, en **Nombre de origen de datos**, ingrese el nombre que quiera 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. En **Función de Lambda**, elija **Crear una función de Lambda** y, luego, elija **Crear una nueva función de Lambda en AWS Lambda**.

   La página **AthenaHiveMetastoreFunction** se abre en la consola de AWS Lambda. La página incluye información detallada sobre el conector.  
![\[La página AthenaHiveMetastoreFunction en la consola de AWS Lambda.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connect-to-data-source-hive-4.png)

1. En **Configuración de aplicación**, ingrese los parámetros de la función de Lambda.
   + **LambdaFuncName**: Proporcione un nombre para la función. Por ejemplo, **myHiveMetastore**.
   + **SpillLocation**: especifique una ubicación de Amazon S3 en esta cuenta para contener los metadatos de desbordamiento si el tamaño de la respuesta de la función de Lambda supera los 4 MB.
   + **HMSUris**: ingrese el URI de su host del metaalmacén de Hive que utiliza el protocolo Thrift en el puerto 9083. Utilice la sintaxis `thrift://<host_name>:9083`.
   + **LambdaMemory**: especifique un valor comprendido entre 128 y 3008 MB. A la función de Lambda se le asignan ciclos de CPU proporcionales a la cantidad de memoria que configure. El valor predeterminado es 1024.
   + **LambdaTimeout**: especifique el tiempo máximo permitido de ejecución de invocación Lambda en segundos de 1 a 900 (900 segundos es 15 minutos). El valor predeterminado es 300 segundos (5 minutos).
   + **VPCSecurityGroupIds**: ingrese una lista separada por comas de ID de grupo de seguridad de la VPC para el metaalmacén de Hive.
   + **VPCSubnetIds**: ingrese una lista separada por comas de ID de subred de la VPC para el metaalmacén de Hive.

1. Seleccione **I acknowledge that this app creates custom IAM roles** (Confirmo que esta aplicación puede crear roles de IAM personalizados) y, a continuación, elija **Deploy** (Implementar).  
![\[Implementación de la aplicación de función de Lambda desde la consola de AWS Lambda.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connect-to-data-source-hive-4a.png)

   Cuando se completa la implementación, la función aparece en la lista de aplicaciones de Lambda. Ahora que se ha implementado la función del metaalmacén de Hive en la cuenta, puede configurar Athena para que la use.

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 **Función de Lambda**, elija el icono de actualizar situado junto al cuadro de búsqueda de la función de Lambda. Actualizar la lista de funciones disponibles hace que la función recién creada aparezca en la lista.

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 **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 **Data source name** (Nombre de origen de datos) que especificó para referenciar el metastore de Hive en las consultas SQL en Athena. En las consultas SQL, utilice la siguiente sintaxis de ejemplo, reemplazando `hms-catalog-1` por el nombre de catálogo especificado anteriormente.

   ```
   SELECT * FROM hms-catalog-1.CustomerData.customers 
   ```

1. Para obtener información sobre la visualización, edición o eliminación de los orígenes de datos creados, consulte [Administración de orígenes de datos](data-sources-managing.md).

# Uso del AWS Serverless Application Repository para implementar un conector de origen de datos de Hive
<a name="connect-data-source-sar-hive"></a>

Para implementar un conector de origen de datos de Athena para Hive, puede utilizar [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/) en lugar de empezar con la consola de Athena. Utilice AWS Serverless Application Repository para encontrar el conector que quiere utilizar, proporcione los parámetros que requiere el conector y, a continuación, implemente el conector en su cuenta. Luego, después de implementar el conector, utilice la consola de Athena para poner el origen de datos a disposición de Athena.

**Para usar el AWS Serverless Application Repository para implementar un conector de origen de datos para Hive en su cuenta**

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 **Hive**. Los conectores que aparecen incluyen los dos siguientes:
   + **AthenaHiveMetastoreFunction**: archivo `.jar` de la función de Lambda Uber.
   + **AthenaHiveMetastoreFunctionWithLayer**: capa de Lambda y archivo `.jar` de función delgada de Lambda.

    Las dos aplicaciones tienen la misma funcionalidad y difieren solo en su implementación. Puede utilizar cualquiera de ellas para crear una función de Lambda que conecte Athena al metaalmacén de Hive.

1. Elija el nombre del conector que desea usar. En este tutorial se utiliza **AthenaHiveMetastoreFunction**.  
![\[Elija el nombre del conector de origen de datos de Athena para Hive.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connect-data-source-sar-hive-1.png)

1. En **Configuración de aplicación**, ingrese los parámetros de la función de Lambda.
   + **LambdaFuncName**: Proporcione un nombre para la función. Por ejemplo, **myHiveMetastore**.
   + **SpillLocation**: especifique una ubicación de Amazon S3 en esta cuenta para contener los metadatos de desbordamiento si el tamaño de la respuesta de la función de Lambda supera los 4 MB.
   + **HMSUris**: ingrese el URI de su host del metaalmacén de Hive que utiliza el protocolo Thrift en el puerto 9083. Utilice la sintaxis `thrift://<host_name>:9083`.
   + **LambdaMemory**: especifique un valor comprendido entre 128 y 3008 MB. A la función de Lambda se le asignan ciclos de CPU proporcionales a la cantidad de memoria que configure. El valor predeterminado es 1024.
   + **LambdaTimeout**: especifique el tiempo máximo permitido de ejecución de invocación Lambda en segundos de 1 a 900 (900 segundos es 15 minutos). El valor predeterminado es 300 segundos (5 minutos).
   + **VPCSecurityGroupIds**: ingrese una lista separada por comas de ID de grupo de seguridad de la VPC para el metaalmacén de Hive.
   + **VPCSubnetIds**: ingrese una lista separada por comas de ID de subred de la VPC para el metaalmacén de Hive.

1. En la parte inferior derecha de la página **Application details** (Detalles de la aplicación), seleccione **I acknowledge that this app creates custom IAM roles** (Confirmo que esta aplicación puede crear roles de IAM personalizados) y, a continuación, elija **Deploy** (Implementar).

En este punto, puede configurar Athena para que utilice la función de Lambda para conectarse al metaalmacén de Hive. Para ver los pasos, consulte [Configuración de Athena para utilizar un conector de almacén de metadatos de Hive implementado](connect-data-source-hive-existing-lambda.md).

# Conexión de Athena a un metastore de Hive mediante un rol de ejecución de IAM existente
<a name="connect-data-source-hive-existing-iam-role"></a>

Para conectar el metaalmacén externo de Hive a Athena con una función de Lambda que utiliza un rol de IAM existente, puede utilizar la implementación de referencia de Athena del conector Athena para metaalmacén externo de Hive.

Los tres pasos principales son los siguientes:

1. **[Clonar y crear](#connect-data-source-hive-existing-iam-role-clone-and-build-the-lambda-function)**: clone la implementación de referencia de Athena y cree el archivo JAR que contiene el código de función de Lambda.

1. **[Consola AWS Lambda](#connect-data-source-hive-existing-iam-role-aws-lambda-console)**: en la consola AWS Lambda, cree una función de Lambda, asígnele un rol de ejecución de IAM existente y cargue el código de función que generó.

1. **[Consola de Amazon Athena](connect-data-source-hive-existing-lambda.md)**: en la consola de Amazon Athena, cree un nombre de origen de datos que pueda utilizar para hacer referencia al metaalmacén externo de Hive en las consultas de Athena.

Si ya tiene permisos para crear un rol de IAM personalizado, puede utilizar un flujo de trabajo más simple que use la consola de Athena y el AWS Serverless Application Repository para crear y configurar una función de Lambda. Para obtener más información, consulte [Conexión de Athena a un metastore de Apache Hive](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md).

## Requisitos previos
<a name="connect-data-source-hive-existing-iam-role-prerequisites"></a>
+ Git debe estar instalado en el sistema.
+ Debe tener instalado [Apache Maven](https://maven.apache.org/).
+ Tiene un rol de ejecución de IAM que puede asignar a la función de Lambda. Para obtener más información, consulte [Permitir a la función de Lambda el acceso a los almacenes de metadatos externos de Hive](hive-metastore-iam-access-lambda.md).

## Clonación y creación de la función de Lambda
<a name="connect-data-source-hive-existing-iam-role-clone-and-build-the-lambda-function"></a>

El código de función para la implementación de referencia de Athena es un proyecto Maven ubicado en GitHub en [awslabs/aws-athena-hive-metastore](https://github.com/awslabs/aws-athena-hive-metastore). Para obtener información detallada sobre el proyecto, consulte el archivo README correspondiente en GitHub o el tema [Modificación del conector del metastore externo de Hive de Athena](datastores-hive-reference-implementation.md) en esta documentación.

**Cómo clonar y crear el código de la función de Lambda**

1. Ingrese el siguiente comando para clonar la implementación de referencia de Athena:

   ```
   git clone https://github.com/awslabs/aws-athena-hive-metastore
   ```

1. Ejecute el siguiente comando para crear el archivo `.jar` para la función de Lambda:

   ```
   mvn clean install
   ```

   Una vez creado el proyecto correctamente, se crea el siguiente archivo `.jar` en la carpeta de destino del proyecto:

   `hms-lambda-func-1.0-SNAPSHOT-withdep.jar`

   En la siguiente sección, utilizará la consola AWS Lambda para cargar este archivo en la cuenta de Amazon Web Services.

## Creación y configuración de la función de Lambda en la consola de AWS Lambda
<a name="connect-data-source-hive-existing-iam-role-aws-lambda-console"></a>

En esta sección, utilizará la consola de AWS Lambda para crear una función que utilice un rol de ejecución de IAM existente. Después de configurar una VPC para la función, cargue el código de función y configure las variables de entorno para la función.

### Creación de la función de Lambda
<a name="connect-data-source-hive-existing-iam-role-create-the-lambda-function"></a>

En este paso, creará una función en la consola de AWS Lambda que utiliza un rol de IAM existente.

**Cómo crear una función de Lambda que utiliza un rol de IAM existente**

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

1. Seleccione **Funciones** en el panel de navegación.

1. Elija **Crear función**.

1. Elija **Crear desde cero**.

1. En **Nombre de función**, ingrese el nombre de la función de Lambda (por ejemplo, **EHMSBasedLambda**).

1. En **Runtime** (Tiempo de ejecución), elija **Java 8**.

1. En **Permissions** (Permisos), expanda **Change default execution role**(Cambiar rol de ejecución predeterminado).

1. En **Execution role** (Rol de ejecución), elija **Use an existing role** (Usar un rol existente).

1. En **Rol existente**, elija el rol de ejecución de IAM que utilizará la función de Lambda para Athena (en este ejemplo, se utiliza un rol llamado `AthenaLambdaExecutionRole`).

1. Amplíe **Configuración avanzada**.

1. Seleccione **Enable Network** (Habilitar red).

1. En **VPC**, elija la VPC a la que tendrá acceso la función.

1. En **Subnets** (Subredes), elija las subredes de la VPC que utilizará Lambda.

1. En **Security groups** (Grupos de seguridad), elija los grupos de seguridad de VPC que utilizará Lambda.

1. Seleccione **Creación de función**. La consola de AWS Lambda abre la página de configuración de la función y comienza a crear la función.

### Cómo cargar el código y configurar la función de Lambda
<a name="connect-data-source-hive-existing-iam-role-upload-and-configure"></a>

Cuando la consola le informe de que se ha creado la función correctamente, estará listo para cargar el código de función y configurar sus variables de entorno.

**Cómo cargar el código de la función de Lambda y configurar sus variables de entorno**

1. En la consola de Lambda, asegúrese de estar en la pestaña **Code** (Código) de la función que especificó.

1. En **Code source** (Código fuente), elija **Upload from** (Cargar desde) y, a continuación, **.zip or .jar file** (Archivo .zip o .jar).

1. Cargue el archivo `hms-lambda-func-1.0-SNAPSHOT-withdep.jar` que generó anteriormente.

1. En la página de la función de Lambda, seleccione la pestaña **Configuración**.

1. En el panel de la izquierda, elija **Environment variables** (Variables de entorno).

1. En la sección **Variables de entorno**, elija **Editar**.  
![\[Elija Editar para editar las variables de entorno de la función de Lambda.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-5.png)

1. En la página **Edit environment variables** (Editar variables de entorno), use la opción **Add environment variable** (Agregar variable de entorno) para agregar los siguientes valores y claves de variable de entorno:
   + **HMS\$1URIS**: utilice la siguiente sintaxis para ingresar el URI de su host del metaalmacén de Hive que utiliza el protocolo Thrift en el puerto 9083.

     ```
     thrift://<host_name>:9083
     ```
   + **SPILL\$1LOCATION**: especifique una ubicación de Amazon S3 en la cuenta de Amazon Web Services para contener los metadatos de desbordamiento si el tamaño de la respuesta de la función de Lambda supera los 4 MB.  
![\[Especificar valores para las variables de entorno de la función de Lambda.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-6.png)

1. Seleccione **Save**.

En este punto, lo tiene todo listo para configurar Athena para que utilice la función de Lambda para conectarse al metaalmacén de Hive. Para ver los pasos, consulte [Configuración de Athena para utilizar un conector de almacén de metadatos de Hive implementado](connect-data-source-hive-existing-lambda.md).

# Configuración de Athena para utilizar un conector de almacén de metadatos de Hive implementado
<a name="connect-data-source-hive-existing-lambda"></a>

Después de haber implementado un conector de origen de datos de Lambda como `AthenaHiveMetastoreFunction` en su cuenta, puede configurar Athena para utilizarlo. Para ello, cree un nombre de origen de datos que haga referencia al metaalmacén externo de Hive para utilizarlo en consultas de Athena.

**Cómo conectar Athena al metaalmacén de Hive mediante una función de Lambda existente**

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 **Crear origen de datos**.

1. En la página **Choose data sources** (Elegir orígenes de datos), en **Data sources** (Orígenes de datos), elija **S3 - Apache Hive metastore** (S3: metastore de Apache Hive).

1. Elija **Siguiente**.

1. En la sección **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, `MyHiveMetastore`). 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 **Data source name** (Nombre de origen de datos) que especificó para referenciar el metastore de Hive en las consultas SQL en Athena.

   En las consultas SQL, utilice la siguiente sintaxis de ejemplo, reemplazando `ehms-catalog` por el origen de datos especificado anteriormente.

   ```
   SELECT * FROM ehms-catalog.CustomerData.customers 
   ```

1. Para ver, editar o eliminar los orígenes de datos creados, consulte [Administración de orígenes de datos](data-sources-managing.md).

# Omisión del nombre del catálogo en consultas de metastores externos de Hive
<a name="datastores-hive-default-catalog"></a>

Cuando ejecuta consultas DML y DDL en metaalmacenes externos de Hive, puede simplificar la sintaxis de la consulta omitiendo el nombre del catálogo si ese nombre está seleccionado en el editor de consultas. Se aplican determinadas restricciones a esta funcionalidad.

## Instrucciones DML
<a name="datastores-hive-default-catalog-dml-statements"></a>

**Para ejecutar consultas con catálogos registrados**

1. Puede colocar el nombre del origen de datos antes de la base de datos mediante la sintaxis `[[data_source_name].database_name].table_name`, como en el ejemplo siguiente.

   ```
   select * from  "hms-catalog-1".hms_tpch.customer limit 10;
   ```

1. Cuando el origen de datos que desea utilizar ya está seleccionado en el editor de consultas, puede omitir el nombre de la consulta, como en el ejemplo siguiente.

   ```
   select * from hms_tpch.customer limit 10:
   ```  
![\[Una consulta DML que utiliza un origen de datos predeterminado.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/datastores-hive-default-catalog-2.png)

1. Cuando utiliza varios orígenes de datos en una consulta, solo puede omitir el nombre del origen de datos predeterminado y debe especificar el nombre completo de cualquier origen de datos no predeterminado. 

   Por ejemplo, supongamos que seleccionó `AwsDataCatalog` como origen de datos predeterminado en el editor de consultas. La instrucción `FROM` del fragmento de consulta siguiente cumple totalmente los dos primeros nombres de origen de datos, pero omite el nombre del tercero porque se encuentra en el catálogo de datos AWS Glue.

   ```
   ...
   FROM ehms01.hms_tpch.customer,
            "hms-catalog-1".hms_tpch.orders,
            hms_tpch.lineitem
   ...
   ```

## Instrucciones DDL
<a name="datastores-hive-default-catalog-ddl-statements"></a>

Las siguientes instrucciones DDL de Athena admiten prefijos de nombre de catálogo. Los prefijos de nombre de catálogo en otras instrucciones DDL provocan errores de sintaxis.

```
SHOW TABLES [IN [catalog_name.]database_name] ['regular_expression']

SHOW TBLPROPERTIES [[catalog_name.]database_name.]table_name [('property_name')]

SHOW COLUMNS IN [[catalog_name.]database_name.]table_name

SHOW PARTITIONS [[catalog_name.]database_name.]table_name

SHOW CREATE TABLE [[catalog_name.][database_name.]table_name

DESCRIBE [EXTENDED | FORMATTED] [[catalog_name.][database_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )]
```

Al igual que con las instrucciones DML, puede omitir los prefijos de origen de datos y base de datos de la consulta cuando el origen de datos y la base de datos están seleccionados en el editor de consultas.

En el ejemplo siguiente, el origen de datos `hms-catalog-1` y la base de datos `hms_tpch` están seleccionados en el editor de consultas. La instrucción `show create table customer` se ejecuta correctamente aunque se omiten el prefijo `hms-catalog-1` y el nombre de la base de datos `hms_tpch` en la consulta.

![\[Una instrucción DDL que utiliza el catálogo predeterminado.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/datastores-hive-default-catalog-4.png)


## Especificación de un origen de datos predeterminado en una cadena de conexión JDBC
<a name="datastores-hive-default-catalog-jdbc"></a>

Cuando utiliza el controlador JDBC de Athena para conectar Athena a un almacén de metadatos externo de Hive, puede utilizar el parámetro `Catalog` para especificar el nombre del origen de datos predeterminado en la cadena de conexión en un editor SQL, como [SQL Workbench](https://www.sql-workbench.eu/index.html).

**nota**  
Para descargar los controladores JDBC de Athena más recientes, consulte [Uso de Athena con el controlador JDBC](https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html).

La siguiente cadena de conexión especifica el origen de datos predeterminado *hms-catalog-name*.

```
    jdbc:awsathena://AwsRegion=us-east-1;S3OutputLocation=s3://amzn-s3-demo-bucket/lambda/results/;Workgroup=AmazonAthenaPreviewFunctionality;Catalog=hms-catalog-name;
```

En la imagen siguiente se muestra un ejemplo de URL de conexión JDBC según se ha configurado en SQL Workbench.

![\[Configuración de una URL de conexión JDBC en SQL Workbench.\]](http://docs.aws.amazon.com/es_es/athena/latest/ug/images/datastores-hive-default-catalog-jdbc-1.jpg)


# Trabajo con vistas de Hive
<a name="hive-views"></a>

Puede utilizar Athena para consultar las vistas existentes en los almacenes de metadatos de Apache Hive externos. Athena traduce las vistas sobre la marcha en tiempo de ejecución sin cambiar la vista original ni almacenar la traducción.

Suponga, por ejemplo, que tiene una vista de Hive como la siguiente que utiliza una sintaxis no admitida en Athena como `LATERAL VIEW explode()`:

```
CREATE VIEW team_view AS 
SELECT team, score 
FROM matches 
LATERAL VIEW explode(scores) m AS score
```

Athena traduce la cadena de consulta de vista de Hive en una instrucción como la siguiente que Athena puede ejecutar:

```
SELECT team, score
FROM matches
CROSS JOIN UNNEST(scores) AS m (score)
```

Para obtener información sobre cómo conectar un almacén de metadatos de Hive externo a Athena, consulte [Uso de un metastore de Hive externo](connect-to-data-source-hive.md).

## Consideraciones y limitaciones
<a name="hive-views-considerations-and-limitations"></a>

Cuando consulte las vistas de Hive desde Athena, tenga en cuenta los siguientes puntos:
+ Athena no admite la creación de vistas de Hive. Puede crear vistas de Hive en su almacén de metadatos de Hive externo, que luego puede consultar desde Athena.
+ Athena no admite las UDF personalizadas para las vistas de Hive.
+ Debido a un problema conocido en la consola de Athena, las vistas de Hive aparecen debajo de la lista de tablas en lugar de la lista de vistas.
+ Aunque el proceso de traducción es automático, algunas funciones de Hive no son compatibles con las vistas de Hive ni requieren un manejo especial. Para más información, consulte la siguiente sección.

## Limitaciones de compatibilidad de las funciones de Hive
<a name="hive-views-function-limitations"></a>

En esta sección, se destacan las funciones de Hive que Athena no admite para las vistas de Hive o que requieren un tratamiento especial. Actualmente, dado que Athena admite principalmente funciones de Hive 2.2.0, las funciones que están disponibles solo en versiones superiores (como Hive 4.0.0) no están disponibles. Para obtener una lista completa de las funciones de Hive, consulte el [UDF manual del lenguaje Hive](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf).

### Funciones de agregación
<a name="hive-views-aggregate-functions"></a>

#### Funciones de agregación que requieren un manejo especial
<a name="hive-views-aggregate-functions-special-handling"></a>

La siguiente función de agregación para las vistas de Hive requiere un manejo especial.
+ **Avg**: en lugar de `avg(INT i)`, utilice `avg(CAST(i AS DOUBLE))`.

#### Funciones de agregación no admitidas
<a name="hive-views-aggregate-functions-not-supported"></a>

Las siguientes funciones de agregación de Hive no se admiten en Athena para las vistas de Hive.

```
covar_pop
histogram_numeric
ntile
percentile
percentile_approx
```

Las funciones de regresión como `regr_count`, `regr_r2` y `regr_sxx` no se admiten en las vistas de Athena para Hive.

### Funciones de fecha no admitidas
<a name="hive-views-date-functions-not-supported"></a>

Las siguientes funciones de fecha de Hive no se admiten en Athena para las vistas de Hive.

```
date_format(date/timestamp/string ts, string fmt)
day(string date)
dayofmonth(date)
extract(field FROM source)
hour(string date)
minute(string date)
month(string date)
quarter(date/timestamp/string)
second(string date)
weekofyear(string date)
year(string date)
```

### Funciones de enmascaramiento no admitidas
<a name="hive-views-masking-functions-not-supported"></a>

Las funciones de enmascaramiento de Hive, como `mask()` y `mask_first_n()`, no se admiten en Athena para las vistas de Hive.

### Funciones varias
<a name="hive-views-miscellaneous-functions"></a>

#### Funciones varias que requieren un manejo especial
<a name="hive-views-supported-miscellaneous-functions-special-handling"></a>

Las siguientes funciones varias para las vistas de Hive requieren un manejo especial.
+ **md5**: Athena admite `md5(binary)`, pero no `md5(varchar)`.
+ **Explode**: Athena admite `explode` cuando se utiliza en la siguiente sintaxis:

  ```
  LATERAL VIEW [OUTER] EXPLODE(<argument>)
  ```
+ **Posexplode**: Athena admite `posexplode` cuando se utiliza en la siguiente sintaxis:

  ```
  LATERAL VIEW [OUTER] POSEXPLODE(<argument>)           
  ```

  En la salida `(pos, val)`, Athena trata la columna `pos` como `BIGINT`. Debido a esto, es posible que necesite convertir la columna `pos` en `BIGINT` para evitar una vista obsoleta. En el siguiente ejemplo, se ilustra esta técnica.

  ```
  SELECT CAST(c AS BIGINT) AS c_bigint, d 
  FROM table LATERAL VIEW POSEXPLODE(<argument>) t AS c, d
  ```

#### Funciones varias no admitidas
<a name="hive-views-unsupported-miscellaneous-functions-not-supported"></a>

Las siguientes funciones de Hive no se admiten en Athena para las vistas de Hive.

```
aes_decrypt
aes_encrypt
current_database
current_user
inline
java_method
logged_in_user
reflect
sha/sha1/sha2
stack
version
```

### Operadores
<a name="hive-views-operators"></a>

#### Operadores que requieren un manejo especial
<a name="hive-views-operators-special-handling"></a>

Los siguientes operadores para las vistas de Hive requieren un manejo especial.
+ **Operador mod (%)**: debido a que el tipo `DOUBLE` se convierte implícitamente a `DECIMAL(x,y)`, la siguiente sintaxis puede provocar el mensaje de error: La vista es obsoleta

  ```
  a_double % 1.0 AS column
  ```

  Para solucionar este problema, utilice `CAST`, como en el siguiente ejemplo.

  ```
  CAST(a_double % 1.0 as DOUBLE) AS column
  ```
+ **Operador de división (/)**: en Hive, `int` dividido por `int` produce un `double`. En Athena, la misma operación produce un truncado `int`.

#### Operadores no admitidos
<a name="hive-views-operators-not-supported"></a>

Athena no admite los siguientes operadores para vistas de Hive.

**\$1A**: bit a bit `NOT`

**A ^ b**: bit a bit `XOR`

**A & b**: bit a bit `AND`

**A \$1 b**: bit a bit `OR`

**A <=> b**: devuelve el mismo resultado que los operadores iguales a (`=`) para operandos no nulos. Devuelve `TRUE` si ambos son `NULL`, `FALSE` si uno de ellos es `NULL`.

### Funciones de cadena
<a name="hive-views-string-functions"></a>

#### Funciones de cadena que requieren un manejo especial
<a name="hive-views-string-functions-special-handling"></a>

Las siguientes funciones de cadena de Hive para las vistas de Hive requieren un manejo especial.
+ **chr (bigint\$1double a)**: Hive permite argumentos negativos; Athena no lo hace.
+ **instr(string str, string substr)**: debido a que la asignación de Athena para la función `instr` devuelve `BIGINT` en lugar de `INT`, utilice la siguiente sintaxis:

  ```
  CAST(instr(string str, string substr) as INT)         
  ```

  Sin este paso, la vista se considerará obsoleta.
+ **length(string a)**: debido a que la asignación de Athena para la función `length` devuelve `BIGINT` en lugar de `INT`, utilice la siguiente sintaxis para que no se considere la vista obsoleta:

  ```
  CAST(length(string str) as INT)
  ```

#### Funciones de cadena no admitidas
<a name="hive-views-string-functions-not-supported"></a>

Las siguientes funciones de cadena de Hive no se admiten en Athena para las vistas de Hive.

```
ascii(string str)
character_length(string str)
decode(binary bin, string charset)
encode(string src, string charset)
elt(N int,str1 string,str2 string,str3 string,...)
field(val T,val1 T,val2 T,val3 T,...)
find_in_set(string str, string strList)
initcap(string A)
levenshtein(string A, string B)
locate(string substr, string str[, int pos])
octet_length(string str)
parse_url(string urlString, string partToExtract [, string keyToExtract])
printf(String format, Obj... args)
quote(String text)
regexp_extract(string subject, string pattern, int index)
repeat(string str, int n)
sentences(string str, string lang, string locale)
soundex(string A)
space(int n)
str_to_map(text[, delimiter1, delimiter2])
substring_index(string A, string delim, int count)
```

### Funciones de XPath no admitidas
<a name="hive-views-xpath-functions-not-supported"></a>

Las funciones XPath de Hive, como `xpath`, `xpath_short` y `xpath_int` no se admiten en Athena para las vistas de Hive.

## Solución de problemas
<a name="hive-views-troubleshooting"></a>

Cuando utilice las vistas de Hive en Athena, es posible que se encuentre con los siguientes problemas:
+ **La vista *<view name>* está obsoleta**: este mensaje suele indicar una discordancia de tipo entre la vista en Hive y Athena. Si la misma función en el [Hive LanguageManual UDF](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf) y la documentación de las [funciones y operadores Presto](https://prestodb.io/docs/current/functions.html) tiene firmas diferentes, pruebe convertir el tipo de datos que no coincida.
+ **Función no registrada**: Athena no admite la función actualmente. Para obtener más información, consulte los datos mencionados anteriormente en este documento.

# Uso de la AWS CLI con metastores de Hive
<a name="datastores-hive-cli"></a>

Puede utilizar comandos de la CLI de `aws athena` para administrar los catálogos de datos de metaalmacén de Hive que utilice con Athena. Después de definir uno o más catálogos para utilizarlos con Athena, puede hacer referencia a esos catálogos en los comandos DDL y DML de `aws athena`.

## Uso de la AWS CLI para administrar catálogos de almacenes de metadatos de Hive
<a name="datastores-hive-cli-manage-hive-catalogs"></a>

### Registro de un catálogo: create-data-catalog
<a name="datastores-hive-cli-registering-a-catalog"></a>

Para registrar un catálogo de datos, utilice el comando `create-data-catalog`. Utilice el parámetro `name` para especificar el nombre que desea utilizar para el catálogo. Pase el ARN de la función de Lambda a la opción `metadata-function` del argumento `parameters`. Para crear etiquetas para el nuevo catálogo, utilice el parámetro `tags` con uno o más pares de argumentos `Key=key,Value=value` separados por espacios.

En el siguiente ejemplo se registra el catálogo de metaalmacén de Hive denominado `hms-catalog-1`. El comando se ha formateado para fines de legibilidad.

```
$ aws athena create-data-catalog 
 --name "hms-catalog-1" 
 --type "HIVE"
 --description "Hive Catalog 1"
 --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3,sdk-version=1.0" 
 --tags Key=MyKey,Value=MyValue
 --region us-east-1
```

### Visualización de los detalles del catálogo: get-data-catalog
<a name="datastores-hive-cli-showing-details-of-a-catalog"></a>

Para mostrar los detalles de un catálogo, pase el nombre del catálogo al comando `get-data-catalog`, como en el ejemplo siguiente.

```
$ aws athena get-data-catalog --name "hms-catalog-1" --region us-east-1
```

El siguiente resultado de ejemplo está en formato JSON.

```
{
    "DataCatalog": {
        "Name": "hms-catalog-1",
        "Description": "Hive Catalog 1",
        "Type": "HIVE",
        "Parameters": {
            "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3",
            "sdk-version": "1.0"
        }
    }
}
```

### Enumeración de los catálogos registrados: list-data-catalogs
<a name="datastores-hive-cli-listing-registered-catalogs"></a>

Para enumerar los catálogos registrados, utilice el comando `list-data-catalogs` y, opcionalmente, especifique una región, como en el ejemplo siguiente. Los catálogos enumerados siempre incluyen AWS Glue.

```
$ aws athena list-data-catalogs --region us-east-1
```

El siguiente resultado de ejemplo está en formato JSON.

```
{
    "DataCatalogs": [
        {
            "CatalogName": "AwsDataCatalog",
            "Type": "GLUE"
        },
        {
            "CatalogName": "hms-catalog-1",
            "Type": "HIVE",
            "Parameters": {
                "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3",
                "sdk-version": "1.0"
            }
        }
    ]
}
```

### Actualización de un catálogo: update-data-catalog
<a name="datastores-hive-cli-updating-a-catalog"></a>

Para actualizar un catálogo de datos, utilice el comando `update-data-catalog`, como en el ejemplo siguiente. El comando se ha formateado para fines de legibilidad.

```
$ aws athena update-data-catalog 
 --name "hms-catalog-1" 
 --type "HIVE"
 --description "My New Hive Catalog Description" 
 --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new,sdk-version=1.0" 
 --region us-east-1
```

### Eliminación de un catálogo: delete-data-catalog
<a name="datastores-hive-cli-deleting-a-catalog"></a>

Para eliminar un catálogo de datos, utilice el comando `delete-data-catalog`, como en el ejemplo siguiente.

```
$ aws athena delete-data-catalog --name "hms-catalog-1" --region us-east-1
```

### Visualización de los detalles de la base de datos: get-database
<a name="datastores-hive-cli-showing-details-of-a-database"></a>

Para mostrar los detalles de una base de datos, pase el nombre del catálogo y la base de datos al comando `get-database`, como en el ejemplo siguiente.

```
$ aws athena get-database --catalog-name hms-catalog-1 --database-name mydb
```

El siguiente resultado de ejemplo está en formato JSON.

```
{
    "Database": {
        "Name": "mydb",
        "Description": "My database",
        "Parameters": {
            "CreatedBy": "Athena",
            "EXTERNAL": "TRUE"
        }
    }
}
```

### Enumeración de las bases de datos de un catálogo: list-databases
<a name="datastores-hive-cli-listing-databases"></a>

Para enumerar las bases de datos de un catálogo, utilice el comando `list-databases` y, como opción, especifique una región, como en el ejemplo siguiente.

```
$ aws athena list-databases --catalog-name AwsDataCatalog --region us-west-2
```

El siguiente resultado de ejemplo está en formato JSON.

```
{
    "DatabaseList": [
        {
            "Name": "default"
        },
        {
            "Name": "mycrawlerdatabase"
        },
        {
            "Name": "mydatabase"
        },
        {
            "Name": "sampledb",
            "Description": "Sample database",
            "Parameters": {
                "CreatedBy": "Athena",
                "EXTERNAL": "TRUE"
            }
        },
        {
            "Name": "tpch100"
        }
    ]
}
```

### Visualización de los detalles de la tabla: get-table-metadata
<a name="datastores-hive-cli-showing-details-of-a-table"></a>

Para mostrar los metadatos de una tabla, incluidos los nombres de columna y los tipos de datos, pase el nombre del catálogo, la base de datos y el nombre de tabla al comando `get-table-metadata`, como en el ejemplo siguiente.

```
$ aws athena get-table-metadata --catalog-name AwsDataCatalog --database-name mydb --table-name cityuseragent
```

El siguiente resultado de ejemplo está en formato JSON.

```
{
    "TableMetadata": {
        "Name": "cityuseragent",
            "CreateTime": 1586451276.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "city",
                    "Type": "string"
                },
                {
                    "Name": "useragent1",
                    "Type": "string"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "COLUMN_STATS_ACCURATE": "false",
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "last_modified_by": "hadoop",
                "last_modified_time": "1586454879",
                "location": "s3://amzn-s3-demo-bucket/",
                "numFiles": "1",
                "numRows": "-1",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "rawDataSize": "-1",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "totalSize": "61"
            }
        }
}
```

### Visualización de los metadatos de todas las tablas de una base de datos: list-table-metadata
<a name="datastores-hive-cli-showing-all-table-metadata"></a>

Para mostrar los metadatos de todas las tablas de una base de datos, pase el nombre del catálogo y el nombre de la base de datos al comando `list-table-metadata`. El comando `list-table-metadata` es similar al comando `get-table-metadata`, excepto que no se especifica un nombre de tabla. Para limitar el número de resultados, puede utilizar la opción `--max-results`, como en el ejemplo siguiente. 

```
$ aws athena list-table-metadata --catalog-name AwsDataCatalog --database-name sampledb --region us-east-1 --max-results 2
```

El siguiente resultado de ejemplo está en formato JSON.

```
{
    "TableMetadataList": [
        {
            "Name": "cityuseragent",
            "CreateTime": 1586451276.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "city",
                    "Type": "string"
                },
                {
                    "Name": "useragent1",
                    "Type": "string"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "COLUMN_STATS_ACCURATE": "false",
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "last_modified_by": "hadoop",
                "last_modified_time": "1586454879",
                "location": "s3://amzn-s3-demo-bucket/",
                "numFiles": "1",
                "numRows": "-1",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "rawDataSize": "-1",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "totalSize": "61"
            }
        },
        {
            "Name": "clearinghouse_data",
            "CreateTime": 1589255544.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "location",
                    "Type": "string"
                },
                {
                    "Name": "stock_count",
                    "Type": "int"
                },
                {
                    "Name": "quantity_shipped",
                    "Type": "int"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "location": "s3://amzn-s3-demo-bucket/",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "transient_lastDdlTime": "1589255544"
            }
        }
    ],
    "NextToken": "eyJsYXN0RXZhbHVhdGVkS2V5Ijp7IkhBU0hfS0VZIjp7InMiOiJ0Ljk0YWZjYjk1MjJjNTQ1YmU4Y2I5OWE5NTg0MjFjYTYzIn0sIlJBTkdFX0tFWSI6eyJzIjoiY2xlYXJpbmdob3VzZV9kYXRhIn19LCJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE1ODkzNDIwMjIsIm5hbm9zIjo2NTUwMDAwMDB9fQ=="
}
```

## Ejecución de instrucciones DDL y DML
<a name="datastores-hive-cli-running-ddl-and-dml"></a>

Cuando utiliza la AWS CLI para ejecutar instrucciones DDL y DML, puede pasar el nombre del catálogo de metaalmacén de Hive de dos maneras:
+ Directamente en las instrucciones que son compatibles.
+ Al parámetro de `--query-execution-context` `Catalog`.

### Instrucciones DDL
<a name="datastores-hive-cli-ddl-statements"></a>

En el ejemplo siguiente se pasa el nombre del catálogo directamente como parte de la instrucción DDL `show create table`. El comando se ha formateado para fines de legibilidad.

```
$ aws athena start-query-execution 
 --query-string "show create table hms-catalog-1.hms_tpch_partitioned.lineitem" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

La instrucción DDL `show create table` de ejemplo siguiente utiliza el parámetro `Catalog` de `--query-execution-context` para pasar el nombre del catálogo de metaalmacén de Hive `hms-catalog-1`. El comando se ha formateado para fines de legibilidad.

```
$ aws athena start-query-execution 
 --query-string "show create table lineitem" 
 --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

### Instrucciones DML
<a name="datastores-hive-cli-dml-statements"></a>

La siguiente instrucción DML `select` de ejemplo pasa directamente el nombre del catálogo a la consulta. El comando se ha formateado para fines de legibilidad.

```
$ aws athena start-query-execution
 --query-string "select * from hms-catalog-1.hms_tpch_partitioned.customer limit 100" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

La siguiente instrucción DML `select` de ejemplo utiliza el parámetro `Catalog` de `--query-execution-context` para pasar en el nombre del catálogo de metaalmacén de Hive `hms-catalog-1`. El comando se ha formateado para fines de legibilidad.

```
$ aws athena start-query-execution 
 --query-string "select * from customer limit 100" 
 --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

# Modificación del conector del metastore externo de Hive de Athena
<a name="datastores-hive-reference-implementation"></a>

Si tiene requisitos especiales, puede modificar el conector de Athena para el metastore externo de Hive para su propio uso. Athena proporciona una implementación de referencia del conector en GitHub.com en [https://github.com/awslabs/aws-athena-hive-metastore](https://github.com/awslabs/aws-athena-hive-metastore). La mayoría de los casos de uso no requieren que modifique la implementación de referencia. Sin embargo, si es necesario, puede modificar el código fuente y crear los artefactos por su cuenta.

La implementación de referencia es un proyecto de [Apache Maven](https://maven.apache.org/) que tiene los siguientes módulos:
+ `hms-service-api`: contiene las operaciones de la API entre la función de Lambda y los clientes del servicio Athena. Estas operaciones de API se definen en la interfaz `HiveMetaStoreService`. Debido a que este es un contrato de servicio, no debe cambiar nada en este módulo.
+ `hms-lambda-handler`: un conjunto de controladores Lambda predeterminados que procesan todas las llamadas a la API del metaalmacén de Hive. La clase `MetadataHandler` es el distribuidor de todas las llamadas a la API. No es necesario cambiar este paquete.
+ `hms-lambda-func`: una función de Lambda de ejemplo que tiene los siguientes componentes.
  + `HiveMetaStoreLambdaFunc`: una función de Lambda de ejemplo que amplía `MetadataHandler`.
  + `ThriftHiveMetaStoreClient`: un cliente de Thrift que se comunica con el metaalmacén de Hive. Este cliente está escrito para Hive 2.3.0. Si utiliza una versión de Hive distinta, es posible que tenga que actualizar esta clase para asegurarse de que los objetos de respuesta son compatibles.
  + `ThriftHiveMetaStoreClientFactory`: controla el comportamiento de la función de Lambda. Por ejemplo, puede proporcionar su propio conjunto de proveedores de controladores anulando el método `getHandlerProvider()`.
  + `hms.properties`: configura la función de Lambda. La mayoría de los casos solo requieren actualizar las dos propiedades siguientes.
    + `hive.metastore.uris` – el URI del metaalmacén de Hive en el formato `thrift://<host_name>:9083`.
    + `hive.metastore.response.spill.location`: la ubicación de Amazon S3 para almacenar objetos de respuesta cuando los tamaños superan un umbral determinado (por ejemplo, 4 MB). El umbral se define en la propiedad `hive.metastore.response.spill.threshold`. No se recomienda cambiar el valor predeterminado.
**nota**  
Estas dos propiedades se pueden anular con las [variables de entorno de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html) `HMS_URIS` y `SPILL_LOCATION`. Utilice estas variables en lugar de volver a compilar el código fuente de la función de Lambda cuando desee utilizar la función con un metaalmacén de Hive o ubicación de desbordamiento diferente.
+ `hms-lambda-layer`: un proyecto de ensamblaje de Maven que coloca a `hms-service-api`, `hms-lambda-handler` y sus dependencias en un archivo `.zip`. El archivo `.zip` se registra como una capa de Lambda para su uso por múltiples funciones de Lambda.
+ `hms-lambda-rnp`: registra las respuestas de una función de Lambda y, a continuación, las usa para reproducir la respuesta. Puede usar este modelo para simular las respuestas de Lambda a fin de realizar pruebas.

## Cree los artefactos usted mismo
<a name="datastores-hive-reference-implementation-building-the-artifacts-yourself"></a>

Después de modificar el código fuente, puede crear los artefactos por su cuenta y cargarlos en una ubicación de Amazon S3.

Antes de crear los artefactos, actualice las propiedades `hive.metastore.uris` y `hive.metastore.response.spill.location` en el archivo `hms.properties` en el módulo `hms-lambda-func`.

Para construir los artefactos, debe tener instalado Apache Maven y ejecutar el comando `mvn install`. Esto genera el archivo `.zip` de capa en la carpeta de salida denominada `target` en el módulo `hms-lambda-layer` y el archivo `.jar` de la función de Lambda en el módulo `hms-lambd-func`.

# Administración de orígenes de datos
<a name="data-sources-managing"></a>

Puede utilizar la página **Orígenes de datos y catálogos** de la consola de Athena para administrar los orígenes de datos que cree.

**Para ver un origen de datos, realice el siguiente procedimiento:**

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 lista de orígenes de datos, elija el nombre del origen de datos que quiera ver.
**nota**  
Los elementos de la columna **Data source name** (Nombre del origen de datos) corresponden al resultado de la acción de la API [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html) y del comando de la CLI [list-data-catalogs](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/list-data-catalogs.html).

**Para editar un origen de datos, realice el siguiente procedimiento:**

1. En la página **Orígenes de datos y catálogos**, realice una de las siguientes acciones:
   + Seleccione el botón situado junto al nombre del catálogo y, a continuación, elija **Actions** (Acciones), **Edit** (Editar). 
   + Elija el nombre del origen de datos. A continuación, en la página de detalles, elija **Actions** (Acciones), **Edit** (Editar).

1. En la página **Editar**, puede elegir otra función de Lambda para el origen de datos, cambiar la descripción o agregar etiquetas personalizadas. Para obtener más información acerca de las etiquetas, consulte [Etiquetado de recursos de Athena](tags.md).

1. Seleccione **Guardar**.

1. Para editar el origen de datos **AwsDataCatalog**, elija el enlace **AwsDataCatalog** para abrir la página de detalles. A continuación, en la página de detalles, elija el enlace a la consola de AWS Glue, donde podrá editar el catálogo.

**Para compartir un origen de datos**  
Para obtener información sobre cómo compartir orígenes de datos, consulte los enlaces siguientes.
+ Para orígenes de datos basados en Lambda que no sean de Hive, consulte [Habilitación de las consultas federadas entre cuentas](xacct-fed-query-enable.md).
+ Para 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).

**Eliminación de un origen de datos**

1. En la página **Orígenes de datos y catálogos**, realice una de las siguientes acciones:
   + Seleccione el botón situado junto al nombre del catálogo y, a continuación, elija **Actions** (Acciones), **Delete** (Eliminar). 
   + Elija el nombre del origen de datos y, a continuación, en la página de detalles, elija **Actions**, **Delete**
**nota**  
**AwsDataCatalog** es el origen de datos predeterminado de la cuenta y no se puede eliminar.

   Se le advierte que, al eliminar un origen de datos, el catálogo de datos, las tablas y las vistas correspondientes se eliminan del editor de consultas. Las consultas guardadas que utilizaban el origen de datos dejarán de ejecutarse en Athena.

1. Para confirmar la eliminación, escriba el nombre del origen de datos y, a continuación, elija **Delete** (Borrar).