

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Consulta de tablas de Amazon S3 desde Amazon Redshift
<a name="querying-s3Tables"></a>

Amazon Redshift se integra con los buckets de tablas de Amazon S3, lo que le permite acceder a los recursos de las tablas de S3 mediante Amazon Redshift. Tanto si acaba de empezar como si gestiona miles de tablas en su entorno Iceberg, los buckets de tablas simplifican la gestión del lago 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).

En este tema se describe cómo empezar a utilizar tablas de Amazon S3 y Redshift, así como a acceder a los objetos de tablas de S3 mediante Amazon Redshift.

## Requisitos previos
<a name="querying-s3Tables-prerequisites"></a>

Antes de consultar las tablas de S3 desde Amazon Redshift, debe integrar las tablas de S3 con AWS Glue Data Catalog. Para obtener instrucciones, consulte [Integración de tablas de Amazon S3 con AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/glue-federation-s3tables.html).

Una vez que las tablas de S3 se haya integrado con AWS Glue Data Catalog, las entidades principales de IAM con las tablas de S3 y los permisos de IAM de AWS Glue necesarios pueden detectar tablas de S3 a través de AWS Glue Data Catalog.

**nota**  
El método 3 (awsdatacatalog montado automáticamente) tiene requisitos previos adicionales. Para obtener más información, consulte [Método 3: awsdatacatalog montado automáticamente](#querying-s3Tables-method3).

## Consulta de tablas de S3 desde Amazon Redshift
<a name="querying-s3Tables-steps"></a>

Para comenzar las consultas de tablas de S3, siga estos pasos:
+ Paso 1: Crear un rol de IAM para Amazon Redshift
+ Paso 2: Asociar el rol de IAM a su clúster de Amazon Redshift
+ Paso 3: Consulta de tablas de S3 desde Amazon Redshift

### Paso 1: Crear un rol de IAM para Amazon Redshift
<a name="querying-s3Tables-step1"></a>

Su clúster necesita autorización para acceder al catálogo externo de tablas de S3 en AWS Glue. Para proporcionar dicha autorización, Amazon Redshift utiliza un rol de IAM asociado a su clúster. Cree un rol de IAM con los siguientes permisos de política.

**nota**  
En la política y los ejemplos que figuran a continuación, sustituya `us-west-2` con su región de AWS y `111122223333` con su ID de cuenta de AWS.

**Para crear una política:**

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

1. En el panel de navegación, seleccione **Políticas**.

1. Elija **Crear política**.

1. Seleccione la pestaña **JSON**.

1. Pegue el siguiente documento de política JSON:

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "GlueDataCatalogPermissions",
         "Effect": "Allow",
         "Action": [
           "glue:GetCatalog",
           "glue:GetDatabase",
           "glue:GetTable",
           "glue:GetTables",
           "glue:UpdateTable",
           "glue:DeleteTable"
         ],
         "Resource": [
           "arn:aws:glue:us-west-2:111122223333:catalog",
           "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog",
           "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog/*",
           "arn:aws:glue:us-west-2:111122223333:database/s3tablescatalog/*/*",
           "arn:aws:glue:us-west-2:111122223333:table/s3tablescatalog/*/*/*",
           "arn:aws:glue:us-west-2:111122223333:database/*",
           "arn:aws:glue:us-west-2:111122223333:table/*/*"
         ]
       },
       {
         "Sid": "S3TablesDataAccessPermissions",
         "Effect": "Allow",
         "Action": [
           "s3tables:GetTableBucket",
           "s3tables:GetNamespace",
           "s3tables:GetTable",
           "s3tables:GetTableMetadataLocation",
           "s3tables:GetTableData",
           "s3tables:ListTableBuckets",
           "s3tables:CreateTable",
           "s3tables:PutTableData",
           "s3tables:UpdateTableMetadataLocation",
           "s3tables:ListNamespaces",
           "s3tables:ListTables",
           "s3tables:DeleteTable"
         ],
         "Resource": [
           "arn:aws:s3tables:us-west-2:111122223333:bucket/*",
           "arn:aws:s3tables:us-west-2:111122223333:bucket/*/table/*"
         ]
       }
     ]
   }
   ```

1. Elija **Revisar política**.

1. En la página **Revisar política**, introduzca `GlueCatalogS3Tables_Policy` en **Nombre**. Si lo desea, introduzca una descripción. Revise el resumen de la política y, a continuación, elija **Crear política**.

**Para crear un rol de IAM para Amazon Redshift:**

1. Abra la [consola de IAM](https://console.aws.amazon.com/iam/).

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

1. Elija **Creación de rol**.

1. Elija **Servicio de AWS** como entidad de confianza y, a continuación, elija **Redshift** como caso de uso.

1. En **Caso de uso para otros servicios de AWS**, elija **Redshift - Personalizable** y, a continuación, elija **Siguiente**.

1. En la página **Añadir permisos**, asocie la política `GlueCatalogS3Tables_Policy` que creó anteriormente. Elija **Siguiente**.

1. En **Role Name (Nombre de la función)**, escriba un nombre para la función; por ejemplo, `RedshiftS3TablesRole`.

1. Revise la información y seleccione **Crear rol**.

1. Seleccione **Roles** en el panel de navegación. Elija el nombre del nuevo rol para ver el resumen y, a continuación, copie el **ARN del rol** en el portapapeles. Utilizará este ARN al crear esquemas externos para los espacios de nombres de las tablas de S3.

**nota**  
Limite la búsqueda a recursos específicos sustituyendo el comodín por nombres exactos de recursos de Amazon (ARN).

### Paso 2: Asociar el rol de IAM a su clúster de Amazon Redshift
<a name="querying-s3Tables-step2"></a>

Asocie el rol de IAM que ha configurado en el paso 1 a su clúster de Amazon Redshift.

**Uso de la consola de administración de AWS:**

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

1. En el menú de navegación, elija **Clusters** (Clústeres) y elija el clúster que desee actualizar.

1. En **Acciones**, seleccione **Administrar roles de IAM** para mostrar la lista actual de roles de IAM asociados al clúster.

1. En la página **Administrar roles de IAM**, seleccione el rol de IAM disponible que desea agregar y, a continuación, seleccione **Agregar el rol de IAM**.

1. Seleccione **Done (Aceptar)** para guardar los cambios.

**Uso de AWS CLI:**

Ejecute el siguiente comando para asociar un rol de IAM a un clúster o espacio de nombres existente. Reemplace `my-redshift-cluster` o `my-redshift-namespace` por el espacio de nombres o el identificador del clúster y `111122223333` por su ID de cuenta de AWS.

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier my-redshift-cluster \
    --add-iam-roles arn:aws:iam::111122223333:role/RedshiftS3TablesRole

-- for serverless
aws redshift-serverless update-namespace \
    --namespace-name my-redshift-namespace \
    --iam-roles "arn:aws:iam::111122223333:role/RedshiftS3TablesRole"
```

Para obtener más información, consulte [Asociación de roles de IAM a los clústeres](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html) en la *Guía de administración de Amazon Redshift*.

### Paso 3: Consulta de tablas de S3 desde Amazon Redshift
<a name="querying-s3Tables-step3"></a>

Al integrar las tablas de S3 con AWS Glue Data Catalog, el servicio crea una estructura de catálogo federada que asigna los recursos de las tablas de S3 a los objetos del catálogo de AWS Glue:
+ Un bucket de tablas de S3 se convierte en un **catálogo** en AWS Glue Data Catalog.
+ Un espacio de nombres de S3 se convierte en una **base de datos de AWS Glue**.
+ Una tabla de S3 se convierte en un **objeto de tabla de AWS Glue**.

La integración crea la siguiente jerarquía:
+ **Catálogo federado:** `s3tablescatalog` (creado automáticamente)
+ **Catálogos secundarios:** cada bucket de tabla de S3 se convierte en un catálogo secundario en `s3tablescatalog`.
+ **Bases de datos:** cada espacio de nombres de S3 dentro de un bucket de tabla se convierte en una base de datos.
+ **Tablas:** cada tabla de S3 dentro de un espacio de nombres se convierte en una tabla.

Por ejemplo, si tiene un bucket de tabla de S3 denominado `analytics-bucket` con un espacio de nombres `sales` que contiene una tabla `transactions`, la ruta completa en AWS Glue Data Catalog sería: `s3tablescatalog/analytics-bucket/sales/transactions`.

**Crear un recurso compartido**

Antes de utilizar cualquiera de los tres métodos de consulta que se indican a continuación, debe crear un enlace de recurso en AWS Glue Data Catalog. Los enlaces a recursos permiten a Amazon Redshift consultar las bases de datos de tablas de S3 a través del catálogo estándar.

*Uso de la consola de AWS Glue:*

1. 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 **Databases** (Bases de datos).

1. Elija **Crear** y, a continuación, elija el **Enlace del recurso**.

1. En la página **Crear enlace de recursos**, proporcione la siguiente información:
   + **Nombre del enlace del recurso:** introduzca un nombre para el enlace del recurso (por ejemplo, `sales_resource_link`).
   + **Base de datos compartida:** introduzca la ruta de la base de datos de tablas de S3 (por ejemplo, `s3tablescatalog/analytics-bucket/sales`).
   + **Propietario de la base de datos compartida:** introduzca su ID de cuenta de AWS.
   + **SID de catálogo de la base de datos compartida:** introduzca el ID del catálogo en el formato `<account-id>:s3tablescatalog/<bucket-name>`.

1. Seleccione **Crear**.

*Uso de AWS CLI:*

```
aws glue create-database \
  --region us-west-2 \
  --cli-input-json '{
        "CatalogId": "111122223333",
        "DatabaseInput": {
            "Name": "sales_resource_link",
            "TargetDatabase": {
                "CatalogId": "111122223333:s3tablescatalog/analytics-bucket",
                "DatabaseName": "sales"
            }
        }
  }'
```

Este comando crea un enlace de recurso denominado `sales_resource_link` en su catálogo de datos de AWS Glue que apunta a la base de datos de `sales` en el bucket de la tabla de S3 del `analytics-bucket`.

Una vez creados los enlaces a los recursos, Amazon Redshift ofrece tres métodos para consultar las tablas de S3. Elija el método que mejor se adapte a su caso de uso.

**nota**  
Para crear un enlace de recurso en el nivel de la base de datos, el administrador de Redshift debe tener el permiso de `AWS Glue:CreateDatabase` sobre el catálogo predeterminado y la base de datos que se va a crear.

#### Método 1: CREAR UN ESQUEMA EXTERNO
<a name="querying-s3Tables-method1"></a>

Utilice `CREATE EXTERNAL SCHEMA` para crear un esquema externo que haga referencia a la base de datos de la tabla de S3. Este método proporciona un control explícito sobre la denominación y la configuración del esquema.

Para obtener información completa sobre la sintaxis, consulte [CREAR UN ESQUEMA EXTERNO](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) en la *Guía para desarrolladores de bases de datos Amazon Redshift*.

**Ejemplo**

Utilice el nombre de la base de datos y el ID del catálogo del paso 3. Reemplace `111122223333` por su ID de cuenta de AWS.

```
CREATE EXTERNAL SCHEMA s3tables_schema
FROM DATA CATALOG DATABASE 'sales_resource_link'
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole'
REGION 'us-west-2'
CATALOG_ID '111122223333';

SELECT * FROM s3tables_schema.transactions;
```

#### Método 2: CREAR BASE DE DATOS DESDE ARN
<a name="querying-s3Tables-method2"></a>

Utilice `CREATE DATABASE` con la cláusula `FROM ARN` para crear una base de datos federada que haga referencia directa a su enlace de recurso de AWS Glue. Este método asigna automáticamente la base de datos de AWS Glue a una base de datos Redshift.

Para obtener información completa sobre la sintaxis, consulte [CREAR BASE DE DATOS](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) en la Guía para *desarrolladores de bases de datos de Amazon Redshift*.

**Ejemplo**

Reemplace `111122223333` por su ID de cuenta de AWS.

```
CREATE DATABASE s3tables_db
FROM ARN 'arn:aws:glue:us-west-2:111122223333:database/sales_resource_link'
WITH DATA CATALOG SCHEMA analytics_schema
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole';

SELECT * FROM s3tables_db.analytics_schema.transactions;
```

#### Método 3: awsdatacatalog montado automáticamente
<a name="querying-s3Tables-method3"></a>

Amazon Redshift puede montar automáticamente bases de datos de AWS Glue Data Catalog, incluidos los enlaces a recursos de tablas de S3, a través de la base de datos de `awsdatacatalog`. Este método requiere que el acceso federado a Spectrum (FAS) esté habilitado en el clúster.

**Requisitos previos**

Para usar la base de datos de `awsdatacatalog` montada automáticamente, debe habilitar el acceso federado a Spectrum. Esto permite a Amazon Redshift utilizar credenciales de identidad federadas para acceder a AWS Glue Data Catalog y orígenes de datos externos.

Para habilitar el acceso federado a Spectrum:

1. Conéctese a su clúster de Redshift mediante una identidad de IAM con los siguientes permisos:
   + `redshift:GetClusterCredentialsWithIAM` (para clústeres aprovisionados) o `redshift-serverless:GetCredentials` (para versiones sin servidor)
   + `AmazonS3ReadOnlyAccess`
   + `AWSGlueConsoleFullAccess`
   + Permisos de tablas S3 (según se define en el paso 1)

1. Cuando se conecta con una identidad de IAM, Amazon Redshift crea automáticamente un usuario de base de datos con el prefijo `IAM:` (para usuarios) o `IAMR:` (para roles).

1. Como administrador del clúster, conceda al usuario federado permisos para acceder al esquema externo. Sustituya `my_user` por el rol de IAM o el nombre de usuario.

   ```
   GRANT ALL ON SCHEMA awsdatacatalog TO "IAMR:my_user";
   ```

Para obtener instrucciones detalladas sobre cómo configurar el acceso federado, consulte [Uso de una identidad federada para administrar el acceso de Amazon Redshift a los recursos locales y a las tablas externas de Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html) en la *Guía de administración de Amazon Redshift*.

**Consulta de tablas de S3**

Una vez configurado el acceso federado, verifique los esquemas montados y consulte las tablas de S3.

Verifique los esquemas montados:

```
SHOW SCHEMAS FROM DATABASE awsdatacatalog;
```

Consulte las tablas de S3 utilizando el nombre del enlace de recurso del paso 3:

```
SELECT * FROM awsdatacatalog.sales_resource_link.transactions;
```