MSCK REPAIR TABLE - Amazon Athena

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 table-name DROP PARTITION. Para obter mais informações, consulte ALTER TABLE 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 no Athena.

  • 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://bucket/folder/). No Athena, os locais que usam outros protocolos (por exemplo, s3a://bucket/folder/) resultam em falhas nas consultas 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 A em s3://table-a-data e dados na tabela B em s3://table-a-data/table-b-data. Se as duas tabelas forem particionadas por string, MSCK REPAIR TABLE adicionará as partições da tabela B à tabela A. Para evitar isso, use estruturas de pastas separadas, como s3://table-a-data e s3://table-b-data. 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 Acesso entre contas no 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 de userId) ou use ALTER 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ê usa MSCK 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 porque MSCK 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 propriedade TableType e, depois, executar uma consulta DDL, como SHOW CREATE TABLE ou MSCK REPAIR TABLE, poderá receber a mensagem de erro FALHA: o nome de NullPointerException é nulo.

    Para resolver o erro, especifique um valor para o atributo TableInput TableType como parte da chamada de API CreateTable do AWS Glue ou do modelo do AWS CloudFormation. Os valores possíveis para TableType são EXTERNAL_TABLE ou VIRTUAL_VIEW.

    Esse requisito é aplicado somente quando você cria uma tabela usando a operação de API do AWS Glue CreateTable ou o modelo do AWS::Glue::Table. Se você criar uma tabela do Athena usando uma instrução DDL ou um crawler do AWS Glue, a propriedade TableType 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://DOC-EXAMPLE-BUCKET/path/userId=1/ s3://DOC-EXAMPLE-BUCKET/path/userId=2/ s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/path/userid=1/ s3://DOC-EXAMPLE-BUCKET/path/userid=2/ s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/path/userId=1/' PARTITION (userId=2) LOCATION 's3://DOC-EXAMPLE-BUCKET/path/userId=2/' PARTITION (userId=3) LOCATION 's3://DOC-EXAMPLE-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.