Solución de problemas de consultas en Amazon Redshift Spectrum - Amazon Redshift

Solución de problemas de consultas en Amazon Redshift Spectrum

En este tema se describen problemas comunes que puede encontrar con las consultas de Amazon Redshift Spectrum.

Para ver los errores generados por las consultas de Redshift Spectrum, consulte la tabla de sistema SVL_S3LOG.

Cantidad de reintentos superada

Si se agota el tiempo de espera de una solicitud de Amazon Redshift Spectrum, esta se cancela y se reenvía. Luego de cinco intentos fallidos, la consulta muestra el siguiente error.

error:  Spectrum Scan Error: Retries exceeded

Entre las causas posibles, se incluyen:

  • Tamaños de archivo grandes (mayores que 1 GB). Verifique los tamaños de los archivos en Amazon S3 y busque archivos grandes y sesgos en el tamaño de los archivos. Divida los archivos grandes en archivos más pequeños, de entre 100 MB y 1 GB. Intente que todos los archivos tengan, aproximadamente, el mismo tamaño.

  • Rendimiento lento de red. Ejecute la consulta en otro momento.

Acceso limitado

Amazon Redshift Spectrum está sujeto a las Service Quotas de otros servicios de AWS. En caso de uso excesivo, es posible que las solicitudes de Redshift Spectrum deban procesarse más lento, lo que da como resultado el siguiente error.

error:  Spectrum Scan Error: Access throttled

Pueden ocurrir dos tipos de limitación:

  • Acceso limitado por Amazon S3.

  • Acceso limitado por AWS KMS.

El contexto de error proporciona más detalles sobre el tipo de limitación controlada. A continuación, puede encontrar causas y posibles resoluciones para esta limitación controlada.

Acceso limitado por Amazon S3

Amazon S3 podría limitar una solicitud de Redshift Spectrum si la tasa de solicitudes de lectura en un prefijo es demasiado alta. Para obtener más información sobre una tasa de solicitudes GET /HEAD que puede alcanzar en Amazon S3, consulte Optimización del rendimiento de Amazon S3 en la Guía del usuario de Amazon Simple Storage Service. La tasa de solicitudes GET/HEAD de Amazon S3 tiene en cuenta todas las solicitudes GET/HEAD en un prefijo para que las diferentes aplicaciones que acceden al mismo prefijo compartan la tasa total de solicitudes.

Si Amazon S3 limita sus solicitudes de Redshift Spectrum con frecuencia, reduzca la cantidad de solicitudes GET/HEAD que Redshift Spectrum envía a Amazon S3. Para ello, intente combinar archivos pequeños en archivos más grandes. Le recomendamos utilizar archivos con un tamaño igual o superior a 64 MB.

Además, tenga en cuenta la posibilidad de particionar las tablas de Redshift Spectrum para aprovechar el filtrado temprano y reducir la cantidad de archivos a los que se obtiene acceso en Amazon S3. Para obtener más información, consulte Partición de tablas externas de Redshift Spectrum.

Acceso limitado por AWS KMS

Si almacena los datos en Amazon S3 con cifrado del lado del servidor (SSE-S3 o SSE-KMS), Amazon S3 llama a una operación de API a AWS KMS para cada archivo al que acceda Redshift Spectrum. Estas solicitudes cuentan para la cuota de operaciones criptográficas; para obtener más información, consulte Solicitar cuotas de AWS KMS. Para obtener más información sobre SSE-S3 y SSE-KMS, consulte Protección de los datos con el cifrado del lado del servidor y Protección de los datos con el cifrado del lado del servidor mediante las claves KMS almacenadas en AWS KMS en la Guía del usuario de Amazon Simple Storage Service.

Un primer paso para reducir la cantidad de solicitudes que Redshift Spectrum realiza a AWS KMS consiste en reducir la cantidad de archivos a los que se accede. Para ello, intente combinar archivos pequeños en archivos más grandes. Le recomendamos utilizar archivos con un tamaño igual o superior a 64 MB.

Si AWS KMS limita sus solicitudes de Redshift Spectrum con frecuencia, considere la posibilidad de solicitar un aumento en la cuota de su tasa de solicitudes de AWS KMS para las operaciones criptográficas. Para solicitar un aumento de cuota, consulte Límites de los servicios de AWS en la Referencia general de Amazon Web Services.

Límite de recursos superado

Redshift Spectrum aplica un límite superior sobre la cantidad de memoria que puede usar una solicitud. Una solicitud de Redshift Spectrum que requiere más memoria no logra ejecutarse, lo que produce el siguiente error.

error:  Spectrum Scan Error: Resource limit exceeded

Hay dos razones comunes que pueden hacer que una solicitud de Redshift Spectrum exceda su límite de memoria:

  • Redshift Spectrum procesa una gran parte de los datos que no se puede dividir en fragmentos más pequeños.

  • Redshift Spectrum procesa un paso de agrupación grande.

Recomendamos utilizar un formato de archivo que admita lecturas paralelas con tamaños divididos de 128 MB o menos. Consulte Archivos de datos para consultas en Amazon Redshift Spectrum para obtener información sobre formatos de archivo compatibles y directrices genéricas para la creación de archivos de datos. Cuando se utilizan formatos de archivo o algoritmos de compresión que no admiten lecturas paralelas, se recomienda mantener los tamaños de archivo entre 64 MB y 128 MB.

No se han devuelto filas para una tabla particionada

Si la consulta devuelve cero filas de una tabla externa particionada, controle si se agregó una partición para esta tabla externa. Redshift Spectrum solo analiza los archivos en una ubicación de Amazon S3 que se haya agregado explícitamente con ALTER TABLE … ADD PARTITION. Consulte la vista SVV_EXTERNAL_PARTITIONS para encontrar las particiones existentes. Ejecute ALTER TABLE … ADD PARTITION para cada partición que falte.

Error de no autorización

Verifique que el rol de IAM que corresponde al clúster permita acceder a los objetos del archivo de Amazon S3. Si la base de datos externa está en Amazon Athena, verifique que el rol de IAM permite el acceso a los recursos de Athena. Para obtener más información, consulte Políticas de IAM para Amazon Redshift Spectrum.

Formatos de datos incompatibles

Para un formato de archivo en columnas, como Apache Parquet, el tipo de columna está integrado a los datos. El tipo de columna en la definición CREATE EXTERNAL TABLE debe coincidir con el tipo de columna en el archivo de datos. Si no coincide, recibirá un error similar al siguiente:

File 'https://s3bucket/location/file has an incompatible Parquet schema for column ‘s3://s3bucket/location.col1'. Column type: VARCHAR, Par

El mensaje de error puede estar truncado debido a un límite en la longitud del mensaje. Para recuperar el mensaje de error completo, incluidos el nombre y el tipo de columna, consulte la vista de sistema SVL_S3LOG.

En el siguiente ejemplo, se consulta SVL_S3LOG para la última consulta realizada.

select message from svl_s3log where query = pg_last_query_id() order by query,segment,slice;

A continuación, se muestra un ejemplo de un resultado que muestra el mensaje de error completo.

                            message
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-
Spectrum Scan Error. File 'https://s3bucket/location/file has an incompatible
Parquet schema for column ' s3bucket/location.col1'. 
Column type: VARCHAR, Parquet schema:\noptional int64 l_orderkey [i:0 d:1 r:0]\n

Para corregir el error, altere la tabla externa para que coincida con el tipo de columna del archivo Parquet.

Error de sintaxis al usar el DDL de Hive en Amazon Redshift

Amazon Redshift admite un lenguaje de definición de datos (DDL) para CREATE EXTERNAL TABLE que sea similar al DDL de Hive. No obstante, los dos tipos de DDL no siempre son exactamente iguales. Si copia el DDL de Hive para crear o modificar tablas externas de Amazon Redshift, es posible que enfrente errores de sintaxis. A continuación, se muestran ejemplos de diferencias entre Amazon Redshift y el DDL de Hive:

  • Amazon Redshift requiere comillas simples ('), mientras que el DDL de Hive admite comillas dobles (").

  • Amazon Redshift no admite el tipo de datos STRING. Utilice VARCHAR en su lugar.

Permiso para crear tablas temporales

Para ejecutar consultas de Redshift Spectrum, el usuario de la base de datos debe tener permiso para crear tablas temporales en ella. En el siguiente ejemplo, se concede un permiso temporal para la base de datos spectrumdb al grupo de usuarios spectrumusers.

grant temp on database spectrumdb to group spectrumusers;

Para obtener más información, consulte GRANT.

Rango no válido

Redshift Spectrum espera que los archivos de Amazon S3 que pertenecen a una tabla externa no se sobrescriban durante una consulta. Si eso ocurre, puede provocar el siguiente error.

Error: HTTP response error code: 416 Message: InvalidRange The requested range is not satisfiable

Para evitar el error, asegúrese de que los archivos de Amazon S3 no se sobrescriban mientras se consultan con Redshift Spectrum.

Número de versión de Parquet no válido

Redshift Spectrum comprueba los metadatos de cada archivo de Apache Parquet al que accede. Si la comprobación falla, puede provocar un error similar al siguiente:

File 'https://s3.region.amazonaws.com/s3bucket/location/file has an invalid version number

Existen dos razones habituales que pueden hacer que la comprobación falle:

  • El archivo Parquet se ha sobrescrito durante la consulta (consulte Rango no válido ).

  • El archivo de Parquet está dañado.