

# MSCK REPAIR TABLE
<a name="msck-repair-table"></a>

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](alter-table-drop-partition.md). 

## Considerações e limitações
<a name="msck-repair-table-considerations"></a>

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 obter mais informações, consulte [Particionar dados](partitions.md). 
+ Para as partições que não são compatíveis com o Hive, use [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) 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/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 1 em `s3://amzn-s3-demo-bucket1` e dados na tabela 2 em `s3://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, como `s3://amzn-s3-demo-bucket1` e `s3://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](alter-table-add-partition.md). 
+ `MSCK REPAIR TABLE` X não adiciona nomes de colunas de partição que começam com um sublinhado (\$1). Para contornar essa limitação, utilize [ALTER TABLE ADD PARTITION](alter-table-add-partition.md). 

## Resumo
<a name="synopsis"></a>

```
MSCK REPAIR TABLE table_name
```

## Exemplos
<a name="examples"></a>

```
MSCK REPAIR TABLE orders;
```

## Solução de problemas
<a name="msck-repair-table-troubleshooting"></a>

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](#msck-repair-table-troubleshooting-allow-gluebatchcreatepartition-in-the-policy) 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 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html). 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](cross-account-permissions.md).
+ **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](#msck-repair-table-troubleshooting-change-or-redefine-the-amazon-s3-path) 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](alter-table-add-partition.md).
+ **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](alter-table-drop-partition.md) para remover as partições excluídas dos metadados da tabela. Do mesmo modo, veja que [SHOW PARTITIONS](show-partitions.md) 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](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) ou o modelo [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) do 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](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` como parte da chamada de API `CreateTable` do AWS Glue ou do [modelo do CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html). 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
<a name="msck-repair-table-troubleshooting-allow-gluebatchcreatepartition-in-the-policy"></a>

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](data-sources-glue.md), 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 [AWSPolítica gerenciada pela : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy).

### Alterar ou redefinir o caminho do Amazon S3
<a name="msck-repair-table-troubleshooting-change-or-redefine-the-amazon-s3-path"></a>

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](alter-table-add-partition.md) 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines) e [Regras de nomeação de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html) no *Guia do usuário do Amazon S3*.