Validação e depuração de transformações de dados
Os desenvolvedores de software e outros profissionais de dados frequentemente precisam transformar dados de um formato para outro. Estas transformações podem ser conversões simples e diretas, ou podem exigir manipulações mais complexas. Por exemplo, é necessário gerar relações ao importar ficheiros CSV para uma base de dados, ou os dados de origem podem precisar de ser divididos para o formato de destino, como no caso do nome completo em relação ao primeiro nome, nome do meio, apelido e sufixo opcional. A validação da transformação de dados é fundamental para evitar a perda ou corrupção de dados.
Num artigo anterior, publicado em.. Integração de dados de serviços web, Combinámos um valor de texto que representa a hora GMT com um valor numérico que indica o ajuste em segundos, para gerar a hora local utilizada nas previsões meteorológicas. Criámos uma função de utilizador que executa todos os passos necessários para realizar esta operação. O MapForce inclui um depurador de mapeamento de dados interativo e poderoso, que permite rastrear e validar facilmente esta transformação. Vamos analisar como funciona.

Aqui está a representação da função do utilizador "calc-local-time" no nosso projeto de transformação de dados. Como podem ver, o MapForce suporta a mapeamento de dados sem a necessidade de programação, através de uma interface visual e intuitiva de arrastar e soltar.

A função aceita dt_txt, que é um valor de texto representando uma data e hora no formato "AAAA-MM-DD HH:MM:SS", e o valor numérico do fuso horário, que representa o desvio em segundos em relação ao Tempo Universal Coordenado (UTC) para a localização especificada na previsão.
Após a transformação dos dados, o resultado da função é atribuído à coluna A de uma folha de cálculo do Excel. Dentro da folha de cálculo, o formato da coluna A é definido como "Data", e o formato especificado inclui a hora, como por exemplo, 20/05/2020 16:00.
Clicar duas vezes no cabeçalho da função do utilizador expande-o, mostrando as operações individuais

Os dois valores de entrada estão à direita, e o resultado final, identificado como "A", está no extremo esquerdo. De forma simples, a função adiciona os segundos da zona horária à data e hora "dt_txt" para calcular a hora local. O MapForce inclui uma função integrada para adicionar datas e horas que realiza esta operação, como se pode ver na imagem acima, logo à esquerda do valor de saída "A". No entanto, nada é tão simples como parece! Os valores de entrada recebidos do serviço web chegam em diferentes formatos e devem ser ajustados ao formato e à sintaxe da função de adição de datas e horas.
Validação da transformação de dados utilizando o depurador do MapForce
Podemos usar o MapForce depurador de transformação de dados Para verificar o funcionamento da função do utilizador e garantir que produz o resultado desejado, vamos seguir os passos da função. Primeiro, vamos definir um ponto de interrupção para depuração: clique com o botão direito no campo de introdução do fuso horário:

Várias janelas de auxílio para depuração são abertas e a transformação prossegue até que o ponto de interrupção seja atingido. O valor processado no ponto de interrupção é destacado:

Temos várias opções para continuar a execução. A opção "Passo Mínimo" oferece a visão mais detalhada de cada etapa de transformação de dados.

Este comando divide um passo e, normalmente, interrompe duas vezes para cada conexão: uma vez quando a fonte produz um valor e outra vez quando o destino o consome. Clicar repetidamente em "Passo Mínimo" continua a execução da transformação e permite-nos observar exatamente o que acontece à medida que a função "calc-local-time" processa os dados:

À medida que o processo de execução continua, os valores de cada conexão são adicionados à janela.
A função integrada "datetime-add" requer um valor de data e hora como primeiro argumento e um valor de texto que especifique o período de tempo a adicionar como segundo argumento. Na imagem abaixo, mostramos passo a passo todo o processo até à produção do valor de saída. Estão destacados os argumentos de entrada da função "datetime-add" e o resultado final produzido:

O valor original de deslocamento para os segundos é de 28.800 segundos, o que equivale a oito horas. O resultado obtido é oito horas posterior à hora de referência dt_txt, portanto, a saída é válida.
Considerando outros casos
O ajuste em relação à hora GMT será positivo apenas para locais que se encontram a leste de GMT. Os locais a oeste de GMT devem ter um ajuste negativo. Em outras palavras, Nova Iorque está a oeste de Londres, e a hora local é mais cedo. Pequim está a leste de GMT, e a hora local é mais tarde.
Precisamos validar a função "calc-local-time" para um caso em que o ajuste de fuso horário é negativo.
Existem várias maneiras de o fazer. A nossa lista de locais inclui algumas localizações a leste de Greenwich Mean Time (GMT) e outras a oeste. Poderíamos continuar a executar o processo até encontrarmos uma localização com um fuso horário negativo.

O serviço web retorna 40 previsões para cada cidade, pelo que percorrer todas as previsões das primeiras quatro cidades seria um processo moroso.
Podemos modificar a lista de cidades para inserir uma nova cidade do hemisfério ocidental no topo da lista, ou podemos criar um novo ficheiro de entrada para um caso de teste. Em muitas situações, essa é uma estratégia de teste razoável.
Ou, podemos definir uma condição para o ponto de interrupção. Se conseguirmos configurar o ponto de interrupção para que a execução só seja interrompida quando o valor encontrado for negativo, podemos continuar com o nosso ficheiro de entrada original. Essa será a forma mais rápida de chegar a uma conclusão final.
Voltando ao mapeamento de dados, clicamos com o botão direito no ponto de interrupção para modificar as suas propriedades:

Isto abre uma janela de diálogo onde podemos definir uma propriedade para tornar o ponto de interrupção condicional. Na imagem abaixo, é mostrada a condição para interromper a execução caso o valor da zona horária seja negativo:

Agora podemos executar novamente a configuração no modo de depuração. As primeiras cidades da lista de entrada que estão todas a leste do Tempo Universal Coordenado (UTC) são processadas. Quando é encontrado o primeiro valor de fuso horário negativo, o ponto de interrupção é ativado e a execução é interrompida.

Utilizando a mesma técnica de análise descrita acima, podemos acompanhar a evolução do valor negativo à medida que a função "calc-local-time" processa os dados.

O valor de fuso horário de -25.200 segundos é convertido para uma cadeia de caracteres. Em seguida, a função de concatenação interna adiciona caracteres no início e no fim para construir a cadeia de caracteres que representa a duração, utilizada pela função "datetime-add".
Adicionar um valor negativo é o mesmo que subtrair, mas neste momento a sintaxe para a duração não está totalmente correta. O sinal de menos (hífen) precisa ser o primeiro caractere da cadeia de caracteres que representa a duração. Assim, a função de substituição procura a cadeia de caracteres "PT-" e, se a encontrar, substitui-a por "-PT".
O valor de 25.200 segundos corresponde a sete horas. Subtraindo sete horas ao valor de entrada 2020-05-23T00:00:00, obtemos 2020-05-22T17:00:00, ou 22/05/2020 às 17:00. Agora, validámos a função do utilizador para casos com valores de deslocamento positivos e negativos.
Seja para verificar a precisão de uma transformação de dados ou para identificar a causa de um resultado inesperado, depuração da conversão de dados E a funcionalidade de transformação no MapForce oferece uma compreensão profunda do funcionamento interno de projetos de integração de dados e ETL, de uma forma que nunca foi possível antes, mesmo em produtos de mapeamento de dados muito mais caros.
Veja um vídeo rápido demonstração em vídeo do MapForce, ou Descarregue uma versão de avaliação gratuita incluindo tutoriais, ajuda e muitos exemplos para começar o seu próprio projeto de integração de dados JSON e de serviços web, ou para outras necessidades de mapeamento, conversão e transformação de dados!