

# Personalizar o comportamento do Crawler
<a name="crawler-configuration"></a>

Ao configurar um Crawler do AWS Glue, há várias opções para definir o comportamento do seu crawler.
+ **Crawls incrementais**: é possível configurar um crawler para executar crawls incrementais para adicionar somente novas partições ao esquema da tabela. 
+ **Índices de partição**: um crawler cria índices de partição para destinos do Amazon S3 e do Delta Lake por padrão para fornecer uma pesquisa eficiente para partições específicas.
+ **Acelerar o tempo do crawl usando eventos do Amazon S3**: é possível configurar um crawler para usar eventos do Amazon S3 a fim de identificar as alterações entre dois crawls listando todos os arquivos da subpasta que disparou o evento em vez de listar o destino completo do Amazon S3 ou do Catálogo de dados.
+ **Manipulação de alterações no esquema**: você pode impedir que um crawler faça qualquer alteração no esquema existente. Você pode usar o Console de gerenciamento da AWS ou a API do AWS Glue para configurar como o seu crawler processa determinados tipos de alterações. 
+ **Um único esquema para vários caminhos do Amazon S3**: você pode configurar um crawler para criar um único esquema para cada caminho do S3, se os dados forem compatíveis.
+ **Localização da tabela e níveis de particionamento**: a opção de crawler no nível da tabela fornece a flexibilidade de informar ao crawler onde as tabelas estão localizadas e como você deseja que as partições sejam criadas. 
+ **Limite da tabela**: é possível especificar o número máximo de tabelas que o crawler tem permissão para criar especificando um limite da tabela.
+ **Credenciais do AWS Lake Formation**: é possível configurar um crawler para usar credenciais do Lake Formation para acessar um datastore do Amazon S3 ou uma tabela do Catálogo de dados com uma localização subjacente do Amazon S3 dentro da mesma Conta da AWS ou de outra Conta da AWS. 

 Para obter mais informações sobre como usar o console do AWS Glue para adicionar um crawler, consulte [Configurar um crawler](define-crawler.md). 

**Topics**
+ [Programar crawls incrementais para adicionar novas partições](incremental-crawls.md)
+ [Gerar índices de partição](crawler-configure-partition-indexes.md)
+ [Como impedir que o crawler altere um esquema existente](crawler-schema-changes-prevent.md)
+ [Criar um esquema único para cada caminho de inclusão do Amazon S3](crawler-grouping-policy.md)
+ [Especificar o local da tabela e o nível de particionamento](crawler-table-level.md)
+ [Especificar o número máximo de tabelas que o crawler pode criar](crawler-maximum-number-of-tables.md)
+ [Configurar um crawler para usar credenciais do Lake Formation](crawler-lf-integ.md)
+ [Acelerar crawls usando notificações de eventos do Amazon S3](crawler-s3-event-notifications.md)

# Programar crawls incrementais para adicionar novas partições
<a name="incremental-crawls"></a>

É possível configurar crawls incrementais de uma execução do Crawler do AWS Glue para adicionar somente novas partições ao esquema da tabela. Quando o crawler é executado pela primeira vez, ele executa um crawl completo para processar toda a fonte de dados para registrar o esquema completo e todas as partições existentes no AWS Glue Data Catalog.

Os crawls subsequentes após o crawl completo inicial serão incrementais, em que o crawler identifica e adiciona somente as novas partições que foram introduzidas desde o crawl anterior. Essa abordagem resulta em tempos de crawl mais rápidos, pois o crawler não precisa mais processar toda a fonte de dados para cada execução, mas se concentra apenas nas novas partições. 

**nota**  
Os crawls incrementais não detectam modificações ou exclusões de partições existentes. Essa configuração é mais adequada para fontes de dados com um esquema estável. Se ocorrer uma única alteração importante no esquema, é recomendável configurar temporariamente o crawler para realizar um crawl completo a fim de capturar o novo esquema com precisão e, em seguida, voltar ao modo de crawling incremental. 

O diagrama a seguir mostra que, com a configuração de crawl incremental ativada, o crawler detectará e adicionará somente a pasta recém-adicionada, month=March, ao catálogo.

![\[O diagrama a seguir mostra que os arquivos do mês de março foram adicionados.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawlers-s3-folders-new.png)


Siga estas etapas para atualizar seu crawler para realizar crawls incrementais:

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Escolha um crawler que você deseja configurar para fazer o crawl incrementalmente.

1. Escolha **Editar**.

1. Escolha a **Etapa 2. Escolha as fontes de dados e os classificadores**.

1. Escolha a fonte de dados em que você deseja fazer o crawl incrementalmente. 

1. Escolha **Editar**.

1. Escolha **Fazer crawl somente em novas subpastas** em **Execuções subsequentes do crawler**.

1. Selecione **Atualizar**.

Para criar uma programação para um crawler, consulte [Programar um crawler](schedule-crawler.md).

------
#### [ AWS CLI ]

```
aws glue update-crawler \
 --name myCrawler \
 --recrawl-policy RecrawlBehavior=CRAWL_NEW_FOLDERS_ONLY \
 --schema-change-policy UpdateBehavior=LOG,DeleteBehavior=LOG
```

------

**Notas e restrições**  
Quando essa opção está ativada, não é possível alterar os armazenamentos de dados de destino do Amazon S3 ao editar o crawler. Essa opção afeta determinadas definições de configuração do crawler. Quando ativada, ela força o comportamento de atualização e de exclusão do crawler para `LOG`. Isto significa que:
+ Se descobrir objetos nos quais os esquemas não são compatíveis, o crawler não adicionará os objetos no Catálogo de Dados e adicionará esse detalhe como um log no CloudWatch Logs.
+ Ele não atualizará objetos excluídos no Catálogo de dados.

# Gerar índices de partição
<a name="crawler-configure-partition-indexes"></a>

O Catálogo de dados é compatível com a criação de índices de partição para fornecer uma pesquisa eficiente de partições específicas. Para obter mais informações, consulte [Criar índices de partição](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html). O crawler do AWS Glue cria índices de partição para destinos do Amazon S3 e do Delta Lake por padrão.

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Quando você define um crawler, a opção **Criar índices de partição automaticamente** é habilitada por padrão em **Opções avançadas** na página **Definir saída e programação**.

   Para desabilitar essa opção, você pode desmarcar a caixa de seleção **Criar índices de partição automaticamente** no console. 

1. Conclua a configuração do crawler e escolha **Criar crawler**.

------
#### [ AWS CLI ]

 Também é possível desabilitar essa opção usando a AWS CLI, defina o `CreatePartitionIndex ` no parâmetro `configuration`. O valor padrão é true.

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CreatePartitionIndex": false }'
```

------

## Notas de uso para índices de partição
<a name="crawler-configure-partition-indexes-usage-notes"></a>
+ As tabelas criadas pelo crawler não têm a variável `partition_filtering.enabled` por padrão. Para obter mais informações, consulte [AWS Glue partition indexing and filtering](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index).
+ A criação de índices de partição para partições criptografadas não é compatível.

# Como impedir que o crawler altere um esquema existente
<a name="crawler-schema-changes-prevent"></a>

 Você pode impedir que os Crawler do AWS Glues façam qualquer alteração de esquema no Catálogo de Dados quando eles são executados. Por padrão, os crawlers atualizam o esquema no Catálogo de Dados para corresponder à fonte de dados que está recebendo um crawl. No entanto, em alguns casos, talvez você queira impedir que o Crawler modifique o esquema existente, especialmente se transformou ou limpou os dados e não quer que o esquema original substitua as alterações.

 Siga estas etapas para configurar seu crawler para não substituir o esquema existente em uma definição de tabela. 

------
#### [  Console de gerenciamento da AWS  ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Escolha um crawler na lista e escolha **Editar**.

1. Escolha **Etapa 4: definir a saída e a programação**.

1. Em **Opções avançadas**, escolha **Adicionar somente novas colunas** ou **Ignorar a alteração e não atualizar a tabela no Catálogo de Dados**. 

1.  Também é possível definir uma opção de configuração para **Atualizar todas as partições novas e existentes com metadados da tabela**. Isso define os esquemas de partição que serão herdados da tabela. 

1. Selecione **Atualizar**.

------
#### [ AWS CLI ]

O exemplo a seguir mostra como configurar um crawler para não alterar o esquema existente, apenas adicionar novas colunas:

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
```

O exemplo a seguir mostra como configurar um crawler para não alterar o esquema existente e não adicionar novas colunas:

```
aws glue update-crawler \
  --name myCrawler \
  --schema-change-policy UpdateBehavior=LOG \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }}}'
```

------
#### [ API ]

Se você não quiser que um esquema de tabela seja alterado quando um crawler for executado, defina a política de alteração de esquema como `LOG`. 

Quando você configura o crawler usando a API, defina os seguintes parâmetros:
+ Defina o campo `UpdateBehavior` na estrutura `SchemaChangePolicy` para `LOG`.
+  Defina o campo `Configuration` com uma representação de string do objeto JSON a seguir na API do crawler, por exemplo: 

  ```
  {
     "Version": 1.0,
     "CrawlerOutput": {
        "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }
     }
  }
  ```

------

# Criar um esquema único para cada caminho de inclusão do Amazon S3
<a name="crawler-grouping-policy"></a>

Por padrão, quando um crawler define tabelas para dados armazenados no Amazon S3, ele considera a compatibilidade dos dados e a similaridade do esquema. Os fatores de compatibilidade de dados que ele considera incluem: se os dados são do mesmo formato (por exemplo, JSON), do mesmo tipo de compactação (por exemplo, GZIP), a estrutura do caminho do Amazon S3 e outros atributos de dados. Similaridade de esquema é uma medida de até que ponto os esquemas de objetos do Amazon S3 separados são semelhantes.

Para ajudar a ilustrar essa opção, suponha que você defina um crawler com um caminho de inclusão `s3://amzn-s3-demo-bucket/table1/`. Quando o crawler é executado, ele localiza dois arquivos JSON com as seguintes características:
+ **Arquivo 1** – `S3://amzn-s3-demo-bucket/table1/year=2017/data1.json`
+ *Conteúdo do arquivo* – `{“A”: 1, “B”: 2}`
+ *Esquema* – `A:int, B:int`
+ **Arquivo 2** – `S3://amzn-s3-demo-bucket/table1/year=2018/data2.json`
+ *Conteúdo do arquivo* – `{“C”: 3, “D”: 4}`
+ *Esquema* – `C: int, D: int`

Por padrão, o crawler cria duas tabelas, chamadas `year_2017` e `year_2018`, porque os esquemas não são suficientemente semelhantes. No entanto, se a opção **Create a single schema for each S3 path (Criar um único esquema para cada caminho do S3)** for selecionada, e se os dados forem compatíveis, o crawler criará uma tabela. A tabela tem o esquema `A:int,B:int,C:int,D:int` e `partitionKey` `year:string`.

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Ao configurar um novo crawler, em **Saída e programação**, selecione a opção **Criar um único esquema para cada caminho do S3** em Opções avançadas. 

------
#### [ AWS CLI ]

Você pode configurar um crawler para `CombineCompatibleSchemas` em uma definição de tabela comum quando possível. Com essa opção, o crawler ainda considera a compatibilidade dos dados, mas ignora a semelhança dos esquemas específicos ao avaliar objetos do Amazon S3 no caminho de inclusão especificado.

Quando você configurar o crawler usando a AWS CLI, defina a seguinte opção de configuração:

```
aws glue update-crawler \
   --name myCrawler \
   --configuration '{"Version": 1.0, "Grouping": {"TableGroupingPolicy": "CombineCompatibleSchemas" }}'
```

------
#### [ API ]

Quando você configurar o crawler usando a API, defina a seguinte opção de configuração:

 Defina o campo `Configuration` com uma representação de string do objeto JSON a seguir na API do crawler, por exemplo: 

```
{
   "Version": 1.0,
   "Grouping": {
      "TableGroupingPolicy": "CombineCompatibleSchemas" }
}
```

------

# Especificar o local da tabela e o nível de particionamento
<a name="crawler-table-level"></a>

Por padrão, quando um crawler define tabelas para dados armazenados no Amazon S3, ele tenta mesclar esquemas e criar tabelas de nível superior (`year=2019`). Em alguns casos, você pode esperar que o crawler crie uma tabela para a pasta `month=Jan`, mas em vez disso, o crawler cria uma partição desde o momento em que uma pasta irmã (`month=Mar`) tenha sido mesclada na mesma tabela.

A opção de crawler no nível da tabela fornece a flexibilidade de informar ao crawler onde as tabelas estão localizadas e como você deseja que as partições sejam criadas. Quando você especifica um **Table level** (Nível da tabela), ela é criada nesse nível absoluto a partir do bucket do Amazon S3.

![\[Agrupamento de crawler com nível de tabela especificado como nível dois.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-table-level1.jpg)


 Ao configurar o crawler no console, você pode especificar um valor para a opção **Table level** (Nível da tabela) do Crawler. O valor deve ser um inteiro positivo que indica o local da tabela (o nível absoluto no conjunto de dados). O nível para a pasta de nível superior é um. Por exemplo, para o caminho `mydataset/year/month/day/hour`, se o nível for definido como três, a tabela será criada no local `mydataset/year/month`. 

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Ao configurar um crawler, em **Saída e programação**, escolha **Nível da tabela** em **Opções avançadas**.

![\[Especificar um nível de tabela na configuração do crawler.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-configuration-console.png)


------
#### [ AWS CLI ]

Ao configurar o crawler usando o AWS CLI, defina o parâmetro `configuration` conforme mostrado no código de exemplo: 

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "Grouping": { "TableLevelConfiguration": 2 }}'
```

------
#### [ API ]

Quando você configurar o crawler usando a API, defina o campo `Configuration` com uma representação de string do objeto JSON a seguir, por exemplo: 

```
configuration = jsonencode(
{
   "Version": 1.0,
   "Grouping": {
            TableLevelConfiguration = 2  
        }
})
```

------
#### [ CloudFormation ]

Neste exemplo, você define a opção **Table level** (Nível da tabela) disponível no console dentro do modelo do CloudFormation:

```
"Configuration": "{
    \"Version\":1.0,
    \"Grouping\":{\"TableLevelConfiguration\":2}
}"
```

------

# Especificar o número máximo de tabelas que o crawler pode criar
<a name="crawler-maximum-number-of-tables"></a>

Opcionalmente, você pode especificar o número máximo de tabelas que o crawler pode criar especificando um `TableThreshold` por meio do console do AWS Glue ou a AWS CLI. Se as tabelas detectadas pelo crawler durante o rastreamento forem maiores que esse valor de entrada, o rastreamento falhará e nenhum dado será gravado no Data Catalog.

Esse parâmetro é útil quando as tabelas que seriam detectadas e criadas pelo crawler são muito maiores do que o esperado. Pode haver vários motivos para isso, por exemplo:
+ Ao usar um trabalho do AWS Glue para preencher seus locais do Amazon S3, você pode acabar com arquivos vazios no mesmo nível de uma pasta. Nesses casos, quando você executa um crawler nesse local do Amazon S3, o crawler cria várias tabelas devido a arquivos e pastas presentes no mesmo nível.
+ Se você não configurar `"TableGroupingPolicy": "CombineCompatibleSchemas"`, pode acabar com mais tabelas do que o esperado. 

Você especifica o `TableThreshold` como um valor inteiro maior que 0. Esse valor é configurado para cada crawler. Ou seja, esse valor é considerado para cada rastreamento. Por exemplo: um crawler tem o valor `TableThreshold` definido como 5. Em cada rastreamento, o AWS Glue vai comparar o número de tabelas detectadas com esse valor limite da tabela (5). Se o número de tabelas detectadas for menor que 5, o AWS Glue vai gravar as tabelas no Data Catalog. Caso contrário, o rastreamento falhará sem gravar no Data Catalog.

------
#### [ Console de gerenciamento da AWS ]

**Para definir `TableThreshold` usando o Console de gerenciamento da AWS:**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Ao configurar um crawler, em **Saída e programação**, defina o **Limite máximo da tabela** para o número de tabelas que o crawler pode gerar.  
![\[A seção Output and scheduling (Saída e agendamento) do console da AWS mostrando o parâmetro Maximum table threshold (Limite máximo da tabela).\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-max-tables.png)

------
#### [ AWS CLI ]

Para definir `TableThreshold` usando a AWS CLI:

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": { "TableThreshold": 5 }}}'
```

------
#### [ API ]

Para definir `TableThreshold` usando a API:

```
"{"Version":1.0,
"CrawlerOutput":
{"Tables":{"AddOrUpdateBehavior":"MergeNewColumns",
"TableThreshold":5}}}";
```

------

As mensagens de erro são registradas para ajudar você a identificar os caminhos da tabela e a limpar seus dados. Exemplo: faça login em sua conta se o crawler falhar porque a contagem da tabela foi maior do que o valor limite da tabela fornecido:

```
Table Threshold value = 28, Tables detected - 29
```

No CloudWatch, registramos em log todas as localizações de tabelas detectadas como uma mensagem INFO. Um erro é registrado como o motivo da falha.

```
ERROR com.amazonaws.services.glue.customerLogs.CustomerLogService - CustomerLogService received CustomerFacingException with message 
The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog.
com.amazonaws.services.glue.exceptions.CustomerFacingInternalException: The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. 
Failing crawler without writing to Data Catalog.
```

# Configurar um crawler para usar credenciais do Lake Formation
<a name="crawler-lf-integ"></a>

Você pode configurar um crawler para usar credenciais do AWS Lake Formation para acessar um datastore do Amazon S3 ou uma tabela do Data Catalog com uma localização subjacente do Amazon S3 dentro da mesma Conta da AWS ou de outra Conta da AWS. Você pode configurar uma tabela existente do Data Catalog como o destino do crawler, se o crawler e a tabela do Data Catalog residirem na mesma conta. No momento, é permitido ter somente um destino de catálogo com apenas uma tabela de catálogo ao usar uma tabela do Catálogo de dados como destino do crawler.

**nota**  
Ao definir uma tabela do Data Catalog como um destino de crawler, certifique-se de que a localização subjacente da tabela do Data Catalog seja um local do Amazon S3. Os crawlers que usam credenciais do Lake Formation são compatíveis somente com destinos do Data Catalog com localizações subjacentes do Amazon S3.

## Configuração exigida quando o crawler e a localização registrada do Amazon S3 ou a tabela do Data Catalog residem na mesma conta (crawling na conta)
<a name="in-account-crawling"></a>

Para permitir que o crawler acesse um datastore ou uma tabela do Data Catalog usando as credenciais do Lake Formation, você precisa registrar a localização dos dados com o Lake Formation. Além disso, o perfil do IAM do crawler deve ter permissões para ler os dados do destino no qual o bucket do Amazon S3 está registrado.

Você pode concluir as seguintes etapas de configuração usando o Console de gerenciamento da AWS ou a AWS Command Line Interface (AWS CLI).

------
#### [ Console de gerenciamento da AWS ]

1. Antes de configurar um crawler para acessar a fonte do crawler, registre a localização dos dados do datastore ou do Data Catalog com o Lake Formation. No console do Lake Formation ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)), registre uma localização do Amazon S3 como a localização raiz do seu data lake na Conta da AWS na qual o crawler está definido. Para obter mais informações, consulte [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) (Registrar um local do Amazon S3).

1. Conceda permissões de **Data location** (Localização de dados) ao perfil do IAM que é usado para a execução do crawler, de modo que o rastreador possa ler os dados do destino no Lake Formation. Para obter mais informações, consulte [Granting data location permissions (same account)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (Conceder permissões de localização de dados [mesma conta]).

1. Conceda permissões de acesso ao perfil do crawler (`Create`) para o banco de dados, que é especificado como o banco de dados de saída. Para obter mais informações, consulte [Granting database permissions using the Lake Formation console and the named resource method](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html) (Conceder permissões de banco de dados usando o console do Lake Formation e o método de recurso nomeado).

1. No console do IAM ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)), crie um perfil do IAM para o crawler. Adicione a política `lakeformation:GetDataAccess` ao perfil.

1. No console do AWS Glue ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), ao configurar o crawler, selecione a opção **Use Lake Formation credentials for crawling Amazon S3 data source** (Usar credenciais do Lake Formation para crawling da fonte de dados do Amazon S3).
**nota**  
O campo accountId é opcional para crawling na conta.

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111122223333"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

# Configuração exigida quando o crawler e a localização registrada do Amazon S3 residem em contas diferentes (crawling entre contas)
<a name="cross-account-crawling"></a>

Para permitir que o crawler acesse um datastore em uma conta diferente usando as credenciais do Lake Formation, primeiro você deve registrar a localização de dados do Amazon S3 com o Lake Formation. Em seguida, você concede permissões de localização de dados à conta do crawler conforme as etapas a seguir.

Você pode concluir as seguintes etapas usando o Console de gerenciamento da AWS ou a AWS CLI.

------
#### [ Console de gerenciamento da AWS ]

1. Na conta em que a localização do Amazon S3 está registrada (conta B):

   1. Registre um caminho do Amazon S3 no Lake Formation. Para obter mais informações, consulte [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) (Registrando um local do Amazon S3).

   1.  Conceda permissões de **Data location** (Localização de dados) para a conta (conta A) na qual o crawler será executado. Para obter mais informações, consulte [Granting data location permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (Conceder permissões de localização de dados). 

   1. Crie um banco de dados vazio no Lake Formation com a localização subjacente como o local de destino do Amazon S3. Para obter mais informações, consulte [Creating a database](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-database.html) (Criar um banco de dados).

   1. Conceda à conta A (a conta na qual o crawler será executado) acesso ao banco de dados que você criou na etapa anterior. Para obter mais informações, consulte [Granting database permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html) (Conceder permissões de banco de dados). 

1. Na conta em que o crawler é criado e será executado (conta A):

   1.  Ao usar o console da AWS RAM, aceite o banco de dados que foi compartilhado da conta externa (conta B). Para obter mais informações, consulte [Aceitar um convite de compartilhamento de recursos do AWS Resource Access Manager](https://docs.aws.amazon.com/lake-formation/latest/dg/accepting-ram-invite.html). 

   1.  Crie um perfil do IAM para o crawler. Adicione a política `lakeformation:GetDataAccess` ao perfil.

   1.  No console do Lake Formation ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)), conceda permissões de **Data location** (Localização dos dados) na localização de destino do Amazon S3 para o perfil do IAM usado para a execução do crawler, de modo que o crawler possa ler os dados do destino no Lake Formation. Para obter mais informações, consulte [Granting data location permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (Conceder permissões de localização de dados). 

   1.  Crie um link de recurso no banco de dados compartilhado. Para obter mais informações, consulte [Create a resource link](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html) (Criar um link de recurso). 

   1.  Conceda permissões de acesso ao perfil do crawler (`Create`) no banco de dados compartilhado e (`Describe`) no link do recurso. O link do recurso é especificado na saída do crawler. 

   1.  No console do AWS Glue ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), ao configurar o crawler, selecione a opção **Use Lake Formation credentials for crawling Amazon S3 data source** (Usar credenciais do Lake Formation para crawling da fonte de dados do Amazon S3).

      Para crawling entre contas, especifique o ID da Conta da AWS na qual a localização de destino do Amazon S3 está registrada no Lake Formation. O campo accountId é opcional para crawling na conta.   
![\[IAM role selection and Lake Formation configuration options for Crawler do AWS Glue security settings.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/cross-account-crawler.png)

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111111111111"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

**nota**  
Um crawler que use credenciais do Lake Formation é compatível somente com destinos do Amazon S3 e do Data Catalog.
Para destinos que utilizam o fornecimento de credenciais do Lake Formation, as localizações subjacentes do Amazon S3 devem pertencer ao mesmo bucket. Por exemplo, os clientes podem usar vários destinos (s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket1/folder2), desde que todos os locais de destino estejam no mesmo bucket (amzn-s3-demo-bucket1). Não é permitido especificar buckets diferentes (s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket2/folder2).
No momento, só é permitido ter um destino de catálogo com uma só tabela de catálogo para crawlers de destino do Data Catalog.

# Acelerar crawls usando notificações de eventos do Amazon S3
<a name="crawler-s3-event-notifications"></a>

Em vez de listar os objetos de um destino do Amazon S3 ou do Data Catalog, você pode configurar o crawler para usar eventos do Amazon S3 para localizar quaisquer alterações. Esse recurso melhora o tempo de recrawl usando eventos do Amazon S3 para identificar as alterações entre dois crawls listando todos os arquivos da subpasta que disparou o evento em vez de listar o destino completo do Amazon S3 ou do Data Catalog.

O primeiro crawl lista todos os objetos do Amazon S3 do destino. Após o primeiro crawling bem-sucedido, você pode optar pelo recrawling manualmente ou em um cronograma definido. O crawler listará apenas os objetos desses eventos em vez de listar todos os objetos.

Quando o destino é uma tabela do Catálogo de dados, o crawler atualiza as tabelas existentes no Catálogo de dados com as alterações (por exemplo, partições extras em uma tabela).

As vantagens de migrar para um crawler baseado em eventos do Amazon S3 são:
+ Uma recuperação mais rápida, pois a listagem de todos os objetos do destino não é necessária, em vez disso, a listagem de pastas específicas é feita onde os objetos são adicionados ou excluídos.
+ Uma redução no custo geral de crawl à medida que a listagem de pastas específicas é feita onde os objetos são adicionados ou excluídos.

O crawl de eventos do Amazon S3 é executado consumindo eventos do Amazon S3 da fila SQS com base na programação do crawler. Não haverá custo se não houver eventos na fila. Os eventos do Amazon S3 podem ser configurados para ir diretamente para a fila SQS ou nos casos em que vários consumidores precisam do mesmo evento, uma combinação de SNS e SQS. Para obter mais informações, consulte [Configurar sua conta para notificações de eventos do Amazon S3](#crawler-s3-event-notifications-setup).

Depois de criar e configurar o crawler no modo de evento, o primeiro crawl é executado no modo de listagem fazendo uma listagem completa do destino do Amazon S3 ou do Data Catalog. O log a seguir confirma a operação do crawl consumindo eventos do Amazon S3 após o primeiro crawl bem-sucedido: "The crawl is running by consuming Amazon S3 events." (O crawl está sendo executado consumindo eventos do Amazon S3).

Depois de criar o crawl de eventos do Amazon S3 e atualizar as propriedades do crawler que podem afetar o crawl, o crawl opera no modo de lista e o seguinte log é adicionado: "Crawl is not running in S3 event mode" (O crawl não está sendo executado no modo de evento S3).

**nota**  
O número máximo de mensagens a serem consumidas é 100 mil mensagens por operação de crawl.

## Considerações e limitações
<a name="s3event-crawler-limitations"></a>

As considerações e limitações apresentadas a seguir se aplicam ao configurar um crawler para usar notificações de eventos do Amazon S3 na descoberta de alterações. 
+  **Aspectos relevantes do comportamento ao lidar com partições excluídas** 

  Ao usar crawlers de eventos do Amazon S3 com as tabelas do Catálogo de Dados:
  +  Se você excluir uma partição usando a chamada de API `DeletePartition`, também deverá excluir todos os objetos do S3 contidos nessa partição e selecionar a opção **Todos os eventos de remoção de objetos** ao configurar as notificações de eventos do S3. Se os eventos de exclusão não estiverem configurados, o crawler recriará a partição excluída na próxima execução. 
+ O crawler só é compatível com um único destino, tanto para destinos do Amazon S3 quanto do Data Catalog.
+ Não há suporte para SQS na VPC privada.
+ Não há suporte para amostragem do Amazon S3.
+ O destino do crawler deve ser uma pasta para um destino do Amazon S3 ou uma ou mais tabelas do AWS Glue Data Catalog para um destino do Data Catalog.
+ Não há suporte para o curinga de caminho ‘everything’ (tudo): s3: //%
+ Para um destino do Data Catalog, todas as tabelas de catálogo devem apontar para o mesmo bucket do Amazon S3 para o modo de evento do Amazon S3.
+ Para um destino do Data Catalog, uma tabela de catálogo não deve apontar para uma localização no Amazon S3 no formato Delta Lake (contendo pastas \$1symlink ou conferindo o `InputFormat` da tabela do catálogo).

**Topics**
+ [Considerações e limitações](#s3event-crawler-limitations)
+ [Configurar sua conta para notificações de eventos do Amazon S3](#crawler-s3-event-notifications-setup)
+ [Configurar um crawler de notificações de eventos do Amazon S3 para um destino do Amazon S3](crawler-s3-event-notifications-setup-console-s3-target.md)
+ [Configurar um crawler para notificações de eventos do Amazon S3 para uma tabela do Catálogo de dados](crawler-s3-event-notifications-setup-console-catalog-target.md)

## Configurar sua conta para notificações de eventos do Amazon S3
<a name="crawler-s3-event-notifications-setup"></a>

Complete as tarefas de configuração a seguir. Observe que os valores entre parênteses fazem referência às definições configuráveis do script.

1. É necessário configurar notificações de eventos para seu bucket do Amazon S3.

   Para obter mais informações, consulte [Notificações de eventos do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html).

1. Para usar o crawler baseado em eventos do Amazon S3, você deve habilitar a notificação de eventos no bucket do Amazon S3 com eventos filtrados do prefixo que é o mesmo que o destino do S3 e armazenado no SQS. Você pode configurar o SQS e a notificação de eventos por meio do console seguindo as etapas em [Passo a passo: configuração de um bucket para notificações](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html).

1. Adicione a política de SQS a seguir à função usada pelo crawler. 

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "sqs:DeleteMessage",
           "sqs:GetQueueUrl",
           "sqs:ListDeadLetterSourceQueues",
           "sqs:ReceiveMessage",
           "sqs:GetQueueAttributes",
           "sqs:ListQueueTags",
           "sqs:SetQueueAttributes",
           "sqs:PurgeQueue"
         ],
         "Resource": "arn:aws:sqs:us-east-1:111122223333:cfn-sqs-queue"
       }
     ]
   }
   ```

------

# Configurar um crawler de notificações de eventos do Amazon S3 para um destino do Amazon S3
<a name="crawler-s3-event-notifications-setup-console-s3-target"></a>

Siga estas etapas para configurar um crawler para notificações de eventos do Amazon S3 para um destino do Amazon S3 usando o Console de gerenciamento da AWS ou a AWS CLI.

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do GuardDuty em [https://console.aws.amazon.com/guardduty/](https://console.aws.amazon.com/guardduty/).

1.  Defina as propriedades do crawler. Para obter mais informações, consulte [Definir opções de configuração do crawler no console do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console). 

1.  Na seção **Configuração da fonte de dados**, é perguntado a você se *Os dados já estão mapeados para tabelas do AWS Glue? * 

    A opção **Not yet** (Ainda não) já estará selecionada por padrão. Isso ocorre porque você está usando uma fonte de dados do Amazon S3 e os dados ainda não estão mapeados para as tabelas do AWS Glue. 

1.  Na seção **Data sources** (Fontes de dados), escolha **Add a data source** (Adicionar uma fonte de dados).   
![\[Data source configuration interface with options to select or add data sources for crawling.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-s3-event-console1.png)

1.  No modal **Add data source** (Adicionar origem dos dados), configure a fonte de dados do Amazon S3: 
   +  **Data source** (Fonte de dados): o Amazon S3 é selecionado por padrão. 
   +  **Network connection** (Conexão de rede) (opcional): escolha **Add new connection** (Adicionar nova conexão). 
   +  **Location of Amazon S3 data** (Local de dados do Amazon S3): a opção **In this account** (Nesta conta) será selecionado por padrão. 
   +  **Amazon S3 path** (Caminho do Amazon S3): especifique o caminho do Amazon S3 no qual pastas e arquivos são rastreados. 
   +  **Subsequent crawler runs** (Execuções subsequentes do crawler): escolha **Crawl based on events** (Rastreamento baseado em eventos) para usar notificações de eventos do Amazon S3 para seu crawler. 
   +  **Include SQS ARN** (Incluir ARN de SQS): especifique os parâmetros do armazenamento de dados, incluindo um ARN válido do SQS. (Por exemplo, `arn:aws:sqs:region:account:sqs`). 
   +  **Include dead-letter SQS ARN** (Incluir ARN de mensagens não entregues do SQS) (opcional): especifique um ARN válido de mensagens não entregues do SQS na Amazon. (Por exemplo, `arn:aws:sqs:region:account:deadLetterQueue`). 
   +  Escolha **Add an Amazon S3 data source** (Adicionar uma fonte de dados do Amazon S3).   
![\[Add data source dialog for S3, showing options for network connection and crawl settings.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-s3-event-console2.png)

------
#### [ AWS CLI ]

 O exemplo a seguir é uma chamada da AWS CLI do Amazon S3 para configurar um crawler para usar notificações de eventos para fazer crawl em um bucket de destino do Amazon S3. 

```
Create Crawler:
aws glue update-crawler \
    --name myCrawler \
    --recrawl-policy RecrawlBehavior=CRAWL_EVENT_MODE \
    --schema-change-policy UpdateBehavior=UPDATE_IN_DATABASE,DeleteBehavior=LOG
    --targets '{"S3Targets":[{"Path":"s3://amzn-s3-demo-bucket/", "EventQueueArn": "arn:aws:sqs:us-east-1:012345678910:MyQueue"}]}'
```

------

# Configurar um crawler para notificações de eventos do Amazon S3 para uma tabela do Catálogo de dados
<a name="crawler-s3-event-notifications-setup-console-catalog-target"></a>

Quando você tiver uma tabela do Catálogo de dados, configure um crawler para fornecer notificações de eventos do Amazon S3 usando o console do AWS Glue:

1.  Defina as propriedades do crawler. Para obter mais informações, consulte [Definir opções de configuração do crawler no console do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console). 

1.  Na seção **Configuração da fonte de dados**, é perguntado a você se *Os dados já estão mapeados para tabelas do AWS Glue? * 

    Selecione **Yes** (Sim) para selecionar as tabelas existentes do Data Catalog como fonte de dados. 

1.  Na seção **Glue tables** (Tabelas do Glue), escolha **Add tables** (Adicionar tabelas).   
![\[Data source configuration interface with options to select existing Glue tables or add new ones.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-s3-event-console1-cat.png)

1.  No modal **Add table** (Adicionar tabela), configure o banco de dados e as tabelas: 
   +  **Network connection** (Conexão de rede) (opcional): escolha **Add new connection** (Adicionar nova conexão). 
   +  **Database** (Banco de dados): selecione um banco de dados no Data Catalog. 
   +  **Tables** (Tabelas): selecione uma ou mais tabelas desse banco de dados no Data Catalog. 
   +  **Subsequent crawler runs** (Execuções subsequentes do crawler): escolha **Crawl based on events** (Rastreamento baseado em eventos) para usar notificações de eventos do Amazon S3 para seu crawler. 
   +  **Include SQS ARN** (Incluir ARN de SQS): especifique os parâmetros do armazenamento de dados, incluindo um ARN válido do SQS. (Por exemplo, `arn:aws:sqs:region:account:sqs`). 
   +  **Include dead-letter SQS ARN** (Incluir ARN de mensagens não entregues do SQS) (opcional): especifique um ARN válido de mensagens não entregues do SQS na Amazon. (Por exemplo, `arn:aws:sqs:region:account:deadLetterQueue`). 
   +  Escolha **Confirmar**.   
![\[Add Glue tables dialog with network, database, tables, and crawler options.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-s3-event-console2-cat.png)