¿Por qué no recibo ningún registro cuando consulto mi tabla de Athena?
He ejecutado una instrucción CREATE TABLE en Amazon Athena con las columnas esperadas y sus tipos de datos. Sin embargo, cuando ejecuto la consulta SELECT * FROM de nombre de tabla, recibo el resultado «Zero records returned».
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Hay varios motivos por los que la consulta SELECT\ * FROM table-name puede devolver cero registros. Según tu caso de uso, consulta la sección relacionada para conocer los motivos comunes y los pasos de solución de problemas.
Solución de problemas de particiones de AWS Glue
Comprobación de la configuración del rastreador
Si usas un rastreador, confirma que este apunte al bucket de Amazon Simple Storage Service (Amazon S3) en lugar de a un archivo específico. Por ejemplo, usa s3://amzn-s3-demo-bucket/new en lugar de s3://amzn-s3-demo-bucket/new/data.json.
Uso de la ruta de UBICACIÓN correcta
Comprueba que la ruta de UBICACIÓN de Amazon S3 para los datos de entrada sea correcta. Además, asegúrate de que la ruta del bucket de S3 no incluya ningún archivo ni comodín. Por ejemplo, usa la UBICACIÓN s3://amzn-s3-demo-bucket/new en lugar de s3://amzn-s3-demo-bucket/new/data.json.
Uso de una sola barra en la ruta UBICACIÓN
En Athena, no puedes usar rutas de ubicación de tablas que incluyan una barra doble (//). Por ejemplo, la siguiente ruta de UBICACIÓN devuelve resultados vacíos: s3://amzn-s3-demo-bucket/myprefix//input//.
Para copiar los archivos a una ubicación que no tenga barras dobles, ejecuta el siguiente comando cp de AWS CLI:
aws s3 cp s3://amzn-s3-demo-bucket/myprefix//input// s3://amzn-s3-demo-bucket/myprefix/input/ --recursive
Nota: Sustituye amzn-s3-demo-bucket/myprefix//input// por la ruta de ubicación de la tabla actual y amzn-s3-demo-bucket/myprefix/input/ por la nueva ruta de ubicación de la tabla.
Se recomienda incluir solo guiones bajos o mayúsculas en los nombres de las columnas de la tabla. Por ejemplo, puedes asignar a una columna el nombre table_name, pero no table-name.
Nota: AWS Glue y Athena no pueden leer mayúsculas intercaladas, caracteres en mayúscula ni caracteres especiales distintos del guión bajo.
Creación de prefijos de Amazon S3 para cada tabla
Los rastreadores de AWS Glue crean tablas independientes para los datos que se almacenan en el mismo prefijo de Amazon S3. Sin embargo, cuando consultas esas tablas en Athena, no obtienes ningún registro. Por ejemplo, la consulta de Athena devuelve cero registros si la ubicación de la tabla es similar a los siguientes ejemplos:
- s3://amzn-s3-demo-bucket/table1.csv
- s3://amzn-s3-demo-bucket/table2.csv
Para resolver este problema, crea prefijos de Amazon S3 individuales para cada tabla de forma similar a los siguientes ejemplos:
- s3://amzn-s3-demo-bucket/table1/table1.csv
- s3://amzn-s3-demo-bucket/table2/table2.csv
A continuación, ejecuta la siguiente consulta para actualizar la ubicación de la tabla:
ALTER TABLE table1 SET LOCATION 's3://amzn-s3-demo-bucket/table1';
Nota: Sustituye amzn-s3-demo-bucket por el nombre de tu bucket y table1 por el nombre de tu tabla.
Carga de particiones
Athena crea metadatos solo cuando se crea una tabla. Los datos solo se analizan cuando se ejecuta la consulta. Si la tabla tiene particiones definidas, es posible que el Catálogo de datos de AWS Glue o el catálogo de datos interno de Athena no tengan cargadas las particiones.
Si Athena admite el formato de sus particiones, ejecuta MSCK REPAIR TABLE para cargar los metadatos de una partición en el catálogo. Por ejemplo, tienes una tabla que está particionada por Año. En este caso, Athena espera encontrar los datos en las rutas de Amazon S3 similares a las de los siguientes ejemplos:
- s3://amzn-s3-demo-bucket/athena/inputdata/year=2020/data.csv
- s3://amzn-s3-demo-bucket/athena/inputdata/year=2019/data.csv
- s3://amzn-s3-demo-bucket/athena/inputdata/year=2018/data.csv
Si tus datos existen en las rutas de Amazon S3 que Athena espera, repara la tabla con un comando similar al siguiente:
CREATE EXTERNAL TABLE Employee ( Id INT, Name STRING, Address STRING ) PARTITIONED BY (year INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://amzn-s3-demo-bucket/athena/inputdata/';
Después de que Athena cree la tabla, ejecuta el siguiente comando para cargar la información de la partición:
MSCK REPAIR TABLE Employee;
Cuando Athena cargue los datos, vuelve a ejecutar la siguiente consulta:
SELECT * FROM Employee;
Si Athena no admite el formato de tus particiones o las particiones se encuentran en rutas de Amazon S3 diferentes, ejecuta ALTER TABLE ADD PARTITION para cada partición.
Por ejemplo, digamos que los datos se encuentran en las siguientes rutas de Amazon S3:
- s3://amzn-s3-demo-bucket/athena/inputdata/2020/data.csv
- s3://amzn-s3-demo-bucket/athena/inputdata/2019/data.csv
- s3://amzn-s3-demo-bucket/athena/inputdata/2018/data.csv
En las rutas anteriores, ejecuta un comando similar al siguiente ejemplo:
ALTER TABLE Employee ADD PARTITION (year=2020) LOCATION 's3://amzn-s3-demo-bucket/athena/inputdata/2020/' PARTITION (year=2019) LOCATION 's3://amzn-s3-demo-bucket/athena/inputdata/2019/' PARTITION (year=2018) LOCATION 's3://amzn-s3-demo-bucket/athena/inputdata/2018/'
Cuando Athena cargue los datos, vuelve a ejecutar la siguiente consulta:
SELECT * FROM Employee;
Comprobación de los nombres de los archivos
Comprueba que los nombres de los archivos no comiencen por un guion bajo (_) por un punto.
Athena considera estos archivos marcadores de posición y los ignora cuando se procesa una consulta. Si todos los archivos de la ruta de Amazon S3 tienen nombres que comienzan por un guion bajo o un punto, no obtendrá ningún registro.
Por ejemplo, si procesas una consulta con los siguientes archivos en tu ruta de Amazon S3, no obtendrás ningún registro:
- s3://amzn-s3-demo-bucket/athena/inputdata/_file1
- s3://amzn-s3-demo-bucket/athena/inputdata/.file2
Nota: Si la ruta de Amazon S3 incluye marcadores de posición y archivos cuyos nombres comienzan con caracteres diferentes, Athena solo ignora los marcadores de posición y consulta los demás archivos. Como resultado, es posible que obtengas uno o más registros.
Solución de problemas de proyección de particiones
Confirma que tus valores estén dentro de los límites del rango
Si los valores superan los límites del rango definidos para la proyección de particiones, la consulta no devuelve ninguna fila.
Por ejemplo, si tus datos comienzan en 2020 y los defines de la siguiente manera: projection.timestamp.range'='2020/01/01,NOW.
Si ejecutas esta consulta y esta se completa correctamente, pero no devuelve ninguna fila:
SELECT * FROM table-name WHERE timestamp = '2019/02/02'
Verificación del esquema de particionamiento de la plantilla de almacenamiento
Si tu ubicación de almacenamiento de Amazon S3 no usa el patrón de ubicación .../column=value..., entonces debes especificar un esquema de particionamiento personalizado de Amazon S3. Si no defines un esquema personalizado, la consulta no devolverá ningún registro.
Uso de la plantilla de almacenamiento personalizada correcta
Si utilizas una plantilla personalizada, asegúrate de que la plantilla permita a Athena crear las ubicaciones de las particiones. Además, asegúrate de que cada marcador de posición y la ruta de Amazon S3 terminen con una sola barra diagonal.
Por ejemplo, defines una columna de partición year con la instrucción del lenguaje de definición de datos (DDL) PARTITIONED BY (cadena de años) y la ubicación de almacenamiento es s3://amzn-s3-demo-bucket/athena/inputdata/Year=2022/. Esta ubicación no devuelve ningún registro. Para resolver este problema, actualiza la ubicación de almacenamiento a s3://amzn-s3-demo-bucket/athena/inputdata/Year=${year}.
Verificación de las propiedades de tu partición
Si tienes columnas de partición con el tipo de columna de partición enum, integer, date o injected, asegúrate de configurar correctamente las propiedades de la partición. La configuración debe permitir que Athena cree ubicaciones de partición que coincidan con la estructura de los datos en Amazon S3.
Por ejemplo, tienes datos relacionados con la hora que llegan a diario una hora después de medianoche en la ubicación s3://amzn-s3-demo-bucket/athena/inputdata/2022-01-01-01-00.
En este ejemplo, la tabla de Athena utiliza la siguientes propiedades de partición:
'projection.dt.format' = 'yyyy-MM-dd-HH-mm','projection.dt.range' = '2022-01-01-00-00,NOW', 'projection.dt.interval' = '1', 'projection.dt.interval.unit' = 'DAYS'
Las consultas que se ejecutan en la tabla de ejemplo no devuelven ningún registro porque las ubicaciones de los archivos de la propiedad corresponden a medianoche ens3://amzn-s3-demo-bucket/athena/inputdata/2022-01-01-00-00.
Para resolver este problema, define la propiedad projection.dt.range en 2022-01-01-01-00,NOW.
Información relacionada
- Temas
- Analytics
- Etiquetas
- Amazon Athena
- Idioma
- Español
Vídeos relacionados


Contenido relevante
preguntada hace 2 años
- Respuesta aceptada
preguntada hace 2 años