Ir para o conteúdo

Por que não recebo nenhum registro quando consulto minha tabela do Athena?

7 minuto de leitura
0

Executei uma declaração CREATE TABLE no Amazon Athena com as colunas esperadas e seus tipos de dados. Mas, quando executo a consulta SELECT * FROM table-name, recebo a saída "Zero registros retornados".

Resolução

Observação: se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Há vários motivos pelos quais a consulta SELECT * FROM table-name pode retornar zero registros. Com base no seu caso de uso, consulte a seção relacionada para ver os motivos comuns e as etapas de solução de problemas.

Solucionar problemas de partições do AWS Glue

Verifique as configurações do seu crawler

Se você usa um crawler, confirme se ele aponta para o bucket do Amazon Simple Storage Service (Amazon S3) em vez de um arquivo específico. Por exemplo, use s3://amzn-s3-demo-bucket/new em vez de s3://amzn-s3-demo-bucket/new/data.json.

Use o caminho LOCATION correto

Verifique se o caminho LOCATION do Amazon S3 para os dados de entrada está correto. Certifique-se de que o caminho do bucket do S3 não inclua um arquivo ou um curinga. Por exemplo, use a LOCATION s3://amzn-s3-demo-bucket/new em vez de s3://amzn-s3-demo-bucket/new/data.json.

Use uma única barra no caminho LOCATION

No Athena, não é possível usar caminhos de localização de tabelas que incluam uma barra dupla (//). Por exemplo, o caminho LOCATION a seguir retorna resultados vazios: s3://amzn-s3-demo-bucket/myprefix//input//

Para copiar os arquivos para um local que não tenha barras duplas, execute o seguinte comando cp da AWS CLI:

aws s3 cp s3://amzn-s3-demo-bucket/myprefix//input// s3://amzn-s3-demo-bucket/myprefix/input/ --recursive

Observação: substitua amzn-s3-demo-bucket/myprefix//input// pelo seu caminho de localização da tabela atual e amzn-s3-demo-bucket/myprefix/input/ pelo seu novo caminho de localização da tabela.

É uma prática recomendada incluir somente sublinhados ou letras maiúsculas nos nomes das colunas da sua tabela. Por exemplo, é possível nomear uma coluna como table_name, mas não como table-name.

Observação: o AWS Glue e o Athena não conseguem ler camel case, letras maiúsculas ou caracteres especiais além do sublinhado.

Crie prefixos do Amazon S3 para cada tabela

Os crawlers do AWS Glue criam tabelas separadas para dados armazenados no mesmo prefixo do Amazon S3. No entanto, quando você consulta essas tabelas no Athena, obtém zero registros. Por exemplo, sua consulta do Athena retorna zero registros se a localização da tabela for semelhante aos seguintes exemplos:

  • s3://amzn-s3-demo-bucket/table1.csv
  • s3://amzn-s3-demo-bucket/table2.csv

Para resolver esse problema, crie prefixos individuais do Amazon S3 para cada tabela, semelhantes aos seguintes exemplos:

  • s3://amzn-s3-demo-bucket/table1/table1.csv
  • s3://amzn-s3-demo-bucket/table2/table2.csv

Em seguida, execute a consulta a seguir para atualizar a localização da sua tabela:

ALTER TABLE table1 SET LOCATION 's3://amzn-s3-demo-bucket/table1';

Observação: substitua amzn-s3-demo-bucket pelo nome do seu bucket e table1 pelo nome da sua tabela.

Carregue suas partições

O Athena cria metadados somente quando você cria uma tabela. Os dados são analisados somente quando você executa a consulta. Se sua tabela tiver partições definidas, talvez as partições ainda não tenham sido carregadas no Catálogo de dados do AWS Glue ou no catálogo de dados interno do Athena.

Se o Athena oferecer suporte ao formato das suas partições, execute o MSCK REPAIR TABLE para carregar os metadados de uma partição no catálogo. Por exemplo, você tem uma tabela particionada por Ano. Nesse caso, o Athena espera encontrar os dados em caminhos do Amazon S3 semelhantes aos seguintes exemplos:

  • 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

Se seus dados existirem nos caminhos do Amazon S3 que o Athena espera, repare a tabela com um comando semelhante ao seguinte:

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/';

Depois que o Athena criar a tabela, execute o seguinte comando para carregar as informações da partição:

MSCK REPAIR TABLE Employee;

Depois que o Athena carregar os dados, execute a seguinte consulta novamente:

SELECT * FROM Employee;

Se o Athena não oferecer suporte ao formato de suas partições, ou se as partições estiverem em caminhos diferentes do Amazon S3, execute ALTER TABLE ADD PARTITION em cada partição.

Por exemplo, suponha que seus dados estejam localizados nos seguintes caminhos de exemplo do 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

Nos caminhos anteriores, execute um comando semelhante ao exemplo a seguir:

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/'

Depois que o Athena carregar os dados, execute a seguinte consulta novamente:

SELECT * FROM Employee;

Verifique os nomes do seu arquivo

Verifique se os nomes do seu arquivo não começam com um sublinhado ou um ponto.

O Athena considera esses arquivos como espaços reservados e os ignora quando você processa uma consulta. Se todos os arquivos no seu caminho do Amazon S3 tiverem nomes que comecem com um sublinhado ou um ponto, você obtém zero registros.

Por exemplo, se você processar uma consulta com os seguintes arquivos em seu caminho do Amazon S3, recebe zero registros:

  • s3://amzn-s3-demo-bucket/athena/inputdata/_file1
  • s3://amzn-s3-demo-bucket/athena/inputdata/.file2

Observação: se o seu caminho do Amazon S3 incluir espaços reservados e arquivos cujos nomes começam com caracteres diferentes, o Athena ignora somente os espaços reservados e consulta os outros arquivos. Como resultado, é possível obter um ou mais registros.

Solucione problemas de projeção de partições

Confirme se seus valores estão dentro dos limites do intervalo

Se seus valores estiverem além dos limites do intervalo definido para projeção de partição, sua consulta retorna zero linhas.

Por exemplo, seus dados começam em 2020 e você os define da seguinte forma: projection.timestamp.range'='2020/01/01,NOW

Se você executar a seguinte consulta, ela é concluída com êxito, mas retorna zero linhas:

SELECT * FROM table-name WHERE timestamp = '2019/02/02'

Verifique o esquema de particionamento do seu modelo de armazenamento

Se o seu local de armazenamento do Amazon S3 não usa o padrão de localização .../column=value..., você deve especificar um esquema de particionamento personalizado do Amazon S3. Se você não definir um esquema personalizado, sua consulta retorna zero registros.

Use o modelo de armazenamento personalizado correto

Se você usar um modelo personalizado, certifique-se de que o modelo permite que o Athena crie seus locais de partição. Além disso, certifique-se de que cada espaço reservado e o caminho do Amazon S3 terminem com uma única barra.

Por exemplo, você define uma coluna de partição de ano com a declaração DDL (linguagem de definição de dados) PARTITIONED BY (string de ano) e seu local de armazenamento é s3://amzn-s3-demo-bucket/athena/inputdata/Year=2022/. Esse local retorna zero registros. Para resolver esse problema, atualize o local de armazenamento para s3://amzn-s3-demo-bucket/athena/inputdata/Year=${year}.

Verifique as propriedades da sua partição

Se você tiver colunas de partição com o tipo de coluna de partição enum, integer, date, or injected, certifique-se de configurar corretamente as propriedades da partição. As configurações devem permitir que o Athena crie locais de partição que correspondam à estrutura dos seus dados no Amazon S3.

Por exemplo, você tem dados relacionados ao horário que chegam diariamente 1 hora depois da meia-noite no local s3://amzn-s3-demo-bucket/athena/inputdata/2022-01-01-01-00.

Neste exemplo, a tabela do Athena usa estas propriedades de partição:

'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'

As consultas executadas na tabela de exemplo retornam zero registros porque os locais do arquivo da propriedade correspondem à meia-noite s3://amzn-s3-demo-bucket/athena/inputdata/2022-01-01-00-00.

Para resolver esse problema, defina a propriedade projection.dt.range como 2022-01-01-01-00,NOW.

Informações relacionadas

Criar tabelas no Athena

Usar um crawler para adicionar uma tabela

Configurar a projeção de partições

AWS OFICIALAtualizada há 8 meses