Desvio de esquema no mapeamento do fluxo de dados

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!

O desvio de esquema é o caso em que suas fontes frequentemente alteram metadados. Campos, colunas e tipos podem ser adicionados, removidos ou alterados imediatamente. Sem lidar com desvios de esquema, seu fluxo de dados fica vulnerável a alterações na fonte de dados upstream. Os padrões de ETL típicos falham quando as colunas e os campos de entrada mudam porque tendem a estar vinculados a esses nomes de origem.

Para proteger contra desvios de esquema, é importante ter as facilidades em uma ferramenta de fluxo de dados para permitir que você, como engenheiro de dados:

  • Definir fontes com nomes de campos, tipos de dados, valores e tamanhos mutáveis
  • Definir parâmetros de transformação que possam trabalhar com padrões de dados em vez de campos e valores codificados
  • Definir expressões que compreendam padrões para corresponder aos campos de entrada, em vez de usar campos nomeados

O Azure Data Factory dá suporte nativo a esquemas flexíveis que mudam de execução para execução para que você possa criar lógica de transformação de dados genérica sem a necessidade de recompilar seus fluxos de dados.

Você precisa tomar uma decisão arquitetônica em seu fluxo de dados para aceitar o desvio de esquema em todo o fluxo. Ao fazer isso, você pode se proteger contra alterações de esquema das fontes. No entanto, você perderá a vinculação antecipada de suas colunas e tipos em todo o fluxo de dados. O Azure Data Factory trata os fluxos de desvio de esquema como fluxos de vinculação tardia, portanto, quando você cria suas transformações, os nomes de colunas desviadas não estarão disponíveis para você nas exibições de esquema em todo o fluxo.

Este vídeo fornece uma introdução a algumas das soluções complexas que você pode criar facilmente nos pipelines do Azure Data Factory ou do Synapse Analytics com o recurso de desvio de esquema do fluxo de dados. Neste exemplo, criamos padrões reutilizáveis com base em esquemas de banco de dados flexíveis:

Desvio de esquema na origem

As colunas que entram no fluxo de dados a partir da definição de origem são definidas como "derivadas" quando não estão presentes na projeção de origem. Você pode visualizar sua projeção de origem na guia de projeção na transformação de origem. Quando você seleciona um conjunto de dados para sua origem, o serviço automaticamente pega o esquema do conjunto de dados e cria uma projeção a partir dessa definição de esquema de conjunto de dados.

Em uma transformação de origem, o desvio de esquema é definido como a leitura de colunas que não estão definidas no esquema do conjunto de dados. Para habilitar o desvio de esquema, marque Permitir desvio de esquema na transformação de origem.

Schema drift source

Quando o desvio de esquema está habilitado, todos os campos de entrada são lidos da origem durante a execução e passados por todo o fluxo até o coletor. Por padrão, todas as colunas recém-detectadas, conhecidas como colunas derivadas, chegam como um tipo de dados de cadeia de caracteres. Se desejar que seu fluxo de dados infera automaticamente tipos de dados de colunas derivadas, marque Inferir tipos de colunas derivadas em suas configurações de origem.

Desvio de esquema no sumidouro

Em uma transformação de coletor, desvio de esquema é quando você escreve colunas adicionais sobre o que é definido no esquema de dados do coletor. Para habilitar o desvio de esquema, marque Permitir desvio de esquema na transformação do coletor.

Schema drift sink

Se o desvio de esquema estiver habilitado, verifique se o controle deslizante de mapeamento automático na guia Mapeamento está ativado. Com este controle deslizante ativado, todas as colunas de entrada são gravadas no seu destino. Caso contrário, você deve usar o mapeamento baseado em regras para escrever colunas derivadas.

Sink auto mapping

Transformação de colunas derivadas

Quando o fluxo de dados tiver colunas desviadas, você poderá acessá-las em suas transformações com os seguintes métodos:

  • Use as byPosition expressões e byName para fazer referência explícita a uma coluna por nome ou número de posição.
  • Adicione um padrão de coluna em uma transformação Coluna derivada ou Agregação para corresponder a qualquer combinação de nome, fluxo, posição, origem ou tipo
  • Adicione mapeamento baseado em regras em uma transformação Select ou Sink para fazer a correspondência entre colunas derivadas e aliases de colunas por meio de um padrão

Para obter mais informações sobre como implementar padrões de coluna, consulte Padrões de coluna no mapeamento de fluxo de dados.

Ação rápida de colunas derivadas do mapa

Para fazer referência explícita a colunas derivadas, você pode gerar rapidamente mapeamentos para essas colunas por meio de uma ação rápida de visualização de dados. Quando o modo de depuração estiver ativado, vá para a guia Visualização de dados e clique em Atualizar para buscar uma visualização de dados. Se o data factory detetar que existem colunas derivadas, você poderá clicar em Mapear derivadas e gerar uma coluna derivada que permita fazer referência a todas as colunas derivadas em exibições de esquema a jusante.

Screenshot shows the Data Preview tab with Map drifted called out.

Na transformação de Coluna Derivada gerada, cada coluna derivada é mapeada para seu nome e tipo de dados detetados. Na visualização de dados acima, a coluna 'movieId' é detetada como um inteiro. Depois que Map Drifted é clicado, movieId é definido na Coluna Derivada como toInteger(byName('movieId')) e incluído nas exibições de esquema em transformações downstream.

Screenshot shows the Derived Column's Settings tab.

Na linguagem de expressão de fluxo de dados, você encontrará recursos adicionais para padrões de coluna e desvio de esquema, incluindo "byName" e "byPosition".