Partilhar via


Referências de variáveis em um fluxo de dados

Observação

Este artigo se concentra em uma arquitetura de solução de arquiteturas de solução CI/CD e ALM (Application Lifecycle Management) para Dataflow Gen2 que depende da integração de bibliotecas variáveis e só é aplicável ao Dataflow Gen2 com suporte a CI/CD.

As bibliotecas de variáveis de malha no Dataflow Gen2 permitem o gerenciamento de configuração centralizado e reutilizável entre ambientes. Ao fazer referência a variáveis diretamente em seus scripts de fluxo de dados, você pode ajustar dinamicamente o comportamento sem valores de codificação, o que é ideal para fluxos de trabalho de CI/CD. Essa integração simplifica a implantação entre estágios, permitindo que valores específicos do espaço de trabalho (como Lakehouse ou IDs de espaço de trabalho) sejam injetados em tempo de execução, tornando seus fluxos de dados mais adaptáveis e fáceis de manter.

Este tutorial orienta você por uma solução de exemplo que usa referências de variáveis em um fluxo de dados e mostra como:

  • Definir variáveis: usando as bibliotecas de variáveis Fabric e seus tipos de dados distintos
  • Fonte orientada por variáveis: Usando um Lakehouse com o conjunto de dados de exemplo WideWorldImpoters como fonte
  • Lógica orientada por variáveis: Usando os widgets de entrada disponíveis em toda a experiência do Dataflow
  • Destino orientado por variáveis: Usando um armazém como destino

Diagrama de uma arquitetura de solução que usa referências variáveis no Dataflow Gen2.

Observação

Os conceitos apresentados neste artigo são universais para o Dataflow Gen2 e são aplicáveis a outras fontes e destinos além dos mostrados aqui.

O cenário

Captura de tela da consulta com o nome dimension_city para o cenário dentro do Dataflow Gen2.

O fluxo de dados usado neste cenário é simples, mas os princípios básicos descritos se aplicam a todos os tipos de fluxos de dados. Conecta-se à tabela chamada dimension_city do conjunto de dados de exemplo da Wide World Importers armazenado num Lakehouse. Ele filtra linhas em que a coluna SalesTerritory é igual a Sudeste e carrega o resultado em uma nova tabela chamada Cidade em um Depósito. Todos os componentes — Lakehouse, Warehouse e Dataflow — estão localizados no mesmo espaço de trabalho. Para tornar o fluxo de dados dinâmico, use variáveis para direcionar a tabela de origem, o valor do filtro e a tabela de destino. Essas alterações permitem que o fluxo de dados seja executado com valores armazenados em bibliotecas de variáveis da Fabric, em vez de valores codificados diretamente.

Definir variáveis

Observação

Certifique-se de ter as bibliotecas de variáveis Fabric habilitadas para a sua organização ou grupo de segurança. Saiba mais sobre como começar a usar bibliotecas variáveis.

Como prática recomendada, é sempre recomendável ter um design em mente antes de criar uma solução e quais componentes do seu Dataflow são originados dinamicamente de uma biblioteca variável. Embora você possa criar várias bibliotecas em um espaço de trabalho, este exemplo usa uma única biblioteca chamada My Library que contém as variáveis que o Dataflow Gen2 usa:

Nome da variável Tipo Propósito
WorkspaceId Guia Usado para os scripts de origem de dados e destino no fluxo de dados
LakehouseId Guia Determina a ID da Lakehouse que está sendo usada como fonte
WarehouseId Guia Determina a ID do Armazém que está sendo usado como destino
Território String Define qual valor deve ser usado para conduzir a lógica de filtro no fluxo de dados

Certifique-se de definir os valores padrão que correspondem ao seu próprio ambiente e, em seguida, salve a biblioteca de variáveis.

Captura de tela das bibliotecas de variáveis Fabric recém-criadas com as variáveis WorkspaceId, LakehouseId, WarehouseId e Territory.

Fonte acionada por variáveis

Ao usar qualquer um dos conectores de malha, como Lakehouse, Warehouse ou Fabric SQL, todos eles seguem a mesma estrutura de navegação e usam o mesmo formato de entrada. Nesse cenário, nenhum dos conectores requer entrada manual para estabelecer uma conexão. No entanto, cada um mostra a qual espaço de trabalho e item ele se conecta por meio das etapas de navegação em sua consulta. Por exemplo, a primeira etapa de navegação inclui o workspaceId ao qual a consulta se conecta.

Captura de ecrã do passo de Navegação 1 com o valor workspaceId na barra de fórmulas da consulta dimension_city.

O objetivo é substituir os valores codificados na barra de fórmulas por variáveis. Especificamente, você deseja usar as variáveis WorkspaceId e LakehouseId para conduzir essa lógica. Primeiro, você precisa trazer essas variáveis para o Dataflow Gen2. Uma abordagem recomendada é criar consultas para cada variável distinta para centralizar e gerenciar facilmente quaisquer variáveis que você planeja usar. Para fazer isso, crie uma consulta em branco na opção Obter dados na barra de opções e selecione a opção Consulta em branco no menu suspenso.

Captura de ecrã da entrada 'Obter dados' no separador Base para criar uma consulta em branco.

Selecionar essa opção traz uma nova caixa de diálogo onde você pode ver a consulta em branco que é criada. Você pode selecionar OK para trazer essa nova consulta em branco.

Captura de ecrã da caixa de diálogo de consulta em branco.

Depois que sua consulta tiver sido criada e aparecer no fluxo de dados, renomeie-a para WorkspaceId e substitua a fórmula na etapa Source para ser:

Variable.ValueOrDefault("$(/**/My Library/WorkspaceId)", "Your Workspace ID")

Este script é essencialmente capaz de determinar qual biblioteca e variável deve obter. O segundo argumento da Variable.ValueOrDefault função determina qual valor fornecer quando uma variável não pode ser buscada.

Observação

Certifique-se de substituir a cadeia de caracteres de "Your Workspace ID", o segundo argumento da função, pelo seu próprio valor correspondente em seu ambiente e salve a consulta.

Repita esse processo para a variável LakehouseId e crie uma consulta com o mesmo nome da variável, mas use a seguinte fórmula para a etapa Source:

Variable.ValueOrDefault("$(/**/My Library/LakehouseId)", "Your Lakehouse ID")

Observação

Certifique-se de substituir a string "Your Lakehouse ID", o segundo argumento da função, pelo seu próprio valor correspondente no seu ambiente e salve a consulta.

Captura de tela mostrando consultas recém-criadas chamadas LakehouseId e WorkspaceId.

Depois que ambas as consultas forem criadas, você poderá atualizar o script de consulta para usá-las em vez de valores codificados. Isso envolve a substituição manual dos valores originais na barra de fórmulas por referências às consultas WorkspaceId e LakehouseId. O script de consulta original tem esta aparência:

let
  Source = Lakehouse.Contents([]),
  #"Navigation 1" = Source{[workspaceId = "8b325b2b-ad69-4103-93ae-d6880d9f87c6"]}[Data],
  #"Navigation 2" = #"Navigation 1"{[lakehouseId = "2455f240-7345-4c8b-8524-c1abbf107d07"]}[Data],
  #"Navigation 3" = #"Navigation 2"{[Id = "dimension_city", ItemKind = "Table"]}[Data],
  #"Filtered rows" = Table.SelectRows(#"Navigation 3", each ([SalesTerritory] = "Southeast")),
  #"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"ValidFrom", "ValidTo", "LineageKey"})
in
  #"Removed columns"

Depois de atualizar as referências nas etapas de navegação, o novo script atualizado pode ter esta aparência:

let
  Source = Lakehouse.Contents([]),
  #"Navigation 1" = Source{[workspaceId = WorkspaceId]}[Data],
  #"Navigation 2" = #"Navigation 1"{[lakehouseId = LakehouseId]}[Data],
  #"Navigation 3" = #"Navigation 2"{[Id = "dimension_city", ItemKind = "Table"]}[Data],
  #"Filtered rows" = Table.SelectRows(#"Navigation 3", each ([SalesTerritory] = "Southeast")),
  #"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"ValidFrom", "ValidTo", "LineageKey"})
in
  #"Removed columns"

Percebe-se que ainda avalia corretamente a pré-visualização dos dados no editor de fluxo de dados, com as referências diretas criadas na visualização de diagrama entre todas as consultas envolvidas.

Captura de tela com consultas WorkspaceId e LakehouseId sendo referenciadas na consulta dimension_city.

Lógica acionada por variáveis

Agora que a fonte está usando variáveis, você pode se concentrar em modificar a lógica de transformação do fluxo de dados. Nesse cenário, a etapa de filtro é onde a lógica é aplicada, e o valor que está sendo filtrado, atualmente codificado como Sudeste, deve ser substituído por uma consulta que faz referência a uma variável. Para fazer isso, repita o mesmo processo de criação de uma nova consulta em branco e redirecione a fórmula de sua etapa Source para manter a variável para Territory e alterar o nome da consulta para o nome da variável também. Use o seguinte script:

Variable.ValueOrDefault("$(/**/My Library/Territory)", "Mideast")

Captura de tela da consulta Território criada no fluxo de dados.

Dado que sua etapa de filtro foi criada usando a interface do usuário, você pode ir para a etapa Linhas filtradas, selecioná-la duas vezes e obter a caixa de diálogo de configurações para a etapa de filtro. Esta caixa de diálogo permite que você selecione, através do widget de entrada, se deseja usar uma consulta em vez de um valor estático:

Captura de tela do widget de entrada na caixa de diálogo de linhas de filtro com a opção de fazer referência a uma consulta.

Depois de selecionar a opção Selecionar uma consulta, uma lista suspensa aparecerá para mostrar todas as consultas que você pode escolher. Nessa lista, você pode selecionar a consulta Território recém-criada.

Captura de ecrã da consulta Território selecionada dentro do widget de entrada na janela de diálogo das linhas de filtro.

Depois de selecionar OK, observe que a exibição de diagrama já criou o link entre a consulta Território e a consulta em uso. Não só isso, mas a visualização de dados agora mostra informações para o território do Oriente Médio .

Captura de ecrã da vista Diagrama, definições de consulta e Pré-visualização de dados para a consulta dimension_city que mostra dados para o Mideast SalesTerritory.

Destino determinado por variáveis

Observação

É recomendável que você se familiarize com o conceito de destinos de dados no Dataflow Gen2 e como seu script de mashup é criado a partir do artigo sobre destinos de dados e configurações gerenciadas

O último componente a ser modificado nesse cenário é o destino. Embora as informações sobre qual é o destino dos dados possam ser encontradas no editor de fluxo de dados, para modificar essa parte do fluxo de dados você precisa usar o Git ou a API REST.

Captura de ecrã do painel deslizante que contém as configurações de destino de dados para a consulta dimension_city.

Este tutorial mostra como fazer as alterações através do Git. Antes de fazer alterações através do git, certifique-se de:

  • Crie uma consulta para a variável WarehouseId: siga o mesmo processo descrito nas seções anteriores para criar uma nova consulta em branco e substituir a fórmula para a etapa Source ser:
Variable.ValueOrDefault("$(/**/My Library/WarehouseId)", "Your Warehouse ID")

Observação

Certifique-se de substituir a cadeia de caracteres de "Your Warehouse ID", o segundo argumento da função, pelo seu próprio valor correspondente em seu ambiente e salve a consulta.

Captura de tela de todas as consultas no fluxo de dados, incluindo a consulta WarehouseId recém-criada.

Importante

Certifique-se de que todas as suas consultas que contêm uma variável têm a encenação desativada. Captura de ecrã da opção de preparação para uma consulta no menu contextual.

  • Salvar o fluxo de dados: use o botão Salvar na guia inicial da faixa de opções.

Captura de tela do botão salvar fluxo de dados.

Depois que o Dataflow for salvo, certifique-se de confirmar as alterações no repositório Git e vá até o repositório para ver o arquivo mashup.pq do Dataflow. Ao examinar o arquivo mashup.pq , procure a consulta à qual você associou o destino dos dados. Nesse cenário, o nome dessa consulta é dimension_city. Você verá um atributo de registro acima deste nome de consulta:

[DataDestinations = {[Definition = [Kind = "Reference", QueryName = "dimension_city_DataDestination", IsNewTarget = true], Settings = [Kind = "Manual", AllowCreation = true, ColumnSettings = [Mappings = {[SourceColumnName = "CityKey", DestinationColumnName = "CityKey"], [SourceColumnName = "WWICityID", DestinationColumnName = "WWICityID"], [SourceColumnName = "City", DestinationColumnName = "City"], [SourceColumnName = "StateProvince", DestinationColumnName = "StateProvince"], [SourceColumnName = "Country", DestinationColumnName = "Country"], [SourceColumnName = "Continent", DestinationColumnName = "Continent"], [SourceColumnName = "SalesTerritory", DestinationColumnName = "SalesTerritory"], [SourceColumnName = "Region", DestinationColumnName = "Region"], [SourceColumnName = "Subregion", DestinationColumnName = "Subregion"], [SourceColumnName = "Location", DestinationColumnName = "Location"], [SourceColumnName = "LatestRecordedPopulation", DestinationColumnName = "LatestRecordedPopulation"]}], DynamicSchema = false, UpdateMethod = [Kind = "Replace"], TypeSettings = [Kind = "Table"]]]}]
shared dimension_city = let

Esse registro de atributo tem um campo com o nome QueryName, que contém o nome da consulta que tem toda a lógica de destino de dados associada a essa consulta. Esta consulta tem a seguinte aparência:

shared dimension_city_DataDestination = let
  Pattern = Fabric.Warehouse([HierarchicalNavigation = null, CreateNavigationProperties = false]),
  Navigation_1 = Pattern{[workspaceId = "8b325b2b-ad69-4103-93ae-d6880d9f87c6"]}[Data],
  Navigation_2 = Navigation_1{[warehouseId = "527ba9c1-4077-433f-a491-9ef370e9230a"]}[Data],
  TableNavigation = Navigation_2{[Item = "City", Schema = "dbo"]}?[Data]?
in
  TableNavigation

Você percebe que, da mesma forma que o script da origem para o Lakehouse, esse script para o destino tem um padrão semelhante onde codifica o workspaceid que precisa ser usado e também o warehouseId. Substitua esses valores fixos pelos identificadores das consultas que você criou e seu script terá a seguinte aparência:

shared dimension_city_DataDestination = let
  Pattern = Fabric.Warehouse([HierarchicalNavigation = null, CreateNavigationProperties = false]),
  Navigation_1 = Pattern{[workspaceId = WorkspaceId]}[Data],
  Navigation_2 = Navigation_1{[warehouseId = WarehouseId]}[Data],
  TableNavigation = Navigation_2{[Item = "City", Schema = "dbo"]}?[Data]?
in
  TableNavigation

Agora você pode confirmar essa alteração e atualizar seu fluxo de dados usando as alterações do seu Dataflow por meio do recurso de controle do código-fonte em seu espaço de trabalho.

Agora você pode executar seu Dataflow, que usa valores de bibliotecas de variáveis.