Capture e visualize a linhagem de dados usando o Unity Catalog

Você pode usar o Unity Catalog para capturar a linhagem de dados de tempo de execução em query executadas no Databricks. O Lineage é compatível com todos os idiomas e é capturado até o nível da coluna. Os dados de linhagem incluem Notebook, fluxo de trabalho e dashboards relacionados à query. A linhagem pode ser visualizada no Catalog Explorer quase em tempo real e recuperada com a API REST do Databricks.

Observação

O senhor também pode acessar view e consultar o uso de dados da linhagem nas tabelas do sistema de linhagem (Public Preview). Para obter mais informações, consulte Referência das tabelas do sistema Lineage.

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.

Este artigo descreve como visualizar a linhagem usando o Catalog Explorer e o site REST API. 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.

  • Talvez seja necessário atualizar as regras de firewall de saída para permitir a conectividade com o endpoint do Amazon Kinesis no plano de controle do Databricks. Normalmente, isso se aplica se o seu workspace do Databricks for implantado em sua própria VPC ou se você usar o AWS PrivateLink em seu ambiente de rede do Databricks. Para obter o endpoint do Kinesis para sua região workspace , consulte Endereços do Kinesis. Consulte também Configurar uma VPC gerenciada pelo cliente e Habilitar AWS PrivateLink.

Limitações

  • a transmissão entre tabelas Delta tem suporte apenas no Databricks Runtime 11.3 LTS ouacima.

  • Como a linhagem é calculada em uma janela contínua 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 por apenas um ano.

    O senhor pode filtrar os dados de linhagem por período de tempo. Quando a opção "All lineage" (Toda linhagem) é selecionada, são exibidos os dados de linhagem coletados a partir de junho de 2023.

  • 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 só é suportada 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 forem endereçados pelo caminho (Exemplo: select * from delta."s3://<bucket>/<path>").

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

  • 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.

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 linhagem uso de dados os seguintes passos:

  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 query, use os seguintes passos:

  1. Na caixa Pesquisar na barra superior do workspace do Databricks, insira lineage_data.lineagedemo.dinner e clique em Pesquisar lineage_data.lineagedemo.dinner no Databricks.

  2. Em Tabelas, clique na tabela dinner .

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

  4. Para view um gráfico interativo da linhagem de dados, clique em Ver gráfico de linhagem. Por default, um nível é exibido no gráfico. Você pode clicar no Ícone de Sinal de Mais ícone em um nó para revelar mais conexões, se estiverem disponíveis.

  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.

    gráfico de linhagem
  6. Para mostrar o Notebook associado à tabela dinner, selecione o Notebook no painel de conexão Lineage ou feche o gráfico de linhagem e clique em Notebook. Para abrir o Notebook em uma nova tab, clique no nome do Notebook .

  7. 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 demonstrar a criação e visualização da linhagem com uma linguagem diferente, por exemplo, Python, use os seguintes passos:

  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 Pesquisar na barra superior do workspace do Databricks, digite lineage_data.lineagedemo.price e clique em Pesquisar lineage_data.lineagedemo.price no Databricks.

  4. Em Tabelas, clique na tabela price .

  5. Selecione a tab Linhagem e clique em Ver gráfico de linhagem. Clique no Ícone de Sinal de Mais ícones para explorar a linhagem de dados gerada pela query SQL e Python.

    Gráfico de linhagem expandido
  6. 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 lê ou grava no Unity Catalog. Para demonstrar a exibição da linhagem para um fluxo de trabalho do Databricks, use as seguintes passos:

  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 Pesquisar na barra superior do workspace do Databricks, insira lineage_data.lineagedemo.menu e clique em Pesquisar lineage_data.lineagedemo.menu no Databricks.

  8. Em Tabelas view todas as tabelas, clique na tabela menu.

  9. Selecione a tab Linhagem , clique em fluxo de trabalho e selecione a tab Downstream . O nome Job aparece em NomeJob como um consumidor da tabela menu.

Capture e visualize a linhagem do painel

Para demonstrar a linhagem de exibição para um painel SQL, use as seguintes passos:

  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 . Você também pode usar a caixa de texto Pesquisar tabelas na barra superior para pesquisar a tabela menu .

  3. Clique em Ações > Criar um painel rápido.

  4. Selecione colunas para adicionar ao painel e clique em Criar.

  5. Na caixa Pesquisar na barra superior do workspace do Databricks, insira lineage_data.lineagedemo.menu e clique em Pesquisar lineage_data.lineagedemo.menu no Databricks.

  6. Em Tabelas view todas as tabelas, clique na tabela menu.

  7. Selecione a tab Linhagem e clique em Painéis. O nome do 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.

API de linhagem de dados

A API de linhagem de dados permite que você recupere a linhagem de tabelas e colunas.

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"
    }
  ]
}