

# Conexiones Redshift
<a name="aws-glue-programming-etl-connect-redshift-home"></a>

Puede usar Glue for Spark AWS para leer y escribir en tablas en bases de datos de Amazon Redshift. Al conectarse a las bases de datos de Amazon Redshift, Glue AWS mueve los datos a través de Amazon S3 para lograr el máximo rendimiento mediante el SQL y los comandos de Amazon Redshift `COPY` y `UNLOAD`. En Glue 4.0 AWS y versiones posteriores, puede utilizar la [integración de Amazon Redshift para Apache Spark para](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html) leer y escribir con optimizaciones y funciones específicas de Amazon Redshift además de las disponibles al conectarse a través de versiones anteriores. 

Descubra cómo Glue AWS facilita más que nunca a los usuarios de Amazon Redshift la migración a Glue AWS para la integración de datos sin servidor y la ETL.

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


## Configuración de las conexiones de Redshift
<a name="aws-glue-programming-etl-connect-redshift-configure"></a>

Para utilizar los clústeres de Amazon Redshift en Glue AWS, necesitará algunos requisitos previos:
+ Un directorio de Amazon S3 para utilizar como almacenamiento temporario al leer y escribir en la base de datos.
+ Una Amazon VPC que habilita la comunicación entre su clúster de Amazon Redshift, su trabajo de AWS Glue y su directorio de Amazon S3.
+ Permisos de IAM adecuados en el trabajo de Glue AWS y el clúster de Amazon Redshift.

### Configuración de roles de IAM
<a name="aws-glue-programming-etl-redshift-config-iam"></a>

**Configurar la función para el clúster de Amazon Redshift**  
Su clúster de Amazon Redshift debe poder leer y escribir en Amazon S3 para poder integrarse con los trabajos de Glue AWS. Para ello, puede asociar los roles de IAM al clúster de Amazon Redshift al que desee conectarse. Su función debe tener una política que permita leer y escribir en su directorio temporario de Amazon S3. Su función debe tener una relación de confianza que permita al `redshift.amazonaws.com`servicio hacerlo`AssumeRole`.

**Para asociar un rol de IAM a Amazon Redshift**

1. **Requisitos previos:** un bucket o directorio de Amazon S3 utilizado para el almacenamiento temporario de archivos.

1. Identifique qué permisos de Amazon S3 necesitará su clúster de Amazon Redshift. Al mover datos a un clúster de Amazon Redshift y desde este, los trabajos de Glue AWS emiten instrucciones de COPIAR y DESCARGAR para Amazon Redshift. Si su trabajo modifica una tabla en Amazon Redshift, Glue AWS también emitirá instrucciones de CREAR BIBLIOTECA. Para obtener información sobre los permisos específicos de Amazon S3 necesarios para que Amazon Redshift ejecute estas instrucciones, consulte la documentación de Amazon Redshift: [Amazon Redshift: permisos para acceder a otros recursos AWS.](https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-access-permissions.html)

1. En la consola de IAM, cree una política de IAM con los permisos necesarios. Para obtener más información sobre cómo crear una política de IAM, consulte [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html). 

1. En la consola de IAM, cree un rol y una relación de confianza que permita a Amazon Redshift asumir el rol. Siga las instrucciones de la documentación de IAM [para crear un rol para un servicio AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) (consola)
   + Cuando se pida que elija un caso de uso del servicio AWS, elija “Redshift: personalizable”.
   + Cuando se pida que adjunte una política, elija la política que definió previamente.
**nota**  
Para obtener más información sobre la configuración de funciones para Amazon Redshift, consulte [Autorizar a Amazon Redshift para acceder a otros servicios AWS en su nombre](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) en la documentación de Amazon Redshift. 

1. En la consola de Amazon Redshift, asocie la función a su clúster de Amazon Redshift. Siga las instrucciones de [la documentación de Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html).

   Seleccione la opción resaltada en la consola de Amazon Redshift para configurar este ajuste:  
![\[Un ejemplo de dónde administrar los permisos de IAM en la consola de Amazon Redshift.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/RS-role-config.png)

**nota**  
 De forma predeterminada, los trabajos de Glue AWS transfieren credenciales temporarias a Amazon Redshift creadas mediante el rol que especificó para ejecutar el trabajo. No recomendamos utilizar estas credenciales. Por motivos de seguridad, estas credenciales caducan después de 1 hora. 

**Configure el rol para el trabajo de Glue AWS**  
El trabajo de Glue AWS necesita un rol para acceder al bucket de Amazon S3. No necesita permisos de IAM para el clúster de Amazon Redshift, su acceso se controla mediante la conectividad de Amazon VPC y las credenciales de su base de datos.

### Configuración de Amazon VPC
<a name="aws-glue-programming-etl-redshift-config-vpc"></a>

**Para configurar el acceso a almacenes de datos de Amazon Redshift**

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 panel de navegación izquierdo, elija **Clusters (Clústeres)**.

1. Seleccione el nombre de clúster al que desee obtener acceso desde AWS Glue.

1. En la sección **Cluster Properties (Propiedades del clúster)**, elija un grupo de seguridad en **VPC security groups (Grupos de seguridad de la VPC)** para permitir a AWS Glue utilizarlo. Registre el nombre del grupo de seguridad que ha elegido para futuras referencias. Al elegir el grupo de seguridad se abrirá la lista de **Security Groups (Grupos de seguridad)** de la consola de Amazon EC2.

1. Elija el grupo de seguridad para modificar e ir a la pestaña **Inbound** (Entrada).

1. Añada una regla con autorreferencia para que los componentes de AWS Glue puedan comunicarse. En concreto, añada o confirme que hay una regla con **Type** (Tipo) `All TCP`, **Protocol** (Protocolo) `TCP`, **Port Range** (Intervalo de puertos) con todos los puertos y el **Source** (Origen) con el mismo nombre de grupo de seguridad que **Group ID** (ID de grupo). 

   La regla de entrada tiene un aspecto similar al siguiente:   
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

   Por ejemplo:   
![\[Ejemplo de regla de entrada con autorreferencia.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/SetupSecurityGroup-Start.png)

1. Añada también una regla para el tráfico saliente. Puede abrir el tráfico saliente con destino a todos los puertos, por ejemplo:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

   O bien, crear una regla con autorreferencia en la que **Type (Tipo)** sea `All TCP`, **Protocol (Protocolo)** sea `TCP`, **Port Range (Intervalo de puertos)** incluya todos los puertos y **Destination (Destino)** sea el mismo nombre de grupo de seguridad que **Group ID (ID de grupo)**. En caso de que se utilice un punto de conexión de VPC de Amazon S3, agregue también una regla HTTPS para el acceso de Amazon S3. Se requiere *s3-prefix-list-id* en la regla del grupo de seguridad para permitir el tráfico desde la VPC al punto de conexión de VPC de Amazon S3.

   Por ejemplo:   
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

### Configurar Glue AWS
<a name="aws-glue-programming-etl-redshift-config-glue"></a>

Deberá crear una conexión al Catálogo de datos de AWS Glue que proporcione información de conexión de Amazon VPC.

**Para configurar la conectividad de Amazon VPC de Amazon Redshift con AWS Glue en la consola**

1. Cree una conexión al catálogo de datos mediante los pasos que se indican en: [Adición de una conexión de AWS Glue](console-connections.md). Tras crear la conexión, conserve el nombre de la conexión, *connectionName*, para el siguiente paso.
   + Al seleccionar un **tipo de conexión**, seleccione **Amazon Redshift**.
   + Al seleccionar un **clúster de Redshift**, seleccione el clúster por su nombre.
   + Proporcione la información de conexión predeterminada para un usuario de Amazon Redshift en su clúster.
   + La configuración de Amazon VPC se configurará automáticamente.
**nota**  
Deberá proporcionar manualmente `PhysicalConnectionRequirements` a su Amazon VPC al crear una conexión de **Amazon Redshift** a través del AWS SDK.

1. En la configuración del trabajo de Glue AWS, proporcione *connectionName* como una **conexión de red adicional**.

## Ejemplo: lectura de tablas de Amazon Redshift
<a name="aws-glue-programming-etl-connect-redshift-read"></a>

 Puede leer los clústeres desde Amazon Redshift y los entornos de Amazon Redshift sin servidor. 

**Requisitos previos:** una tabla de Amazon Redshift de la que quiera leer. Siga los pasos de la sección anterior [Configuración de las conexiones de Redshift](#aws-glue-programming-etl-connect-redshift-configure) después de los cuales debe tener el URI de Amazon S3 para un directorio temporario, *temp-s3-dir* y un rol de IAM, *rs-role-name* (en la *cuenta role-account-id*).

------
#### [ Using the Data Catalog ]

**Requisitos previos adicionales:** una base de datos del catálogo de datos y una tabla para la tabla de Amazon Redshift de la que desee leer. Para obtener más información sobre las tablas de catálogo, consulte [Detección y catalogación de datos en AWS Glue](catalog-and-crawler.md). Tras crear una entrada para su tabla de Amazon Redshift, identificará su conexión con un *redshift-dc-database-name* y un *redshift-table-name*.

**Configuración:** en las opciones de función, identificará la tabla del catálogo de datos con los parámetros `database` y `table_name`. Identificará su directorio temporario de Amazon S3 con `redshift_tmp_dir`. También proporcionará *rs-role-name* con la clave `aws_iam_role` del parámetro `additional_options`.

```
 glueContext.create_dynamic_frame.from_catalog(
    database = "redshift-dc-database-name", 
    table_name = "redshift-table-name", 
    redshift_tmp_dir = args["temp-s3-dir"], 
    additional_options = {"aws_iam_role": "arn:aws:iam::role-account-id:role/rs-role-name"})
```

------
#### [ Connecting directly ]

**Requisitos previos adicionales:** necesitará el nombre de su tabla de Amazon Redshift *redshift-table-name*. Necesitará la información de conexión JDBC para el clúster de Amazon Redshift que almacena esa tabla. Deberá proporcionar la información de conexión con el *host*, el *puerto*, *redshift-database-name*, el *nombre de usuario* y la *contraseña*.

Puede recuperar la información de conexión de la consola de Amazon Redshift cuando trabaje con clústeres de Amazon Redshift. Si utiliza Amazon Redshift sin servidor, consulte [Conexión a Amazon Redshift sin servidor](https://docs.aws.amazon.com//redshift/latest/mgmt/serverless-connecting.html) en la documentación de Amazon Redshift.

**Configuración:** en las opciones de función, identificará los parámetros de conexión con `url`, `dbtable`, `user` y `password`. Identificará su directorio temporario de Amazon S3 con `redshift_tmp_dir`. Puede especificar su rol de IAM mediante la utilización de `aws_iam_role` cuando utiliza `from_options`. La sintaxis es similar a la de la conexión a través del catálogo de datos, pero los parámetros se colocan en el mapa `connection_options`.

Es una mala práctica codificar las contraseñas en los scripts de Glue AWS. Considere la posibilidad de almacenar sus contraseñas en AWS Secrets Manager y recuperarlas en su script con el SDK para Python (Boto3).

```
my_conn_options = {  
    "url": "jdbc:redshift://host:port/redshift-database-name",
    "dbtable": "redshift-table-name",
    "user": "username",
    "password": "password",
    "redshiftTmpDir": args["temp-s3-dir"],
    "aws_iam_role": "arn:aws:iam::account id:role/rs-role-name"
}

df = glueContext.create_dynamic_frame.from_options("redshift", my_conn_options)
```

------

## Ejemplo: escribir en tablas de Amazon Redshift
<a name="aws-glue-programming-etl-connect-redshift-write"></a>

 Puede leer los clústeres desde Amazon Redshift y los entornos de Amazon Redshift sin servidor. 

**Requisitos previos:** Un clúster de Amazon Redshift y siga los pasos de la sección anterior [Configuración de las conexiones de Redshift](#aws-glue-programming-etl-connect-redshift-configure) después de los cuales debe tener el URI de Amazon S3 para un directorio temporario, *temp-s3-dir* y un rol de IAM, *rs-role-name*, (en la cuenta *role-account-id*). También necesitará un `DynamicFrame` cuyos contenido desee escribir en la base de datos. 

------
#### [ Using the Data Catalog ]

**Requisitos previos adicionales:** una base de datos del catálogo de datos para el clúster de Amazon Redshift y una tabla a la que desee escribir. Para obtener más información sobre las tablas de catálogo, consulte [Detección y catalogación de datos en AWS Glue](catalog-and-crawler.md). Identificará su conexión con *redshift-dc-database-name* y la tabla de destino con *redshift-table-name.*

**Configuración:** en las opciones de función, identificará su base de datos del catálogo de datos con el parámetro `database` y, a continuación, proporcionará la tabla con `table_name`. Identificará su directorio temporario de Amazon S3 con `redshift_tmp_dir`. También proporcionará *rs-role-name* con la clave `aws_iam_role` del parámetro `additional_options`.

```
 glueContext.write_dynamic_frame.from_catalog(
    frame = input dynamic frame, 
    database = "redshift-dc-database-name", 
    table_name = "redshift-table-name", 
    redshift_tmp_dir = args["temp-s3-dir"], 
    additional_options = {"aws_iam_role": "arn:aws:iam::account-id:role/rs-role-name"})
```

------
#### [ Connecting through a AWS Glue connection ]

Puede conectarse a Amazon Redshift directamente mediante el uso del método `write_dynamic_frame.from_options`. Sin embargo, en lugar de insertar los detalles de la conexión directamente en el script, puede hacer referencia a los detalles de la conexión almacenados en una conexión del catálogo de datos con el método `from_jdbc_conf`. Puede hacerlo sin tener que rastrear ni crear tablas del catálogo de datos para la base de datos. Para obtener más información sobre las conexiones de catálogo, consulte [Conexión a datos](glue-connections.md).

**Requisitos previos adicionales:** una conexión del catálogo de datos para su base de datos y una tabla de Amazon Redshift de la que desee leer.

**Configuración:** identificará su conexión al catálogo de datos con *dc-connection-name*. Identificará la base de datos y la tabla de Amazon Redshift con *redshift-table-name* y *redshift-database-name*. Deberá proporcionar la información de conexión del catálogo de datos con `catalog_connection` y la información de Amazon Redshift junto con `dbtable` y `database`. La sintaxis es similar a la de la conexión a través del catálogo de datos, pero los parámetros se colocan en el mapa `connection_options`. 

```
my_conn_options = {
    "dbtable": "redshift-table-name",
    "database": "redshift-database-name",
    "aws_iam_role": "arn:aws:iam::role-account-id:role/rs-role-name"
}

glueContext.write_dynamic_frame.from_jdbc_conf(
    frame = input dynamic frame, 
    catalog_connection = "dc-connection-name", 
    connection_options = my_conn_options, 
    redshift_tmp_dir = args["temp-s3-dir"])
```

------

## Referencia de opción de conexión a Amazon Redshift
<a name="w2aac67c11c24b8c21c15"></a>

Las opciones de conexión básicas que se utilizan en todas las conexiones JDBC de Glue AWS para configurar información similar a `url`, `user` y `password` son consistentes con todos los tipos de JDBC. Para obtener más información acerca de los parámetros de JDBC, consulte [Referencia de opciones de conexión de JDBC](aws-glue-programming-etl-connect-jdbc-home.md#aws-glue-programming-etl-connect-jdbc).

El tipo de conexión Amazon Redshift requiere algunas opciones de conexión adicionales:
+ `"redshiftTmpDir"`: (Obligatorio) La ruta de Amazon S3 donde se pueden almacenar datos temporarios al copiar desde la base de datos.
+ `"aws_iam_role"`: (Opcional) ARN para un rol de IAM. La tarea de Glue AWS transferirá esta función al clúster de Amazon Redshift para conceder al clúster los permisos necesarios para completar las instrucciones del trabajo.

### Opciones de conexión adicionales disponibles en Glue 4.0\$1 AWS
<a name="aws-glue-programming-etl-redshift-enhancements"></a>

También puede transferir opciones para el nuevo conector Amazon Redshift a través de las opciones de conexión de Glue AWS. Para obtener una lista completa de las opciones de conectores compatibles, consulte la sección *Spark SQL parameters* (Parámetros de Spark SQL) en [Amazon Redshift integration for Apache Spark](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html) (Integración de Amazon Redshift para Apache Spark).

Para su comodidad, aquí reiteramos algunas opciones nuevas:


| Nombre | Obligatorio | Predeterminado | Descripción | 
| --- | --- | --- | --- | 
|  autopushdown  | No | TRUE |  Aplica la delegación de predicados y consultas mediante la captura y el análisis de los planes lógicos de Spark para operaciones de SQL. Las operaciones se traducen en una consulta SQL y, a continuación, se ejecutan en Amazon Redshift para mejorar el rendimiento.  | 
|  autopushdown.s3\$1result\$1cache  | No | FALSO |  Almacena en caché la consulta SQL para descargar datos de la asignación de rutas de Amazon S3 en la memoria, de modo que no sea necesario volver a ejecutar la misma consulta en la misma sesión de Spark. Solo se admite cuando la opción `autopushdown` está habilitada.  | 
|  unload\$1s3\$1format  | No | PARQUET |  PARQUET: descarga los resultados de la consulta en formato Parquet. TEXT: descarga los resultados de la consulta en formato de texto delimitado por barras.  | 
|  sse\$1kms\$1key  | No | N/A |  La clave de AWS SSE-KMS que se utilizará para el cifrado durante las operaciones `UNLOAD` en lugar del cifrado predeterminado de AWS.  | 
|  extracopyoptions  | No | N/A |  Lista de opciones adicionales que se anexarán al comando `COPY` de Amazon Redshift al cargar datos, como `TRUNCATECOLUMNS` o `MAXERROR n` (consulte otras opciones en [COPY: Optional parameters](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#r_COPY-syntax-overview-optional-parameters) [COPY: parámetros opcionales]).  Tenga en cuenta que, dado que estas opciones se anexan al final del comando `COPY`, solo se pueden usar las opciones que tengan sentido al final del comando. Eso debería abarcar la mayoría de los casos de uso posibles.  | 
|  csvnullstring (experimental)  | No | NULL |  Valor de cadena que se escribirá para los valores nulos cuando se utiliza el valor de `tempformat` CSV. Debe ser un valor que no aparezca en los datos reales.  | 

Estos nuevos parámetros se pueden utilizar de las siguientes maneras.

**Nuevas opciones para mejorar el rendimiento**  
El nuevo conector presenta algunas opciones nuevas de mejora del rendimiento:
+ `autopushdown`: habilitada de forma predeterminada.
+ `autopushdown.s3_result_cache`: deshabilitada de forma predeterminada.
+ `unload_s3_format`: `PARQUET` de forma predeterminada.

Para obtener información sobre el uso de estas opciones, consulte [Amazon Redshift integration for Apache Spark](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html) (Integración de Amazon Redshift para Apache Spark). Le recomendamos que no active ` autopushdown.s3_result_cache` cuando tenga operaciones de lectura y escritura mixtas, ya que los resultados almacenados en caché pueden contener información obsoleta. La opción `unload_s3_format` se define como `PARQUET` de forma predeterminada para el comando `UNLOAD` a fin de mejorar el rendimiento y reducir el costo de almacenamiento. Para utilizar el comportamiento predeterminado del comando `UNLOAD`, restablezca la opción a `TEXT`.

**Nueva opción de cifrado para lectura**  
De forma predeterminada, los datos de la carpeta temporal que AWS Glue utiliza al leer datos de la tabla de Amazon Redshift se cifran mediante el cifrado `SSE-S3`. A fin de utilizar las claves administradas por el cliente de AWS Key Management Service (AWS KMS) para cifrar los datos, puede configurar `("sse_kms_key" → kmsKey)`, donde ksmKey es el [ID de clave de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/find-cmk-id-arn.html), en lugar de la opción de configuración heredada `("extraunloadoptions" → s"ENCRYPTED KMS_KEY_ID '$kmsKey'")` de la versión 3.0 de AWS Glue.

```
datasource0 = glueContext.create_dynamic_frame.from_catalog(
  database = "database-name", 
  table_name = "table-name", 
  redshift_tmp_dir = args["TempDir"],
  additional_options = {"sse_kms_key":"<KMS_KEY_ID>"}, 
  transformation_ctx = "datasource0"
)
```

**Compatibilidad con URL de JDBC basadas en IAM**  
El nuevo conector admite una URL de JDBC basada en IAM, por lo que no es necesario pasar un usuario o contraseña ni un secreto. Con una URL de JDBC basada en IAM, el conector utiliza el rol de tiempo de ejecución del trabajo para acceder al origen de datos de Amazon Redshift. 

Paso 1: adjunte la siguiente política mínima requerida a su rol de tiempo de ejecución del trabajo de AWS Glue.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "redshift:GetClusterCredentials",
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:dbgroup:<cluster name>/*",
                "arn:aws:redshift:*:111122223333:dbuser:*/*",
                "arn:aws:redshift:us-east-1:111122223333:dbname:<cluster name>/<database name>"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "redshift:DescribeClusters",
            "Resource": "*"
        }
    ]
}
```

------

Paso 2: utilice la URL de JDBC basada en IAM de la siguiente manera. Especifique una nueva opción `DbUser` con el nombre de usuario de Amazon Redshift con el que se está conectando.

```
conn_options = {
     // IAM-based JDBC URL
    "url": "jdbc:redshift:iam://<cluster name>:<region>/<database name>",
    "dbtable": dbtable,
    "redshiftTmpDir": redshiftTmpDir,
    "aws_iam_role": aws_iam_role,
    "DbUser": "<Redshift User name>" // required for IAM-based JDBC URL
    }

redshift_write = glueContext.write_dynamic_frame.from_options(
    frame=dyf,
    connection_type="redshift",
    connection_options=conn_options
)

redshift_read = glueContext.create_dynamic_frame.from_options(
    connection_type="redshift",
    connection_options=conn_options
)
```

**nota**  
Actualmente, un `DynamicFrame` solo admite una URL de JDBC basada en IAM con un valor de ` DbUser` en el flujo de trabajo de `GlueContext.create_dynamic_frame.from_options`. 

## Migración de la versión 3.0 de AWS Glue a la versión 4.0
<a name="aws-glue-programming-etl-redshift-migrating"></a>

En Glue 4.0 AWS, los trabajos de ETL tienen acceso a un nuevo conector de Spark para Amazon Redshift y a un nuevo controlador JDBC con diferentes opciones y configuraciones. El nuevo conector y controlador de Amazon Redshift están diseñados con el rendimiento como objetivo y mantienen la coherencia transaccional de los datos. Estos productos están registrados en la documentación de Amazon Redshift. Para obtener más información, consulte:
+ [Amazon Redshift integration for Apache Spark (Integración de Amazon Redshift para Apache Spark](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html)
+ [Amazon Redshift JDBC driver, version 2.1 (Controlador JDBC versión 2.1 de Amazon Redshift 2.1](https://docs.aws.amazon.com/redshift/latest/mgmt/jdbc20-download-driver.html)

**Restricción de identificadores y nombres de tablas o columnas**  
El nuevo conector y el controlador de Spark para Amazon Redshift tienen un requisito más restringido para el nombre de tablas de Redshift. Si necesita más información, consulte [Nombres e identificadores](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) para definir el nombre de una tabla de Amazon Redshift. Es posible que el flujo de trabajo de marcador de trabajo no funcione con un nombre de tabla que no coincida con las reglas y con ciertos caracteres, como un espacio.

Si tiene tablas heredadas con nombres que no se ajustan a las reglas indicadas en [Nombres e identificadores](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) y tiene problemas con los marcadores (los trabajos vuelven a procesar datos antiguos de tablas de Amazon Redshift), le recomendamos que cambie el nombre de las tablas. Para obtener más información, consulte [Ejemplos de ALTER TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE_examples_basic.html). 

**Cambio de tempformat predeterminado en DataFrame**  
El conector de Spark de la versión 3.0 de AWS Glue establece de forma predeterminada el valor de `tempformat` en CSV al escribir en Amazon Redshift. Para mantener la coherencia, en la versión 3.0 de AWS Glue, el ` DynamicFrame` sigue estableciendo el valor predeterminado de `tempformat` para usar `CSV`. Si ha utilizado con anterioridad las API de Dataframe de Spark directamente con el conector de Spark para Amazon Redshift, puede establecer el `tempformat` en CSV en las opciones `DataframeReader` o `Writer`. De lo contrario, `tempformat` adopta `AVRO` como valor predeterminado en el nuevo conector de Spark.

**Cambio de conducta: asignación del tipo de datos REAL de Amazon Redshift al tipo de datos FLOAT de Spark en lugar de DOUBLE**  
En la versión 3.0 de AWS Glue, el tipo `REAL` de Amazon Redshift se convierte a un tipo ` DOUBLE` de Spark. El nuevo conector de Spark para Amazon Redshift ha actualizado el comportamiento para que el tipo ` REAL` de Amazon Redshift se convierta al tipo `FLOAT` de Spark y viceversa. Si tiene un caso de uso heredado en el que aún desea que el tipo `REAL` de Amazon Redshift se asigne a un tipo `DOUBLE` de Spark, puede utilizar la siguiente solución alternativa:
+ En el caso de un `DynamicFrame`, asigna el tipo `Float` a un tipo `Double` con `DynamicFrame.ApplyMapping`. En el caso de un `Dataframe`, tiene que usar `cast`.

Ejemplo de código:

```
dyf_cast = dyf.apply_mapping([('a', 'long', 'a', 'long'), ('b', 'float', 'b', 'double')])
```

**Gestión del tipo de datos VARBYTE**  
Al trabajar con los tipos de datos de AWS Glue 3.0 y Amazon Redshift, AWS Glue 3.0 convierte Amazon Redshift `VARBYTE` al tipo Spark `STRING`. Sin embargo, el último conector de Amazon Redshift Spark no admite el tipo de datos `VARBYTE`. Para superar esta limitación, se puede [crear una vista de Redshift](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_VIEW.html) que transforme las columnas `VARBYTE` en un tipo de datos compatible. Luego, se debe utilizar el nuevo conector para cargar los datos desde esta vista en lugar de hacerlo desde la tabla original, lo que garantiza la compatibilidad y, al mismo tiempo, mantiene el acceso a sus datos `VARBYTE`.

Ejemplo de consulta de Redshift:

```
CREATE VIEW view_name AS SELECT FROM_VARBYTE(varbyte_column, 'hex') FROM table_name
```