Quando executo minha consulta MSCK REPAIR TABLE, o Amazon Athena retorna uma lista de partições. No entanto, o Athena não consegue adicionar as partições à tabela no catálogo de dados do AWS Glue.
Breve descrição
Os seguintes motivos comuns fazem com que o Athena não adicione partições às tabelas no Catálogo de Dados:
- O usuário ou função do AWS Identity and Access Management (IAM) não tem uma política que permita a ação glue:BatchCreatePartition.
- O caminho do Amazon Simple Storage Service (Amazon S3) está em letras maiúsculas em vez de minúsculas.
- As partições não estão formatadas no formato do estilo Hive, ano=2023/mês=01/dia=01. Em vez disso, as partições estão no formato não Hive, /2023/01/01/.
Resolução
Permitir glue:BatchCreatePartition na política do IAM
Analise as políticas do IAM anexadas ao usuário ou função que é usado para executar o MSCK REPAIR TABLE. Quando você usa o catálogo de dados com o Athena, a política do IAM deve permitir a ação glue:BatchCreatePartition. Se a política não permitir essa ação, o Athena não poderá adicionar partições ao metastore. Para ver um exemplo de uma política do IAM que permite a ação glue:BatchCreatePartition, consulte Política gerenciada pela AWS: AmazonAthenaFullAccess.
Alterar o caminho do Amazon S3 para letras minúsculas
Para que o MSCK REPAIR TABLE adicione as partições ao catálogo de dados, o nome do caminho do Amazon S3 deve estar em letras minúsculas.
Por exemplo, se o caminho do Amazon S3 estiver em camel case, userId, as seguintes partições não serão adicionadas ao Catálogo de Dados:
- s3://awsdoc-example-bucket/path/userId=1/
- s3://awsdoc-example-bucket/path/userId=2/
- s3://awsdoc-example-bucket/path/userId=3/
Para resolver esse problema, use o userid em minúsculas:
- s3://awsdoc-example-bucket/path/userid=1/
- s3://awsdoc-example-bucket/path/userid=2/
- s3://awsdoc-example-bucket/path/userid=3/
Executar o comando ALTER TABLE ADD PARTITION
Execute o comando ALTER TABLE ADD PARTITION para adicionar partições à tabela de cola para dados particionados no estilo Hive e não no estilo Hive.
A cláusula LOCATION é necessária para dados particionados que não são do estilo Hive. Certifique-se de incluir o caminho completo do Amazon S3 para o prefixo que contém os dados da partição:
ALTER TABLE orders ADD
PARTITION (year = '2023', month = '01', day ='01')
LOCATION 's3://mystorage/path/to/test/'
PARTITION (year = '2023', month = '01', day ='02')
LOCATION 's3://mystorage/path/to/test/';
Informações relacionadas
Particionamento de dados no Athena
Ações, recursos e chaves de condição para o Amazon Athena
Ações, recursos e chaves de condição para o AWS Glue