Olá esse é o integration developer bootcamp estamos na etapa de arquitetura e padrões de projeto do nesse vídeo faremos o Ron sobre paginação nós vimos que a paginação é uma forma eficaz de promover a extração de grandes volumes de dados de points como apis bancos de dados Web Services arquivos e outros eles permitem que a gente consiga lidar com muitos dados sem que o contêiner não que o container sofre algum tipo de erro ou algum tipo de quebra devido ao alto volume da fonte de dados e pensando nisso a gente entendeu que os requisitos para
fazer isso é conhecer o campo de corte para determinar quando a extração terminou e definir o número máximo de registros a serem extraídos pro execução também Vimos que para poder fazer a paginação nós precisamos que o scheduler que o Trigger seja do tipo scheduler e que ele tem um intervalo de tempo relativamente curto por exemplo de TR a 3 minutos 5 a 5 ou 30 a 30 para que ele a cada execução do pipeline recupere uma nova página dessa base de dados e também Vimos que eles precisa de Campos armazenados eh em uma base de
dados temporárias como limite por execução quantidade de registros ignorados estatus do processamento e data e hora da próxima execução para que esses registros sejam acessados por meio da execução do pipeline Logo eles precisam estar armazenados em uma base de dados temporária para que ele consiga de Mane externa a pipeline recuperar essas informações para isso a gente sabendo que o trigger é do tipo scheduler que que possuem um tempo relativamente curto e os campos armazenados são os campos que foram formados nesses tópicos aqui nós precisamos colocar uma base de dados tanto no começo do pipeline para
fazer a leitura desses dados de paginação quanto no final do do do pipeline para atualizar esses parâmetros de paginação pensando nisso anteriormente foi feita em outros rons uma migração di área entre dois sistemas a api que disponibiliza os dados é paginável api do sistema RH e devemos aplicar a paginação para garantir o aumento que o aumento de volumetria não OC erros de timeout ou alguma quebra por conta da quantidade de registros Então nós vamos pegar esse pipeline que foi construído anteriormente e vamos aplicar a paginação nessa fonte de dados aqui o trig que antes era
1 hora da manhã todos os dias agora será e a cada 5 minutos ele será ativado e a lógica de negócio que restringe a migração começar 1 hora da manhã será feita por meio de lógica no pipeline Então nesse rendon de paginação o objetivo é construir em três etapas um pipeline de consulta a base de dados que é que mostramos anteriormente e que seja paginável e as etapas serão a construção dos parâmetros iniciais logo depois Nós faremos a construção do caminho de processamento e por fim a construção do caminho de espera visto que agora a
lógica de negócio de começar 1 hora da manhã será uma lógica do pipeline e não do Trigger visto que o Trigger começará a cada 5 minutos então vamos acessar a plataforma e vamos comear a construção dos parmetros iniciais da paginação agora com a plataforma aberta já no exemplo criado anteriormente devemos transformar esse fluxo em fluxo paginável para isso vamos começar com os parâmetros de paginação que apresentamos nos slides preciso de saber sobre o limite preciso saber sobre qual status o processamento está e eu preciso criar valores padrão para que caso a base de dados não
tenha esses dados eles sejam recuperados eles sejam criados diretamente na primeira execução então eu vou começar configurando o Trigger para um sched de 5 minutos eu vou separar esse fluxo que eu já foi construído porque ele só será utilizado depois vou colocar ele aqui para cima eu vou iniciar os meus parâmetros de paginação para isso eu vou buscar Primeiramente um di generator e eu vou armazenar nesse J generator dois dos parâmetros que eu já vou utilizar para fazer a paginação eu vou armazenar tanto o limite quanto o momento que a execução começou então iniciando as
configurações eu vou chamar essas configurações de config aqui eu vou colocar dentro do meu atributo config Eli é um objeto dentro desse objeto eu vou ter tanto o limite que significa o tamanho da minha página quanto o início dessa execução visto que eu vou fazer uma verificação a partir do início da execução então aqui o limite ele vai ter um valor fixo por exemplo sem registros e podemos colocar isso no formato de global para toda vez que precisamos mudar o limite a gente muda diretamente na plataforma mas por enquanto para fim de desenvolvimento vamos deixar
esse valor fixo o outro valor é start time stamp com esse valor nós podemos acessar os metadados do pipeline visto aqui nos metadados nós conseguimos saber quando que a execução começou então met deira ponto execution P start timestamp aqui eu coloquei um ponto e vírgula no local de [Música] ponto novamente metadata execution pstart timestamp apenas de fazer essa figuração eu vou confirmar e vou executar o meu fluxo e vamos ver se essa informação está sendo salva da maneira correta Aqui estamos recebendo tanto limite quanto o start time stamp então se eu executar novamente esse valor
vai ser atualizado para um valor maior que é o momento da execução do pipeline com esses registros eu já posso salvar essas configurações porque eu vou utilizar elas durante a paginação do pipeline então aqui com session eu vou salvar o config por meio do Aqui eu tiro os campos que não serão utilizados e coloco config e o nome do meu pipeline o nome do meu step name No caso vai but config para ter um um nome descritivo pro componente a partir desse momento eu já posso recuperar os elementos que estão presentes na minha base de
dados temporária Então vou vir aqui e vou buscar o componente Cassandra e vou iniciar as configurações para retornar os parâmetros que serão recuperados pelo Cassandra então iniciando a configuração eu vou nomear esse conector como recupera dados de paginação aqui o account vai ser a da WS a operação vai ser listar ou melhor select Connection string vai ser enl e aqui um ponto mega importante a Carry vai ser selecionar todos os registros de enablement paginação em que o pipeline name possui esse pipeline eh o nome desse pipeline especificamente o limite vai ser um porque eu quero
somente um registro esse registro que vai ter conter todas as informações e o allow filtering para poder fazer eh essa essa filtragem aqui esse nome no pipeline eu vou criar também em config para que eu consiga definir qual pipeline que vai assim que eu puxar n esses dados do Cassandra qual pipeline que ele vai recuperar esses dados visto que pode existir mais de um um pipeline com paginação e utilizar a mesma tabela para isso eu preciso saber de qual pipeline que eu preciso de de buscar esses dados então para fazer isso eu vou apenas confirmar
aqui e eu vou começar a criar esse pipeline name No meu config então além das mensagens que vimos anteriormente eu vou adicionar pipeline name aqui vamos fazer o seguinte vamos utilizar a função defo que juntamente com a função equal to V definir o nome do meu pipeline eu vou apenas colar aqui e vou explicar a função do que que ela acontece o que acontece aqui é o seguinte no momento de desenvolvimento pipeline possui o nome padrão de test mode e assim que fazemos a publicação desse pipeline ele passa a ter o nome do pipeline que
foi publicado Então a gente vai colocar esse defo aqui pelo seguinte motivo durante e se o pipeline tiver o nome de test mode que a gente vai est em desenvolvimento a gente vai mudar para por exemplo sched pagination architecture 2 em desone e aqui ou se não se ele não tiver esse nome a gente vai utilizar o próprio nome do pipeline então assim a gente garante que no no momento de desenvolvimento ele vai ter esse nome e no momento de produção em si ele vai ter o nome do pipeline agora eu consigo facilmente e recuperar
esses elementos somente os elementos de paginação que eu desejo para esse pipeline Por meio dessa tag de pipeline name entretanto se o Cassandra nos retornar dados vazios eu preciso ser capaz de lidar com esses dados criando valores padrão para poder fazer a minha execução normalmente então para isso a gente vai começar a criar valores padrão por meio de um json generator então buscando componente jito eu vou colar como valores padrão a seguinte Dion de configuração eu vou ter aqui um control execution ID que vai vi diretamente do meu da minha base de dados então perceba
aqui que temos message ponto deira na posição zero porque estamos buscando resultados da base de dados só que em control nós temos um detalhe super importante a gente tem várias funções defo que nos garantem que eu só vou pegar dados padrão caso não existam esses dados na minha base de dados Caso seja a primeira execução por exemplo Então temos aqui o ele tentando buscar os registros de message ponto deira na posição z0 pstart caso ele não encontre nada nós vamos começar na posição zero o end vai ser message P config pon limit mas ele só
vai ser esse valor caso ele não encontre esse valor dentro da base de dados para isso eu preciso retornar esse valor de limite aqui antes de fazer essa configuração de componente visto que eu criei limite dentro de config Então antes de continuar as configurações eu vou apenas confirmar eu vou buscar esse esse conector que eu salvei e vou colocar na frente do componente Cassandra aqui eu vou recuperar config visto que ele tá sendo utilizado nos configurações eu mudo para get o step name também vira get e aqui eu já finalizo as configurações para retornar config
Agora posso voltar as configurações do meu início e esse valor aqui se encontra no meu ão de entrada do componente eu posso utilizar ele normalmente então esses são os valores padrão nós utilizamos a função Def para caso ele não encontre no aay data retornado pelo pela base de dados temporária ele cria um valor padrão de start de end e de step como finalizado para que ele entenda quando que deve começar ou quando deve terminar eu vou chamar esse Jon generator de inicia valores padrão e assim a gente vai salvar control e Control exec ID dentro
da sessão do pipeline vou reorganizar vou buscar novamente esse componente de sessão e vou salvar esses valores então aqui vou iniciar a configuração do session e vou salvar aqui data control e Control execution ID control vírgula control execution ID confirmar e com isso nós já criamos os valores iniciais da paginação então se eu entrar no test mode e executar caso eu não tenha errado em nenhum componente eu vou ter esses valores aqui perceba que eu tenho que ele provavelmente não tornou nenhum dado então ele colocou os valores padrão que nós acabamos de criar colocamos o
limite como 100 e o start está como zero o Step está como finalizado tudo isso são os valores padrão visto que não estamos utilizando ou ele não está sendo retornado esses valores diretamente do candra se a gente conferir aqui tá como está inválido né deu um resultado negativo um erro e é por isso que ele está pegando os valores padrão então nessa questão de pegar os valores padrão está funcionando normalmente e aí a gente vai continuar já já a configuração dos novos das condições né se ele deve começar a processar ou ainda não está na
hora por meio da lógica de negócio que está a sero definida quanto ao erro apresentado anteriormente eu criei pipeline name com n minúsculo então um erro que retornou Foi um erro falando que eh eu estou tentando acessar um valor nulo então mudando para pipeline n com n minúsculo e executando novamente então confirmar vou executar novamente e aqui nós já possuímos registros Isso significa que se eu tentar novamente é fazer com os valores padrão ele deve recuperar os valores que possuem na execução e não os valores padrão assim como Acabou de acontecer então a gente percebeu
que esses valores padrão estão funcionando normalmente estão funcionando da maneira correta agora a gente vai para as próximas etapas Nos vemos no próxima etapa