MSCK REPAIR TABLE
Use o comando MSCK REPAIR TABLE
para atualizar os metadados no catálogo depois de adicionar partições compatíveis com o Hive.
O comando MSCK REPAIR TABLE
verifica um sistema de arquivos, como o Amazon S3, para procurar se há partições compatíveis com o Hive que foram adicionadas ao sistema de arquivos após a criação da tabela. MSCK REPAIR TABLE
compara as partições nos metadados da tabela e as partições no S3. Se houver novas partições no local do S3 que você especificou quando criou a tabela, ele as adicionará aos metadados e à tabela do Athena.
Quando você adiciona partições físicas, os metadados no catálogo ficam inconsistentes com o layout dos dados no sistema de arquivos, e é necessário adicionar informações sobre as novas partições ao catálogo. Para atualizar os metadados, execute MSCK REPAIR TABLE
para que você possa consultar os dados nas novas partições do Athena.
nota
MSCK REPAIR TABLE
somente adiciona partições aos metadados, não as remove. Para remover partições dos metadados depois que elas foram excluídas manualmente do Amazon S3, execute o comando ALTER TABLE
. Para obter mais informações, consulte ALTER TABLE DROP
PARTITION. table-name
DROP
PARTITION
Considerações e limitações
Ao usar MSCK REPAIR TABLE
, lembre-se dos seguintes pontos:
-
É possível que demore algum tempo para adicionar todas as partições. Se expirar, essa operação estará em um estado incompleto, quando somente algumas partições são adicionadas ao catálogo. Você deve executar
MSCK REPAIR TABLE
na mesma tabela até que todas as partições sejam adicionadas. Para ter mais informações, consulte Particionar dados. -
Para as partições que não são compatíveis com o Hive, use ALTER TABLE ADD PARTITION para carregá-las para poder consultar os dados.
-
Os locais das partições que serão usados com o Athena devem aplicar o protocolo do
s3
(por exemplo,s3://amzn-s3-demo-bucket/
). No Athena, os locais que usam outros protocolos (por exemplo,folder
/s3a://
) resultam em falhas nas consultasbucket
/folder
/MSCK REPAIR TABLE
quando elas são executadas nas tabelas que os contêm. -
Como
MSCK REPAIR TABLE
verifica uma pasta e as subpastas para encontrar um esquema de partição correspondente, mantenha os dados das tabelas separadas em hierarquias de pastas separadas. Por exemplo, suponha que você tenha dados na tabela 1 ems3://amzn-s3-demo-bucket1
e dados na tabela 2 ems3://amzn-s3-demo-bucket1/table-2-data
. Se ambas as tabelas forem particionadas por string,MSCK REPAIR TABLE
adicionará as partições da tabela 2 à tabela 1. Para evitar isso, use estruturas de pastas separadas, comos3://amzn-s3-demo-bucket1
es3://amzn-s3-demo-bucket2
. Observe que esse comportamento é consistente com o Amazon EMR e o Apache Hive. -
Devido a um problema conhecido, a
MSCK REPAIR TABLE
falha silenciosamente quando os valores da partição contêm dois pontos (:
), por exemplo, quando o valor da partição é um carimbo de data/hora. Como solução alternativa, use ALTER TABLE ADD PARTITION. -
MSCK REPAIR TABLE
X não adiciona nomes de colunas de partição que começam com um sublinhado (_). Para contornar essa limitação, utilize ALTER TABLE ADD PARTITION.
Resumo
MSCK REPAIR TABLE table_name
Exemplos
MSCK REPAIR TABLE orders;
Solução de problemas
Depois que você executar MSCK REPAIR TABLE
, se o Athena não adicionar as partições à tabela no AWS Glue Data Catalog, verifique o seguinte:
-
Acesso do AWS Glue: certifique-se de que o perfil do AWS Identity and Access Management (IAM) tenha uma política que permita a ação
glue:BatchCreatePartition
. Para obter mais informações, consulte Permitir glue:BatchCreatePartition na política do IAM adiante neste documento. -
Acesso do Amazon S3: certifique-se de que o perfil tenha uma política com permissões suficientes para acessar o Amazon S3, incluindo a ação
s3:DescribeJob
. Para ver um exemplo das ações do Amazon S3 que devem ser permitidas, consulte o exemplo de política de bucket em Configurar o acesso entre contas do Athena aos buckets do Amazon S3. -
Uso de maiúsculas e minúsculas em chaves de objeto do Amazon S3: verifique se o caminho do Amazon S3 está em letras minúsculas em vez de minúsculas concatenadas (por exemplo,
userid
em vez deuserId
) ou useALTER TABLE ADD PARTITION
para especificar os nomes de chaves de objeto. Para obter mais informações, consulte Alterar ou redefinir o caminho do Amazon S3 adiante neste documento. -
Tempo limite de consulta esgotado: é melhor usar
MSCK REPAIR TABLE
para criar uma tabela pela primeira vez ou quando há incerteza sobre a paridade entre os dados e os metadados da partição. Se você usaMSCK REPAIR TABLE
para adicionar novas partições com frequência (por exemplo, diariamente) e sempre enfrenta problemas de tempo limite de consulta esgotado, considere usar ALTER TABLE ADD PARTITION. -
Partições ausentes do sistema de arquivos: se você excluir manualmente uma partição do Amazon S3 e executar
MSCK REPAIR TABLE
, poderá receber a mensagem de erro:Partições ausentes do sistema de arquivos
. Isso ocorre porqueMSCK REPAIR TABLE
não remove partições obsoletas dos metadados da tabela. Em vez disso, execute ALTER TABLE DROP PARTITION para remover as partições excluídas dos metadados da tabela. Do mesmo modo, veja que SHOW PARTITIONS lista apenas as partições nos metadados, e não as partições no sistema de arquivos. -
Erro “NullPointerException name is null” (O nome de NullPointerException é nulo)
Se você usar a operação de API do AWS Glue CreateTable ou o modelo
AWS::Glue::Table
do AWS CloudFormation para criar uma tabela para uso no Athena sem especificar a propriedadeTableType
e, depois, executar uma consulta DDL, comoSHOW CREATE TABLE
ouMSCK REPAIR TABLE
, poderá receber a mensagem de erroFALHA: o nome de NullPointerException é nulo
.Para resolver o erro, especifique um valor para o atributo TableInput
TableType
como parte da chamada de APICreateTable
do AWS Glue ou do modelo do AWS CloudFormation. Os valores possíveis paraTableType
sãoEXTERNAL_TABLE
ouVIRTUAL_VIEW
.Esse requisito é aplicado somente quando você cria uma tabela usando a operação de API do AWS Glue
CreateTable
ou o modelo doAWS::Glue::Table
. Se você criar uma tabela do Athena usando uma instrução DDL ou um crawler do AWS Glue, a propriedadeTableType
será definida automaticamente para você.
As seções a seguir apresentam mais detalhes.
Permitir glue:BatchCreatePartition na política do IAM
Analise as políticas do IAM vinculadas ao perfil que você usa para executar MSCK
REPAIR TABLE
. Quando você usa o AWS Glue Data Catalog com o Athena, a política do IAM deve permitir a ação glue:BatchCreatePartition
. 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 ou redefinir o caminho do Amazon S3
Se uma ou mais chaves de objeto no caminho do Amazon S3 estiverem em letras minúsculas concatenadas em vez de minúsculas, talvez MSCK REPAIR TABLE
não adicione as partições ao AWS Glue Data Catalog. Por exemplo, se o caminho do Amazon S3 incluir o nome da chave do objeto userId
, talvez as seguintes partições não sejam adicionadas ao AWS Glue Data Catalog:
s3://amzn-s3-demo-bucket/path/userId=1/ s3://amzn-s3-demo-bucket/path/userId=2/ s3://amzn-s3-demo-bucket/path/userId=3/
Para resolver esse problema, execute um dos seguintes procedimentos:
-
Use letras minúsculas em vez de minúsculas concatenadas ao criar chaves de objeto do Amazon S3:
s3://amzn-s3-demo-bucket/path/userid=1/ s3://amzn-s3-demo-bucket/path/userid=2/ s3://amzn-s3-demo-bucket/path/userid=3/
-
Use ALTER TABLE ADD PARTITION para redefinir o local, como no seguinte exemplo:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (userId=1) LOCATION 's3://amzn-s3-demo-bucket/path/userId=1/' PARTITION (userId=2) LOCATION 's3://amzn-s3-demo-bucket/path/userId=2/' PARTITION (userId=3) LOCATION 's3://amzn-s3-demo-bucket/path/userId=3/'
Embora os nomes de chave de objeto do Amazon S3 possam usar letras maiúsculas, os nomes de bucket do Amazon S3 devem estar sempre em letras minúsculas. Para obter mais informações, consulte Diretrizes de nomeação de chave de objeto e Regras de nomeação de bucket no Guia do usuário do Amazon S3.