Olá galera o/

Vamos a mais uma postagem sobre o Azure Data Factory, se você não conhece o Azure Data Factory (ADF) abaixo segue três posts que fiz sobre o mesmo, os posts estão bem legais e detalhados.

  • Conhecendo o Azure Data Factory >> LINK <<
  • Azure Data Factory: Criando seu primeiro pipeline de dados >> LINK <<
  • Azure Data Factory: Criando datasets genéricos >> LINK <<
  • Azure Data Factory: Integração com o GitHub >> LINK <<

Lembrando da nossa nova serie de postagens, aonde vamos aprender sobre as Activities do ADF funcionam e como podemos utilizar em nossos projetos da vida real. Vou selecionar as activities que mais utilizo no meu dia a dia.

Hoje vamos mostrar como funciona a activity VALIDATION.

A activity VALIDATION realiza uma Validação em um pipeline para garantir que ele continue a execução apenas depois de validar a existência da referência do conjunto de dados anexado, para confirmar que ele atende aos critérios especificados ou que o tempo limite foi atingido. [Microsoft]

Observação Importante: Caso a activity não consiga validar as informações do dataset, o mesmo ficará tentando validar o dataset até o timeout da activity ser atingido. Então, lembre-se sempre de configurar o timeout com um tempo aceitável e não o valor default que é 7 dias.

  • Esta activity tem alguns atributos:
    • Dataset: a activity bloqueará a execução até que tenha validado a existência desta referência no dataset e que também atenda aos critérios especificados ou o timeout seja atingido.
    • Timeout – especifica o tempo limite para a execução da atividade.
    • Sleep – Atraso em segundos entre as tentativas de validação.
    • Child Items – Verifica se a pasta (ou container) possui itens filho.
    • Minimum Size – Tamanho mínimo de um arquivo em bytes. Quando não preenchido o valor padrão é 0.

Para exemplificar, vamos validar os seguintes itens:

1 – Validar a existência de uma tabela no dataset do Azure SQL Database.
2 – Validar a existência de um arquivo no dataset do blob storage.
3 – Validar a existência de um arquivo/container no dataset do blob storage.
4 – Simular um erro caso os valores do dataset não existam
5 – Criar um fluxo de validações para execuções de outras ações – Fluxo de Sucesso
6 – Criar um fluxo de validações para execuções de outras ações – Fluxo de Erro

Criando o pipeline com a activity de Validation
Validando o Dataset do Azure SQL Database

Com o Azure Data Factory aberto vamos realizar os seguintes passos:

1 – Clicar no ícone do Editor.
2 – Selecionar Pipelines, clicar nos 3 pontinhos (…) ao lado do nome Pipeline e Selecionar a opção listada NEW PIPELINE.

Com a tela do pipeline designer aberta, vamos fazer os seguintes passos:

1 – Na tela de Properties (lado direito), iremos mudar o valor do parâmetro para pipeline_validation.
2 – Clicamos no ícone do properties para ocultar a tela lateral.
3 – Na seção General das Activities, selecionamos a activity Validation e arrastamos para a tela do pipeline designer.
4 – Clicamos em cima da activity.
5 – Selecionamos a aba General.
6 – No parâmetro name, mudamos o valor para validation_files

Uma vez que a configuração primaria foi realizada com sucesso, vamos começar a configurar as configurações da activity:

1 – Clicamos em cima da activity
2 – Selecionamos a aba Settings.
3 – Selecionamos o dataset do Azure SQL Database.
4 – Informamos os valores para os parâmetros do dataset. Para o schemaName o valor SalesLT e para o tableName o valor Product.
5 – Clicamos em Debug para validarmos se a tabela Product que está no schema SalesLT realmente existe neste dataset.

Uma vez que o debug for executado, vamos realizar a analise do retorno da activity:

1 – Clicamos no ícone do Output.
2 – Verifique que a propriedade Exists retornou TRUE, ou seja, a tabela realmente existe dentro do dataset.
3 – Clicamos no X para fechar o pop-up.

Validando o Dataset CSV – Nível de Arquivo

Depois da realização do primeiro teste utilizando um dataset de um Azure SQL Database, agora vamos alterar o dataset da nossa activity para validar um arquivo CSV contido em um blob storage. Para isso, realize os seguintes passos:

1 – Selecione a aba Settings.
2 – Altere o dataset para o seu dataset de CSV.
3 – Este dataset que selecionei recebe 2 parâmetros, o nome do container e o nome do arquivo. Para o parâmetro folderName informo o valor source (nome do meu container) e para o parâmetro fileName informo o valor cidades.csv (arquivo contido no container).

Obs.: Para o atributo Minimum size, deixamos em branco, então o mesmo assume o valor padrão que é 0.

4 – Clicamos em Debug para validarmos se o arquivo realmente existe no dataset.

Uma vez que o debug for executado, vamos realizar a analise do retorno da activity:

1 – Clicamos no ícone do Output.
2 – Verifique que a propriedade Exists retornou TRUE, ou seja, o arquivo realmente existe dentro do dataset.
3 – Clicamos no X para fechar o pop-up.

Validando o Dataset CSV – Apenas nível Container

Depois da realização do segundo teste utilizando um dataset de um arquivo CSV contido em um blob storage, agora iremos realizar um novo teste em um dataset CSV, porém verificando apenas o nível do Container e não do arquivo. Para isso, realize os seguintes passos:

1 – Selecione a aba Settings.
2 – Altere o dataset CSV para o dataset que apenas verifica o nível do container.
3 – Este dataset que selecionei recebe apenas 1 parâmetro, o nome da pasta (ou container). Para o parâmetro folderName informo o valor source (nome do meu container).

4 – Percebam que o atributo Child Items foi habilitado, possuindo 3 possíveis opções de seleção. Vamos realizar o teste com as 3 opções. Primeiro vamos começar com a opção Ignore, esta opção verifica somente se a pasta (ou container) existe no seu dataset.

5 – Clicamos em Debug para validarmos se a pasta (ou container) realmente existe no dataset.

Uma vez que o debug for executado, vamos realizar a analise do retorno da activity:

1 – Clicamos no ícone do Output.
2 – Verifique que a propriedade Exists retornou TRUE, ou seja, esta pasta (ou container) realmente existe dentro do dataset.
3 – Clicamos no X para fechar o pop-up.

Agora vamos testar a opção True do atributo Child Items. Para isso, realize os seguintes passos:

1 – Selecione a aba Settings.
2 – Selecionamos a opção True, esta opção verifica se a pasta (ou container) existe e se a mesma contém itens dentro dela.
3 – Clicamos em Debug para validarmos se a pasta (ou container) realmente existe e se os arquivos existem dentro desta pasta (ou container).

Uma vez que o debug for executado, vamos realizar a analise do retorno da activity:

1 – Clicamos no ícone do Output.
2 – Verifique que a propriedade Exists retornou TRUE, porém, agora temos também a propriedade childItems que nos retornou os itens que existem dentro desta pasta (ou container).
3 – Clicamos no X para fechar o pop-up.

Agora vamos testar a opção False do atributo Child Items. Para isso, realize os seguintes passos:

1 – Selecione a aba Settings.
2 – Alteramos o valor do atributo Timeout para 10 segundos, ou seja, se a validação não funcionar, a activity vai esperar o tempo do timeout ser atingido.
3 – Selecionamos a opção False, esta opção verifica se a pasta (ou container) existe e se a mesma está vazia (sem itens).
4 – Clicamos em Debug para validarmos se a pasta (ou container) realmente existe e se a mesma esta vazia.

Uma vez que o debug for executado, vamos realizar a analise do retorno da activity:

1 – Clicamos no ícone do Output.
2 – Verifique que a propriedade Exists retornou TRUE, porém a propriedade childItems nos retornou os itens que existem dentro desta pasta (ou container).
3 – Clicamos no X para fechar o pop-up.

4 – Percebam que o ícone de erro também foi exibido. Ele foi exibido, porque a opção False do atributo Child Items não foi atendida, ou seja, ele esperava que a pasta existisse, porém estivesse vazia. E como foi exibido no item 2, a pasta não esta vazia. Clicamos em cima do ícone do erro para que a mensagem seja exibida.

5 – Percebam que a activity tentou fazer a validação até que o timeout foi atingido.
6 – Clicamos no X para fechar o pop-up.

Validando o Dataset CSV – Simulando Erro de validação para chamar a execução de outra activity.

Depois que verificamos que a opção False do atributo Child Items apresentou falha, podemos fazer com que essa falha chame outra activity. Para isso, realize os seguintes passos:

1 – Clique em cima da Activity e selecione o ícone dos status de execução. Atualmente possuímos 4 opções (iremos abordar estas opções em outro post).
2 – Selecione a opção Failure (Falha).

Depois de selecionar a opção Falha, vamos adicionar uma activity de Wait apenas para exemplificar. Para isso, realize os seguintes passos:

1 – Ligue a seta de falha na activity Wait.
2 – Clicamos em Debug para validarmos se o fluxo de erro realizará a execução da próxima activity.

Uma vez que o debug for executado, percebam que mesmo a validação apresentando erro, a próxima activity do fluxo foi executada. É importante ressaltar que a activity de wait foi executada, porque a activity de validação apresentou erro.

Validando o Dataset CSV – Container Vazio

Vamos realizar um novo teste com a opção False do atributo Child Items. Antes de realizar os passos a seguir, apague a activity de Wait. Agora realize os seguintes passos:

1 – Selecione a aba Settings.
2 – Alteramos o parâmetro do dataset para um container que está vazio no blob storage. Para o parâmetro folderName agora informo o valor target.
3 – Clicamos em Debug para validarmos se a pasta (ou container) realmente existe e se a mesma esta vazia.

Uma vez que o debug for executado, vamos realizar a analise do retorno da activity:

1 – Clicamos no ícone do Output.
2 – Verifique que a propriedade Exists retornou TRUE, porém, a propriedade childItems retornou vazio, ou seja, a pasta (ou container) existe, mas não contém itens.
3 – Clicamos no X para fechar o pop-up.

Criando um fluxo de validação e chamando outras activities

Agora vamos construir um fluxo de validações que realizará a chamada de outras activities caso a validação seja positiva ou negativa. Para isso, realize os seguintes passos:

0 – Você pode apagar a activity utilizada anteriormente ou criar um novo pipeline.
1 – Puxe uma activity de Validation e coloque o nome de validate_if_folder_exist.
2 – Clique na aba Settings.

Obs.: Vamos continuar utilizando o dataset que esta apenas no nível do container. Para o parâmetro folderName utilizaremos o valor SOURCE.

3 – Altere o valor do atributo timeout para 20 segundos.
4 – Selecione a Opção Ignore para o atributo Child Items. Para esta activity, vamos apenas verificar se a pasta (ou container) existe em nosso dataset.

5 – Puxe outra activity de Validation e coloque o nome de validate_if_file_exists. Ligue a primeira activity de Validation com nova activity de validation utilizando a seta verde (Success – Sucesso), ou seja, se a pasta (ou container) existir no dataset, o fluxo de sucesso executará outra activity de validation.

6 – Puxe uma activity de Wait e coloque o nome de Action_A. Ligue a primeira activity de Validation com a activity de Wait utilizando a seta vermelha (Failure – Falha), ou seja, se a pasta (ou container) não existir no dataset, o fluxo de falha executará a activity de WAIT com o nome Action_A.

Vamos configurar a activity com o nome validate_if_file_exists. Para isso, realize os seguintes passos:

1 – Clique em cima da activity o nome de validate_if_file_exists.
2 – Clique na aba Settings.

Obs.: Vamos continuar utilizando o dataset que esta apenas no nível do container. Para o parâmetro folderName utilizaremos o valor SOURCE.

3 – Altere o valor do atributo timeout para 20 segundos.
4 – Selecione a Opção True para o atributo Child Items. Para esta activity, vamos apenas verificar se a pasta (ou container) existe e se a mesma possui itens.

5 – Puxe uma activity de Wait e coloque o nome de Action_B. Ligue a segunda activity de Validation com a activity de Wait utilizando a seta verde (Success – Sucesso), ou seja, se a pasta (ou container) existir e a mesma contiver itens, o fluxo de sucesso executará a activity de Wait com nome Action_B.

6 – Puxe outra activity de Wait e coloque o nome de Action_C. Ligue a segunda activity de Validation com a outra activity de Wait utilizando a seta vermelha (Failure – Falha), ou seja, se a pasta (ou container) existir ou não e a mesma não contiver itens , o fluxo de falha executará a activity de WAIT com o nome Action_C.

7 – Puxe outra activity de Validation e coloque o nome de validate_if_folder_empty. Ligue a activity de wait com nome Action_B com esta nova activity de validation utilizando a seta verde (Success – Sucesso), ou seja, se a validação dos arquivos foi realizada com sucesso, o fluxo executará a activity Action_B. Depois que a activity Action_B for executada com sucesso, o fluxo realizará a chamada da outra activity de validation.

Vamos configurar a activity com o nome validate_if_file_exists. Para isso, realize os seguintes passos:

1 – Clique em cima da activity o nome de validate_if_file_exists.
2 – Clique na aba Settings.

Obs.: O valor do parametro folderName do dataset deve ser alterado para TARGET.

3 – Altere o valor do atributo timeout para 20 segundos.
4 – Selecione a Opção True para o atributo Child Items. Para esta activity, vamos apenas verificar se a pasta (ou container) existe e se a mesma esta vazia.

5 – Puxe uma activity de Wait e coloque o nome de Action_D. Ligue a activity de Validation com a activity de Wait utilizando a seta verde (Success – Sucesso), ou seja, se a pasta (ou container) existir e estiver vazia, o fluxo de sucesso executará a activity de Wait com nome Action_D.

6 – Puxe outra activity de Wait e coloque o nome de Action_E. Ligue a activity de Validation com a activity de Wait utilizando a seta vermelha (Failure – Falha), ou seja, se a pasta (ou container) existir ou não e a mesma não estiver vazia, o fluxo de falha executará a activity de WAIT com o nome Action_E.

7 – Clique no botão save para salvar as alterações. Este botão fica habilitado após a configuração do GitHub ou Azure devops no ADF. Link da postagem sobre integração do ADF com GitHub >> LINK <<

8 – Clicamos em Debug para testar o fluxo de validações.

Uma vez que o debug foi executado, podemos perceber que as validações ocorreram com sucesso seguindo um fluxo lógico de execução das demais ações conforme planejado. Fazendo uma analise do fluxo, temos as seguintes observações:

1 – A primeira activity de validation verificou que a pasta existe no dataset. O fluxo executa a próxima activity de validation.
2 – A primeira activity de validation verificou que a pasta existe e que contem arquivos dentro. O fluxo executa a próxima activity que a Action_B (WAIT).
3 – A activity de wait chamada Action_B é executada com sucesso e o fluxo executa a próxima activity de validation.
4 – A terceira activity de validation verificou que a pasta existe e esta vazia. O fluxo executa a próxima activity que a Action_D (WAIT).

Este seria um fluxo de sucesso. Lembrando que, simulamos todo o processo com activities de wait, porém, poderíamos ter utilizado qualquer outra activity disponível no ADF.

Criando um fluxo de validação e chamando outras activities – Simulando erro

Agora vamos simular um erro na primeira activity de validação e entender o que acontece com o fluxo. Para isso, realize os seguintes passos:

1 – Clique em cima da activity o nome de validate_if_folder_exist.
2 – Clique na aba Settings.

3 – Altere o valor do parametro folderName do dataset para SOURCEX. Ou seja, esta pasta (ou container) não existe no blob storage.

4 – Clique no botão save para salvar as alterações. Este botão fica habilitado após a configuração do GitHub ou Azure devops no ADF. Link da postagem sobre integração do ADF com GitHub >> LINK <<

5 – Clicamos em Debug para testar o fluxo de validações.

Uma vez que o debug foi executado, podemos perceber que a primeira validação apresentou erro, assim realizando a chamada da activity de wait com nome Action_A que encerra o nosso fluxo do pipeline. Fazendo uma analise do fluxo, temos as seguintes observações:

1 – A primeira activity de validation, verificou que a pasta não existe no dataset, ou seja, a validação tentou procurar a existência da pasta (ou container) até atingir o timeout, fazendo com que o fluxo de falha seja acionado realizando a execução da activity de Wait com nome Action_A.

Este seria um fluxo de erro. Lembrando que, simulamos todo o processo com activities de wait, porém, poderíamos ter utilizado qualquer outra activity disponível no ADF.

Obs: A activity de Validation se torna importante quando queremos validar a existência de dados contidos em nossos datasets. Esta activity vai definir qual será o caminho do fluxo de ações que o pipeline executará. Este controle se semelha a um guarda de transito, que orienta o fluxo de carros de acordo com um determinado acontecimento.

Atenção: Se você esta com uma conta gratuita, pay-as-you-go ou de estudante, não esquecer de apagar os recursos criados nesta postagem. Para contas de estudante e gratuita a exclusão dos recursos evita o consumo dos créditos disponíveis, além disso, evita que aconteça cobrança indevida em sua subscription (assinatura). Para a conta pay-as-you-go é cobrado do cartão de crédito conforme o uso dos serviços, então, recomendo apagar para não gerar cobrança no seu cartão de crédito.

Espero que tenham gostado desta postagem, vou fazer mais postagens técnicas sobre data factory. Aguardem que 2021 vai ter muito conteúdo legal no blog.

Desejo a todos uma boa leitura, boa prática e bons estudos.

Para quem quer estudar:

  • Curso preparatório para Certificação Microsoft MTA Database Fundamentals | BD Relacional e Linguagem T-SQL.
    • Segue o link do curso na Udemy. >> LINK <<
  • Curso Azure Databases para Iniciantes
    • Segue o link do curso na Udemy. >> LINK <<
  • Curso Azure Data Factory para Iniciantes
    • Segue o link do curso na Udemy. >> LINK <<

Não se esqueçam de avaliar esta postagem através da ESTRELAS abaixo das redes sociais, isso vai me ajudar muito a melhorar as postagens.

Quem quiser mandar comentários, sugestões, criticas e complementos, fiquem a vontade, pois feedbacks positivos ou negativos engradecem meu conhecimento para que possa melhorar as postagem para vocês.

Até a próxima o/

Acessem nossas Redes Sociais: