Capture e visualize a linhagem de dados usando o Unity Catalog

Este artigo descreve como capturar e visualizar a linhagem de dados usando o Catalog Explorer, as tabelas do sistema de linhagem de dados e o site REST API.

O senhor pode usar o Unity Catalog para capturar a linhagem de dados em tempo de execução nas consultas executadas no Databricks. A linhagem é compatível com todos os idiomas e é capturada até o nível da coluna. Os dados de linhagem incluem Notebook, fluxo de trabalho e dashboards relacionados à consulta. A linhagem pode ser visualizada no Catalog Explorer quase em tempo real e recuperada de forma programática usando as tabelas do sistema de linhagem e a API REST da Databricks.

A linhagem é agregada em todos os espaços de trabalho anexados a um metastore do Unity Catalog. Isso significa que a linhagem capturada em um workspace é visível em qualquer outro workspace compartilhado nesse metastore. Os usuários devem ter as permissões corretas para view os dados de linhagem. Os dados de linhagem são mantidos por 1 ano.

A imagem a seguir é um exemplo de gráfico de linhagem. A funcionalidade e os exemplos específicos da linhagem de dados são abordados mais adiante neste artigo.

Visão geral da linhagem

Para obter informações sobre o acompanhamento da linhagem de um modelo do aprendizado de máquina, consulte Acompanhar a linhagem de dados de um modelo em Unity Catalog.

Requisitos

Os itens a seguir são necessários para capturar a linhagem de dados usando o Unity Catalog:

  • O workspace deve ter o Unity Catalog ativado.

  • As tabelas devem ser registradas em um metastore Unity Catalog .

  • query deve usar o Spark DataFrame (por exemplo, funções Spark SQL que retornam um DataFrame) ou interfaces Databricks SQL. Para obter exemplos de query Databricks SQL e PySpark, consulte Exemplos.

  • Para view a linhagem de uma tabela ou view, os usuários devem ter pelo menos o privilégio BROWSE no catálogo pai da tabela ou view.

  • Para view informações de linhagem para Notebook, fluxo de trabalho ou dashboards, os usuários devem ter permissões sobre esses objetos conforme definido pelas configurações de controle de acesso no workspace. Consulte Permissões de linhagem.

  • Para view a linhagem de um pipeline habilitado para Unity Catalog, você deve ter permissões CAN_VIEW no pipeline.

  • O acompanhamento da transmissão da linhagem entre as tabelas Delta requer Databricks Runtime 11.3 LTS ou acima.

  • O acompanhamento da linhagem de colunas para cargas de trabalho Delta Live Tables requer Databricks Runtime 13.3 LTS ou acima.

Exemplos

Observação

  • Os exemplos a seguir usam o nome do catálogo lineage_data e o nome do esquema lineagedemo. Para usar um catálogo e esquema diferente, altere os nomes usados nos exemplos.

  • Para concluir este exemplo, você deve ter privilégios CREATE e USE SCHEMA em um esquema. Um administrador de metastore, proprietário de catálogo ou proprietário de esquema pode conceder esses privilégios. Por exemplo, para conceder permissão a todos os usuários do grupo 'data_engineers' para criar tabelas no esquema lineagedemo no catálogo lineage_data, um usuário com um dos privilégios ou funções acima pode executar a seguinte query:

    CREATE SCHEMA lineage_data.lineagedemo;
    GRANT USE SCHEMA, CREATE on SCHEMA lineage_data.lineagedemo to `data_engineers`;
    

Capture e explore a linhagem

Para capturar dados de linhagem:

  1. Vá para suas páginas Databricks de aterrissagem, clique Novo ícone Novo na barra lateral e selecione Notebook no menu.

  2. Digite um nome para o Notebook e selecione SQL no idiomadefault .

  3. Em clusters, selecione um clusters com acesso ao Unity Catalog.

  4. Clique em Criar.

  5. Na primeira célula Notebook , insira a seguinte query:

    CREATE TABLE IF NOT EXISTS
      lineage_data.lineagedemo.menu (
        recipe_id INT,
        app string,
        main string,
        dessert string
      );
    
    INSERT INTO lineage_data.lineagedemo.menu
        (recipe_id, app, main, dessert)
    VALUES
        (1,"Ceviche", "Tacos", "Flan"),
        (2,"Tomato Soup", "Souffle", "Creme Brulee"),
        (3,"Chips","Grilled Cheese","Cheesecake");
    
    CREATE TABLE
      lineage_data.lineagedemo.dinner
    AS SELECT
      recipe_id, concat(app," + ", main," + ",dessert)
    AS
      full_menu
    FROM
      lineage_data.lineagedemo.menu
    
  6. Para executar a query, clique na célula e pressione shift+enter ou clique menu de execução e selecione a célula de execução.

Para usar o Catalog Explorer para view a linhagem gerada por essas consultas:

  1. Na caixa Search (Pesquisar ) na barra superior do site Databricks workspace, procure a tabela lineage_data.lineagedemo.dinner e selecione-a.

  2. Selecione a tab Linhagem . O painel de linhagem aparece e exibe tabelas relacionadas (neste exemplo, é a tabela menu ).

  3. Para view um gráfico interativo da linhagem de dados, clique em See Lineage gráfico. Em default, um nível é exibido no gráfico. Clique no ícone Ícone de Sinal de Mais em um nó para revelar mais conexões, se estiverem disponíveis.

  4. Clique em uma seta que conecta os nós no gráfico de linhagem para abrir o painel de conexão de linhagem. O painel de conexão do Lineage mostra detalhes sobre a conexão, incluindo tabelas de origem e destino, Notebook e fluxo de trabalho.

    gráfico de linhagem
  5. Para mostrar o Notebook associado à tabela dinner, selecione o Notebook no painel de conexão Lineage ou feche o gráfico de lineage e clique em Notebook. Para abrir o Notebook em um novo tab, clique no nome Notebook.

  6. Para view a linhagem em nível de coluna, clique em uma coluna no gráfico para mostrar links para colunas relacionadas. Por exemplo, clicar na coluna "full_menu" mostra as colunas upstream das quais a coluna foi derivada:

    Linhagem de colunas do menu completo

Para view lineage usando um idioma diferente, por exemplo, Python:

  1. Abra o Notebook que você criou anteriormente, crie uma nova célula e digite o seguinte código Python:

    %python
    from pyspark.sql.functions import rand, round
    df = spark.range(3).withColumn("price", round(10*rand(seed=42),2)).withColumnRenamed("id","recipe_id")
    
    df.write.mode("overwrite").saveAsTable("lineage_data.lineagedemo.price")
    
    dinner = spark.read.table("lineage_data.lineagedemo.dinner")
    price = spark.read.table("lineage_data.lineagedemo.price")
    
    dinner_price = dinner.join(price, on="recipe_id")
    dinner_price.write.mode("overwrite").saveAsTable("lineage_data.lineagedemo.dinner_price")
    
  2. executar a célula clicando na célula e pressionando shift+enter ou clicando menu de execução e selecionando Cell de execução.

  3. Na caixa Search (Pesquisar ) na barra superior do site Databricks workspace, procure a tabela lineage_data.lineagedemo.price e selecione-a.

  4. Acesse Lineage tab e clique em See Lineage gráfico. Clique nos ícones Ícone de Sinal de Mais para explorar a linhagem de dados gerada pelas consultas.

    Gráfico de linhagem expandido
  5. Clique em uma seta que conecta os nós no gráfico de linhagem para abrir o painel de conexão de linhagem. O painel de conexão do Lineage mostra detalhes sobre a conexão, incluindo tabelas de origem e destino, Notebook e fluxo de trabalho.

Capture e visualize a linhagem do fluxo de trabalho

A linhagem também é capturada para qualquer fluxo de trabalho que leia ou grave no Unity Catalog. Para view lineage para um Databricks fluxo de trabalho:

  1. Clique Novo ícone Novo na barra lateral e selecione Notebook no menu.

  2. Digite um nome para o Notebook e selecione SQL no idiomadefault .

  3. Clique em Criar.

  4. Na primeira célula Notebook , insira a seguinte query:

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. Clique em programar na barra superior. Na caixa de diálogo do programar, selecione Manual, selecione um clusters com acesso ao Unity Catalog e clique em Create.

  6. Clique em execução agora.

  7. Na caixa Search (Pesquisar ) na barra superior do site Databricks workspace, procure a tabela lineage_data.lineagedemo.menu e selecione-a.

  8. Em Lineage tab, clique em fluxo de trabalho e selecione Downstream tab. O nome Job aparece em Job Name como um consumidor da tabela menu.

Capture e visualize a linhagem do painel

Para criar um dashboard e view sua linhagem de dados:

  1. Vá para as páginas de aterrissagem da Databricks e abra o Catalog Explorer clicando em Catalog na barra lateral.

  2. Clique no nome do catálogo, clique em lineagedemo e selecione a tabela menu. O senhor também pode usar a caixa Search (Pesquisar ) na barra superior para pesquisar a tabela menu.

  3. Clique em Open in a dashboard (Abrir em um painel).

  4. Selecione as colunas que o senhor deseja adicionar ao painel e clique em Create (Criar).

  5. Publicar o painel.

    Somente os painéis publicados são rastreados na linhagem de dados.

  6. Na caixa Search (Pesquisar ) na barra superior, procure a tabela lineage_data.lineagedemo.menu e selecione-a.

  7. No site da Lineage tab, clique em Dashboards. O painel aparece em Dashboard Name como um consumidor da tabela de menus.

Permissões de linhagem

O Lineage gráfico compartilha o mesmo modelo de permissão que o Unity Catalog. Se um usuário não tiver o privilégio BROWSE ou SELECT em uma tabela, ele não poderá explorar a linhagem. Além disso, os usuários só podem ver o Notebook, o fluxo de trabalho e os dashboards para os quais têm permissão view. Por exemplo, se o senhor executar o seguinte comando para um usuário não administrador userA:

GRANT USE SCHEMA on lineage_data.lineagedemo to `userA@company.com`;
GRANT SELECT on lineage_data.lineagedemo.menu to `userA@company.com`;

Quando userA visualizar o gráfico de linhagem da tabela lineage_data.lineagedemo.menu, ele verá a tabela menu. Eles não poderão ver informações sobre tabelas associadas, como a tabela lineage_data.lineagedemo.dinner downstream. A tabela dinner é exibida como um nó masked na exibição para userA, e userA não pode expandir o gráfico para revelar tabelas downstream de tabelas para as quais não tem permissão de acesso.

Se o senhor executar o comando a seguir para conceder a permissão BROWSE a um usuário não administrador userB:

GRANT BROWSE on lineage_data to `userA@company.com`;

userB pode agora view o gráfico de linhagem para qualquer tabela no esquema lineage_data.

Para obter mais informações sobre como gerenciar o acesso a objetos protegidos em Unity Catalog, consulte gerenciar privilégios em Unity Catalog. Para obter mais informações sobre como gerenciar o acesso a objetos do site workspace, como Notebook, fluxo de trabalho e dashboards, consulte Listas de controle de acesso.

Excluir dados de linhagem

Aviso

As instruções a seguir excluem todos os objetos armazenados no Unity Catalog. Use estas instruções somente se necessário. Por exemplo, para atender aos requisitos compliance .

Para excluir dados de linhagem, você deve excluir o metastore que gerencia os objetos Unity Catalog . Para obter mais informações sobre como excluir o metastore, consulte Excluir um metastore. Os dados serão excluídos em 90 dias.

Consulta de linhagem uso de dados tabelas do sistema

O senhor pode usar as tabelas do sistema de linhagem para consultar dados de linhagem de forma programática. Para obter instruções detalhadas, consulte Monitorar o uso com tabelas de sistema e Referência de tabelas de sistema do Lineage.

Se o seu site workspace estiver em uma região que não ofereça suporte a tabelas do sistema de linhagem, o senhor poderá usar a linhagem de dados REST API para recuperar dados de linhagem de forma programática.

Recuperar a linhagem usando a API REST da linhagem de dados

A API de linhagem de dados permite que o senhor recupere a linhagem de tabelas e colunas. No entanto, se o seu workspace estiver em uma região que ofereça suporte às tabelas do sistema de linhagem, o senhor deverá usar as consultas da tabela do sistema em vez do REST API. As tabelas do sistema são uma opção melhor para a recuperação programática de dados de linhagem. A maioria das regiões suporta as tabelas do sistema de linhagem.

Importante

Para acessar APIs REST do Databricks, você deve autenticar o.

Recuperar linhagem da tabela

Este exemplo recupera dados de linhagem para a tabela dinner .

Solicitar

curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<workspace-instance>/api/2.0/lineage-tracking/table-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "include_entity_lineage": true}'

Substitua <workspace-instance>.

Este exemplo usa um .netrc arquivo.

Resposta

{
  "upstreams": [
    {
      "tableInfo": {
        "name": "menu",
        "catalog_name": "lineage_data",
        "schema_name": "lineagedemo",
        "table_type": "TABLE"
      },
      "notebookInfos": [
        {
          "workspace_id": 4169371664718798,
          "notebook_id": 1111169262439324
        }
      ]
    }
  ],
  "downstreams": [
    {
      "notebookInfos": [
        {
          "workspace_id": 4169371664718798,
          "notebook_id": 1111169262439324
        }
      ]
    },
    {
      "tableInfo": {
        "name": "dinner_price",
        "catalog_name": "lineage_data",
        "schema_name": "lineagedemo",
        "table_type": "TABLE"
      },
      "notebookInfos": [
        {
          "workspace_id": 4169371664718798,
          "notebook_id": 1111169262439324
        }
      ]
    }
  ]
}

Recuperar linhagem de coluna

Este exemplo recupera dados de coluna para a tabela dinner .

Solicitar

curl --netrc -X GET \
-H 'Content-Type: application/json' \
https://<workspace-instance>/api/2.0/lineage-tracking/column-lineage \
-d '{"table_name": "lineage_data.lineagedemo.dinner", "column_name": "dessert"}'

Substitua <workspace-instance>.

Este exemplo usa um .netrc arquivo.

Resposta

{
  "upstream_cols": [
    {
      "name": "dessert",
      "catalog_name": "lineage_data",
      "schema_name": "lineagedemo",
      "table_name": "menu",
      "table_type": "TABLE"
    },
    {
      "name": "main",
      "catalog_name": "lineage_data",
      "schema_name": "lineagedemo",
      "table_name": "menu",
      "table_type": "TABLE"
    },
    {
      "name": "app",
      "catalog_name": "lineage_data",
      "schema_name": "lineagedemo",
      "table_name": "menu",
      "table_type": "TABLE"
    }
  ],
  "downstream_cols": [
    {
      "name": "full_menu",
      "catalog_name": "lineage_data",
      "schema_name": "lineagedemo",
      "table_name": "dinner_price",
      "table_type": "TABLE"
    }
  ]
}

Limitações

  • Como a linhagem é calculada em uma janela móvel de um ano, a linhagem coletada há mais de um ano não é exibida. Por exemplo, se um Job ou uma consulta ler dados da tabela A e gravar na tabela B, o link entre a tabela A e a tabela B será exibido somente por um ano. O senhor pode filtrar os dados de linhagem por período de tempo dentro da janela de um ano.

  • fluxo de trabalho que usam a solicitação da API Jobs runs submit ficam indisponíveis ao visualizar a linhagem. A linhagem de nível de tabela e coluna ainda é capturada ao usar a solicitação runs submit , mas o link para a execução não é capturado.

  • O Unity Catalog captura a linhagem no nível da coluna o máximo possível. No entanto, há alguns casos em que a linhagem no nível da coluna não pode ser capturada.

  • A linhagem de coluna é compatível somente quando a origem e o destino são referenciados pelo nome da tabela (Exemplo: select * from <catalog>.<schema>.<table>). A linhagem da coluna não pode ser capturada se a origem ou o destino for endereçado pelo caminho (Exemplo: select * from delta."s3://<bucket>/<path>").

  • Se uma tabela ou view for renomeado, a linhagem não será capturada para a tabela ou view renomeado.

  • Se um esquema ou catálogo for renomeado, a linhagem não será capturada para tabelas e visualizações no catálogo ou esquema renomeado.

  • Se você usar o ponto de verificação dataset Spark SQL, a linhagem não será capturada. Consulte PySpark.sql.DataFrame.checkpoint na documentação do Apache Spark.

  • O Unity Catalog captura a linhagem do pipeline Delta Live Tables na maioria dos casos. No entanto, em alguns casos, a cobertura completa da linhagem não pode ser garantida, como quando pipeline usa a API APPLY CHANGES ou as tabelas TEMPORARY.

  • A linhagem não captura as funções de pilha.