# Tutorial de paginação - parte 1

Nos passos iniciais do pipeline de paginação, nós configuramos o trigger do pipeline e usamos uma sequência de componentes para configurar e salvar os parâmetros de paginação, como descrito abaixo:

<figure><img src="https://content.gitbook.com/content/XfrDexGOLMin51pAiWkq/blobs/1M4cTc9G08bSmk1YimqQ/image-2.png" alt=""><figcaption><p>Passos iniciais de um pipeline de paginação</p></figcaption></figure>

&#x20; 1\. Configure o *trigger* do pipeline para um *scheduler trigger* de cinco minutos.

Esse pipeline migra um banco de dados diariamente às 1 da manhã. O *pipeline* é ativado em intervalos regulares para verificar se está na hora de começar a paginação. Aqui, configuramos o *trigger* para ativar o *pipeline* a cada cinco minutos.

&#x20; 2\. Consulte os parâmetros da paginação usando um componente Object Store (OS).

Esse componente consulta um banco de dados OS para encontrar parâmetros de paginação. Esses parâmetros são:

* *Start timestamp*: a data e hora nos quais o pipeline foi ativado.&#x20;
* *Limit*: o número máximo de resultados a serem retornados.
* *Start*: o índice do primeiro registro a ser processado nesse passo do processo de paginação.&#x20;
* *End*: o índice do último registro a ser processado nesse passo do processo de paginação.&#x20;
* *Step*: esse parâmetro assume o valor `EXTRACTING_DATA` quando o processo de paginação está ocorrendo ou `FINISHED` quando ele termina ou quando o *pipeline* é executado pela primeira vez.&#x20;
* *Next execution timestamp*: a data e hora do próximo processo de migração.

Para consultar os parâmetros, selecionamos a operação “Find by Object ID” e definimos o Object ID como:

```
{{ CONCAT(metadata.pipeline.name, "_v" , metadata.pipeline.versionMajor) }}
```

Aqui, usamos a função CONCAT para nomear o ID do Object Store como o nome desse pipeline seguido de sua versão.

Atribua valor `0` para os parâmetros *limit* e *skip* desse componente e ative a opção *Unique Index*.

Durante a primeira execução do *pipeline*, os parâmetros da paginação não existirão, então precisamos definir valores padrão para eles. Faremos isso no passo 3.

&#x20; 3\. Defina valores padrão para os parâmetros da paginação utilizando um componente JSON Generator.

Utilizamos a função Double Braces DEFAULT para atribuir valores padrão aos parâmetros da paginação recuperados pelo Object Store se eles não existirem. Isso acontece durante a primeira execução do *pipeline*.

O parâmetro JSON desse componente deve ser configurado desta maneira:

```json
{
    "control":{
        "startTimestamp": {{ metadata.execution.startTimestamp }},
        "limit": {{ DEFAULT( message.data[0].limit, 500 ) }},
        "start": {{ DEFAULT( message.data[0].start, 0 ) }},
        "end": {{ DEFAULT( message.data[0].end, 500 ) }},
        "step": {{ DEFAULT( message.data[0].step, "FINISHED" ) }},
        "nextExecutionTimestamp": {{ message.data[0].nextExecutionTimestamp }}
    }
}
```

Nesse exemplo, nós atribuímos o valor `500` para a propriedade *limit*. Ao aplicar a paginação, você deve mudar esse valor de acordo com sua necessidade de processamento de dados. Um valor de *limit* muito alto pode sobrecarregar o *pipeline*, fazendo com que a paginação perca seu propósito; um valor muito pequeno pode deixar o processo lento.

&#x20; 4\. Salve a propriedade `contol` usando um componente Session Management.

&#x20; 5\. Divida o fluxo de integração usando um componente Choice.

Esse componente divide o fluxo de integração nos três caminhos mencionados anteriormente: o caminho FINISHED, o caminho EXTRACTING\_DATA e o caminho de erro. Vamos descrever como cada caminho deve ser construído nos próximos artigos.

<figure><img src="https://content.gitbook.com/content/XfrDexGOLMin51pAiWkq/blobs/dh6RoLUbiWUSYSybbAgi/image-3.png" alt=""><figcaption><p>Camihos do <em>pipeline</em> de paginação</p></figcaption></figure>
