Otras opciones de configuración - Amazon Redshift

Otras opciones de configuración

En esta página, puede encontrar descripciones relativas a las opciones que puede especificar para el conector Spark de Amazon Redshift.

Tamaño máximo de las columnas de cadenas

Redshift crea columnas de cadena como columnas de texto al crear tablas, que se almacenan como VARCHAR(256). Si desea columnas que admitan tamaños mayores, puede utilizar maxlength para especificar la longitud máxima de las columnas de cadenas. A continuación se muestra un ejemplo de cómo especificar maxlength.

columnLengthMap.foreach { case (colName, length) => val metadata = new MetadataBuilder().putLong("maxlength", length).build() df = df.withColumn(colName, df(colName).as(colName, metadata)) }

Tipo de columna

Para establecer un tipo de columna, utilice el campo redshift_type.

columnTypeMap.foreach { case (colName, colType) => val metadata = new MetadataBuilder().putString("redshift_type", colType).build() df = df.withColumn(colName, df(colName).as(colName, metadata)) }

Codificación de compresión de una columna

Para utilizar una codificación de compresión específica en una columna, use el campo de codificación. Para obtener una lista completa de las codificaciones de compresión admitidas, consulte Codificaciones de compresión.

Descripción de una columna

Para establecer una descripción, utilice el campo description.

Autenticación entre Redshift y Amazon S3

De forma predeterminada, el resultado se descarga en Amazon S3 en formato parquet. Para descargar el resultado como archivo de texto delimitado por barras verticales, especifique la siguiente opción.

.option("unload_s3_format", "TEXT")

Instrucciones de inserción

Parámetro Obligatoria Predeterminado Descripción
spark.datasource.redshift.community.autopushdown.lazyMode No True

Especifica si el conector debe ejecutar perezosamente las instrucciones de empuje de Redshift.

Si es verdadero, el conector de Spark recupera todos los modelos y la información relacionados antes de ejecutar la consulta, lo que generalmente produce un mejor rendimiento.

Si es falso, el conector de Spark ejecuta las instrucciones de empuje inmediatamente en el hilo principal del controlador de Spark y se serializa en todas las expresiones.

Parámetros de conector

La asignación de parámetros u OPTIONS en Spark SQL admite las siguientes configuraciones.

Parámetro Obligatoria Predeterminado Descripción
dbtable Sí, a menos que se especifique la consulta N/A La tabla que se creará o de la que se leerá en Redshift. Este parámetro es necesario cuando se vuelven a guardar los datos en Redshift.
consulta Sí, a menos que se especifique dbtable N/A La consulta desde la que se leerá en Redshift.
usuario No N/A El nombre de usuario de Redshift. Debe utilizarse con el parámetro password. Válido solo si el usuario y la contraseña no son parámetros en la URL. El uso de ambos provocará un error.
password No N/A La contraseña de Redshift. Debe utilizarse con el parámetro user. Válido solo si el usuario y la contraseña no son parámetros en la URL. El uso de ambos provocará un error.
url No N/A

Una URL de JDBC. El formato es jdbc:subprotocolo://host:port/base_de_datos?user=nombre_de_usuario&password=contraseña.

El subprotocolo puede ser postgresql o Redshift, según el controlador JDBC que haya cargado. Tenga en cuenta que en classpath debe haber un controlador compatible con Redshift y coincidir con esta URL.

El host y el puerto deben apuntar al nodo maestro de Redshift, por lo que debe configurar grupos de seguridad o VPC para permitir el acceso desde su aplicación de controlador.

La base de datos es el nombre de la base de datos de Redshift.

El usuario y la contraseña son las credenciales para acceder a la base de datos, que deben estar insertadas en esta URL para JDBC, y su cuenta de usuario de base de datos debe tener los permisos necesarios para acceder a la tabla.

aws_iam_role Solo si se utilizan roles de IAM para autorizar las operaciones COPY/UNLOAD de Redshift N/A ARN completamente especificado del rol de IAM adjunto al clúster de Redshift.
forward_spark_s3_credentials No False Indica si esta biblioteca debe descubrir automáticamente las credenciales que utiliza Spark para conectarse a Amazon S3, y si debe reenviarlas a Redshift a través del controlador JDBC. Estas credenciales se envían como parte de la consulta JDBC. Por lo tanto, le recomendamos que active el cifrado SSL con la conexión de JDBC cuando utilice esta opción.
temporary_aws_access_key_id No N/A Clave de acceso de AWS. Debe tener permisos de escritura en ese bucket de S3.
temporary_aws_secret_access_key No N/A Clave de acceso secreta de AWS que corresponde a la clave de acceso.
temporary_aws_session_token No N/A Token de sesión de AWS correspondiente a la clave de acceso proporcionada.
tempdir No N/A Una ubicación en la que se puede escribir en Amazon S3. Se utiliza para descargar datos al leer y datos de Avro que se deben cargar en Redshift al escribir. Si utiliza un origen de datos de Redshift para Spark como parte de una canalización ETL normal, puede ser útil establecer una política de ciclo de vida a un bucket y utilizarlo como ubicación temporal de estos datos.
jdbcdriver No Determinado por el subprotocolo de la URL de JDBC El nombre de la clase del controlador JDBC que se usará. Esta clase debe estar en classpath. En la mayoría de los casos, no debe ser necesario especificar esta opción, ya que el nombre de clase del controlador apropiado se determinará automáticamente por el subprotocolo de la URL de JDBC.
diststyle No Even El estilo de distribución de Redshift que se utilizará al crear una tabla. Las opciones válidas son EVEN, KEY o ALL. Cuando utilice KEY, también debe establecer una clave de distribución con la opción distkey.
distkey No, a menos que se utilice DISTSTYLE_KEY N/A El nombre de una columna de la tabla que se utilizará como la clave de distribución al crear una tabla.
sortkeyspec No N/A Una definición completa de la clave de clasificación de Redshift.
include_column_list No False Indica si esta biblioteca debe extraer automáticamente las columnas del esquema y agregarlas al comando COPY según las opciones de mapeo de columnas.
description No N/A Una descripción de la tabla. La descripción se establece con el comando COMMENT de SQL y aparece en la mayoría de las herramientas de consulta. Consulte los metadatos de description para establecer descripciones en columnas individuales.
preactions No N/A A una lista delimitada por punto y coma de comandos SQL que deben ejecutarse antes de cargar el comando COPY. Podría ser útil ejecutar comandos DELETE o similares antes de cargar nuevos datos. Si el comando contiene %s, se formateará el nombre de la tabla antes de la ejecución (en caso de que utilice una tabla provisional). Si se produce un error en este comando, se tratará como una excepción. Si utiliza una tabla provisional, los cambios se revertirán y se restaurará la tabla de copia de seguridad si se produce un error en las acciones previas.
extracopyoptions No N/A

Una lista de opciones adicionales para agregarlas al comando COPY de Redshift al cargar datos (como TRUNCATECOLUMNS o MAXERROR n). Consulte Optional parameter (Parámetro opcional) para ver una lista completa de los parámetros disponibles.

Tenga en cuenta que como estas opciones se adjuntan al final del comando COPY, solo puede utilizar opciones que tengan sentido al final de él. Eso debería abarcar la mayoría de los casos de uso posibles.

sse_kms_key No N/A El ID de la clave de AWS KMS que se utilizará para el cifrado en el servidor en S3 durante la operación UNLOAD de Redshift en lugar del cifrado predeterminado de AWS. El rol de IAM de Redshift debe tener acceso a la clave de KMS para escribir con ella y el rol de IAM de Spark debe tener acceso a la clave para las operaciones de lectura. La lectura de los datos cifrados no requiere cambios (AWS se encarga de ello) siempre y cuando el rol de IAM de Spark tenga el acceso adecuado.
tempformat No AVRO El formato en el que se guardan los archivos temporales en Amazon S3 al escribir en Redshift. Los valores válidos son AVRO, CSV y CSV GZIP (CSV comprimido).
csvnullstring (experimental) No Nulo El valor de cadena que se escribirá para los valores nulos cuando se utilice el formato temporal CSV. Debe ser un valor que no aparezca en sus datos reales.
autopushdown No True Indica si se aplica la inserción de predicados y consultas mediante la captura y el análisis de los planes lógicos de Spark para las operaciones SQL. Las operaciones se traducen en una consulta SQL y, a continuación, se ejecutan en Redshift para mejorar el rendimiento.
autopushdown.s3_result_cache No False Almacene 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 autoinserción está activada. No recomendamos utilizar este parámetro cuando se mezclen operaciones de lectura y escritura porque los resultados almacenados en caché podrían contener información obsoleta.
unload_s3_format No Parquet El formato con el que se descargan los resultados de consulta. Las opciones válidas son Parquet y Text, que especifica que se descarguen los resultados de la consulta en formato de texto delimitado por barra vertical.
extraunloadoptions No N/A Opciones adicionales que se anexarán al comando UNLOAD de Redshift. No se garantiza que funcionen todas las opciones, ya que algunas pueden entrar en conflicto con otras establecidas en el conector.
copydelay No 30000 Retraso (en ms) entre los reintentos de las operaciones COPY de Redshift.
copyretrycount No 2 Número de veces que se vuelven a intentar las operaciones COPY de Redshift.
tempdir_region No N/A

Región de AWS donde se encuentra tempdir. Al configurar esta opción, se mejora el rendimiento del conector para las interacciones con tempdir además de proporcionar automáticamente este valor como parte de las operaciones COPY y UNLOAD durante las operaciones de lectura y escritura del conector.

Esta configuración se recomienda en las siguientes situaciones:

1) Cuando el conector se ejecuta fuera de AWS, ya que se producirá un error en la detección automática de regiones y el rendimiento del conector se verá afectado negativamente.

2) Cuando tempdir se encuentra en una región diferente a la del clúster de Redshift, ya que con esta configuración se elimina la necesidad de suministrar la región manualmente mediante los parámetros extracopyoptions y extraunloadoptions. tempdir no se puede encontrar en una región diferente a la del clúster de Redshift cuando se utiliza PARQUET como tempformat incluso si se utiliza este parámetro.

3) Cuando el conector se ejecuta en una región diferente a tempdir, ya que mejora el rendimiento de acceso del conector de tempdir.

secret.id No N/A El nombre o el ARN del secreto almacenado en AWS Secrets Manager. Puede usar este parámetro para proporcionar automáticamente las credenciales de Redshift, pero solo si el usuario, la contraseña y las credenciales de DbUser no se pasan a la URL de JDBC ni a través de otras opciones.
secret.region No N/A

La región principal de AWS, como por ejemplo Este de EE. UU. (Norte de Virginia), para buscar el valor secret.id.

Si no se especifica esta región, el conector intentará utilizar la Cadena de proveedores de credenciales predeterminada para resolver la región del secret.id. En algunos casos, por ejemplo, si utiliza el conector fuera de una, el conector no podrá encontrar la región. Recomendamos usar esta configuración en las siguientes situaciones:

1) Cuando el conector funciona fuera de AWS, ya que la detección automática de regiones producirá un error e impedirá la autenticación con Redshift

Cuando el conector se ejecuta en una región diferente secret.id, ya que mejora el rendimiento de acceso del conector del secreto.

secret.vpcEndpointUrl No N/A La URL del punto de conexión DNS de PrivateLink para AWS Secrets Manager al invalidar la Cadena de proveedores de credenciales predeterminada.
secret.vpcEndpointRegion No N/A La región del punto de conexión DNS de PrivateLink para AWS Secrets Manager al invalidar la Cadena de proveedores de credenciales predeterminada.
jdbc.* No N/A Parámetros adicionales para pasarlos al controlador JDBC subyacente, donde el comodín es el nombre del parámetro JDBC, como jdbc.ssl. Tenga en cuenta que el prefijo jdbc se eliminará antes de pasarlo al controlador JDBC. Para ver todas las opciones posibles del controlador JDBC de Redshift, consulte Opciones de configuración del controlador JDBC versión 2.1.
etiqueta No " " Un identificador para incluir en el conjunto de grupos de consultas al ejecutar consultas con el conector. Debe tener 100 caracteres o menos y todos los caracteres deben ser válidos unicodeIdentifierParts. Si el identificador tiene más de 100 caracteres, se eliminará el exceso. Al ejecutar una consulta con el conector, el grupo de consultas se establecerá como una cadena en formato JSON, como
{"spark-redshift-connector":{"svc":"","ver":"5.1.0-amzn-1-spark_3.3","op":"Read","lbl":""}}`)
. Esta opción sustituye el valor de la clave lbl.
nota

Reconocimiento: esta documentación contiene código y lenguaje de muestra desarrollados por la Apache Software Foundation con licencia Apache 2.0.