Samla in och visa data härstamning med hjälp av Unity Catalog

Den här artikeln beskriver hur du samlar in och visualiserar data härkomst med hjälp av Catalog Explorer, systemtabellerna för data härkomst och REST-API:et.

Du kan använda Unity Catalog för att samla in körningsdata härstamning mellan frågor som körs på Azure Databricks. Ursprung stöds för alla språk och samlas in ned till kolumnnivå. Härkomstdata omfattar notebook-filer, jobb och instrumentpaneler som är relaterade till frågan. Ursprung kan visualiseras i Catalog Explorer i nära realtid och hämtas programmatiskt med hjälp av ursprungssystemtabellerna och Databricks REST API.

Ursprunget aggregeras över alla arbetsytor som är kopplade till ett Unity Catalog-metaarkiv. Det innebär att ursprung som samlas in på en arbetsyta visas i alla andra arbetsytedelningar som metaarkivet. Användarna måste ha rätt behörighet för att kunna visa ursprungsdata. Ursprungsdata behålls i 1 år.

Följande bild är ett exempel på ett härstamningsdiagram. Specifika funktioner och exempel på data härkomst behandlas senare i den här artikeln.

Översikt över ursprung

Information om hur du spårar ursprunget för en maskininlärningsmodell finns i Spåra data härstamningen för en modell i Unity Catalog.

Krav

Följande krävs för att samla in dataursprung med hjälp av Unity Catalog:

  • Unity Catalog måste vara aktiverat på arbetsytan.

  • Tabeller måste registreras i ett Unity Catalog-metaarkiv.

  • Frågor måste använda Spark DataFrame (till exempel Spark SQL-funktioner som returnerar en DataFrame) eller Databricks SQL-gränssnitt. Exempel på Databricks SQL- och PySpark-frågor finns i Exempel.

  • Om du vill visa ursprunget för en tabell eller vy måste användarna ha minst behörigheten BROWSE för den överordnade katalogen i tabellen eller vyn. Den överordnade katalogen måste också vara tillgänglig från arbetsytan. Se Begränsa katalogåtkomst till specifika arbetsytor.

  • Om du vill visa ursprungsinformation för notebook-filer, jobb eller instrumentpaneler måste användarna ha behörighet för dessa objekt enligt definitionen i inställningarna för åtkomstkontroll på arbetsytan. Se Ursprungsbehörigheter.

  • Om du vill visa ursprung för en Unity Catalog-aktiverad pipeline måste du ha CAN_VIEW behörighet för pipelinen.

  • Ursprungsspårning av strömning mellan Delta-tabeller kräver Databricks Runtime 11.3 LTS eller senare.

  • Kolumnspårning för Delta Live Tables-arbetsbelastningar kräver Databricks Runtime 13.3 LTS eller senare.

  • Du kan behöva uppdatera dina regler för utgående brandvägg för att tillåta anslutning till Event Hubs-slutpunkten i Azure Databricks-kontrollplanet. Detta gäller vanligtvis om din Azure Databricks-arbetsyta distribueras i ditt eget virtuella nätverk (även kallat VNet-inmatning). Information om hur du hämtar Event Hubs-slutpunkten för din arbetsyteregion finns i IP-adresser för metaarkiv, bloblagring för artefakter, systemtabeller, loggbloblagring och Event Hubs-slutpunkt. Information om hur du konfigurerar användardefinierade vägar (UDR) för Azure Databricks finns i Användardefinierade routningsinställningar för Azure Databricks.

Exempel

Kommentar

  • I följande exempel används katalognamnet lineage_data och schemanamnet lineagedemo. Om du vill använda en annan katalog och ett annat schema ändrar du namnen som används i exemplen.

  • För att kunna slutföra det här exemplet måste du ha CREATE och USE SCHEMA behörigheter för ett schema. En metaarkivadministratör, katalogägare eller schemaägare kan bevilja dessa privilegier. Om du till exempel vill ge alla användare i gruppen "data_engineers" behörighet att skapa tabeller i lineagedemo schemat i lineage_data katalogen kan en användare med någon av ovanstående behörigheter eller roller köra följande frågor:

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

Fånga och utforska ursprung

Så här samlar du in ursprungsdata:

  1. Gå till din Azure Databricks-landningssida, klicka på Ny ikon Nytt i sidofältet och välj Notebook på menyn.

  2. Ange ett namn på notebook-filen och välj SQL i Standardspråk.

  3. I Kluster väljer du ett kluster med åtkomst till Unity Catalog.

  4. Klicka på Skapa.

  5. I den första notebook-cellen anger du följande frågor:

    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. Om du vill köra frågorna klickar du i cellen och trycker på skift+retur eller klickar Kör-menyn och väljer Kör cell.

Så här använder du Katalogutforskaren för att visa ursprunget som genereras av dessa frågor:

  1. I rutan Sök i det övre fältet på Azure Databricks-arbetsytan söker du efter tabellen och väljer den lineage_data.lineagedemo.dinner .

  2. Välj fliken Ursprung . Ursprungspanelen visas och visar relaterade tabeller (i det här exemplet är menu det tabellen).

  3. Om du vill visa ett interaktivt diagram över data härstamningen klickar du på Visa ursprungsdiagram. Som standard visas en nivå i diagrammet. Plusteckenikon Klicka på ikonen på en nod för att visa fler anslutningar om de är tillgängliga.

  4. Klicka på en pil som ansluter noder i ursprungsdiagrammet för att öppna anslutningspanelen För ursprung. Anslutningspanelen Ursprung visar information om anslutningen, inklusive käll- och måltabeller, notebook-filer och jobb.

    Ursprungsdiagram

  5. Om du vill visa anteckningsboken dinner som är associerad med tabellen väljer du anteckningsboken i anslutningspanelen För ursprung eller stänger du ursprungsdiagrammet och klickar på Notebook-filer. Om du vill öppna anteckningsboken på en ny flik klickar du på anteckningsbokens namn.

  6. Om du vill visa ursprunget på kolumnnivå klickar du på en kolumn i diagrammet för att visa länkar till relaterade kolumner. Om du till exempel klickar på kolumnen "full_menu" visas de överordnade kolumner som kolumnen härleddes från:

    Kolumnradage i hel meny

Om du vill visa ursprung med ett annat språk, till exempel Python:

  1. Öppna anteckningsboken som du skapade tidigare, skapa en ny cell och ange följande Python-kod:

    %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. Kör cellen genom att klicka i cellen och trycka på Skift+Retur eller klicka Kör-menyn och välja Kör cell.

  3. I rutan Sök i det övre fältet på Azure Databricks-arbetsytan söker du efter tabellen och väljer den lineage_data.lineagedemo.price .

  4. Gå till fliken Ursprung och klicka på Visa ursprungsdiagram. Klicka på ikonerna Plusteckenikon för att utforska data härstamningen som genereras av frågorna.

    Expanderat härkomstdiagram

  5. Klicka på en pil som ansluter noder i ursprungsdiagrammet för att öppna anslutningspanelen För ursprung. Anslutningspanelen Ursprung visar information om anslutningen, inklusive käll- och måltabeller, notebook-filer och jobb.

Avbilda och visa arbetsflödets ursprung

Ursprung samlas också in för alla arbetsflöden som läser eller skriver till Unity Catalog. Så här visar du ursprung för ett Azure Databricks-arbetsflöde:

  1. Klicka på Ny ikon Nytt i sidopanelen och välj Anteckningsbok på menyn.

  2. Ange ett namn på notebook-filen och välj SQL i Standardspråk.

  3. Klicka på Skapa.

  4. I den första notebook-cellen anger du följande fråga:

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. Klicka på Schemalägg i det övre fältet. I schemadialogrutan väljer du Manuell, väljer ett kluster med åtkomst till Unity Catalog och klickar på Skapa.

  6. Klicka på Kör nu.

  7. I rutan Sök i det övre fältet på Azure Databricks-arbetsytan söker du efter tabellen och väljer den lineage_data.lineagedemo.menu .

  8. På fliken Ursprung klickar du på Arbetsflöden och väljer fliken Underordnad. Jobbnamnet visas under Jobbnamn som konsument av menu tabellen.

Avbilda och visa instrumentpanelens ursprung

Så här skapar du en instrumentpanel och visar dess data härkomst:

  1. Gå till azure Databricks-landningssidan och öppna Katalogutforskaren genom att klicka på Katalog i sidofältet.

  2. Klicka på katalognamnet, klicka på lineagedemo och välj menu tabellen. Du kan också använda sökrutan i det övre fältet för att söka menu efter tabellen.

  3. Klicka på Öppna på en instrumentpanel.

  4. Välj de kolumner som du vill lägga till på instrumentpanelen och klicka på Skapa.

  5. Publicera instrumentpanelen.

    Endast publicerade instrumentpaneler spåras i data härkomst.

  6. I rutan Sök i det övre fältet söker du efter tabellen och väljer den lineage_data.lineagedemo.menu .

  7. På fliken Ursprung klickar du på Instrumentpaneler. Instrumentpanelen visas under Instrumentpanelens namn som konsument av menytabellen.

Ursprungsbehörigheter

Ursprungsdiagram delar samma behörighetsmodell som Unity Catalog. Om en användare inte har behörigheten BROWSE eller SELECT på en tabell kan de inte utforska ursprunget. Dessutom kan användarna bara se notebook-filer, jobb och instrumentpaneler som de har behörighet att visa. Om du till exempel kör följande kommandon för en icke-administratörsanvändare userA:

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

När userA du visar ursprungsdiagrammet för lineage_data.lineagedemo.menu tabellen visas tabellen menu . De kommer inte att kunna se information om associerade tabeller, till exempel den underordnade lineage_data.lineagedemo.dinner tabellen. Tabellen dinner visas som en masked nod i visningen till userAoch userA kan inte expandera diagrammet för att visa underordnade tabeller från tabeller som de inte har behörighet att komma åt.

Om du kör följande kommando för att bevilja behörigheten BROWSE till en icke-administratörsanvändare userB:

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

userB kan nu visa ursprungsdiagrammet för valfri tabell i lineage_data schemat.

Mer information om hur du hanterar åtkomst till skyddsbara objekt i Unity Catalog finns i Hantera privilegier i Unity Catalog. Mer information om hur du hanterar åtkomst till arbetsyteobjekt som notebook-filer, jobb och instrumentpaneler finns i Åtkomstkontrollistor.

Ta bort ursprungsdata

Varning

Följande instruktioner tar bort alla objekt som lagras i Unity Catalog. Använd endast dessa instruktioner om det behövs. Till exempel för att uppfylla efterlevnadskraven.

Om du vill ta bort ursprungsdata måste du ta bort metaarkivet som hanterar Unity Catalog-objekten. Mer information om hur du tar bort metaarkivet finns i Ta bort ett metaarkiv. Data tas bort inom 90 dagar.

Fråga efter ursprungsdata med hjälp av systemtabeller

Du kan använda ursprungssystemtabellerna för att programmatiskt fråga efter ursprungsdata. Detaljerade anvisningar finns i Övervaka användning med systemtabeller och referens för ursprungssystemtabeller.

Om din arbetsyta finns i en region som inte har stöd för ursprungssystemtabeller kan du också använda REST-API:et data härkomst för att hämta ursprungsdata programmatiskt.

Hämta ursprung med hjälp av REST-API:et för data härkomst

Med API:et för data härkomst kan du hämta tabell- och kolumn härkomst. Men om din arbetsyta finns i en region som stöder ursprungssystemtabellerna bör du använda systemtabellfrågor i stället för REST-API:et. Systemtabeller är ett bättre alternativ för programmatisk hämtning av ursprungsdata. De flesta regioner stöder ursprungssystemtabellerna.

Viktigt!

För att få åtkomst till Databricks REST API:er måste du autentisera.

Hämta tabell härkomst

Det här exemplet hämtar ursprungsdata för dinner tabellen.

Förfrågan

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}'

Ersätt <workspace-instance>.

I det här exemplet används en .netrc-fil .

Response

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

Hämta kolumn härkomst

Det här exemplet hämtar kolumndata för dinner tabellen.

Förfrågan

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

Ersätt <workspace-instance>.

I det här exemplet används en .netrc-fil .

Response

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

Begränsningar

  • Eftersom ursprung beräknas i ett rullande ettårsfönster visas inte ursprung som samlats in för mer än ett år sedan. Om till exempel ett jobb eller en fråga läser data från tabell A och skriver till tabell B, visas länken mellan tabell A och tabell B endast i ett år. Du kan filtrera ursprungsdata efter tidsram inom ettårsfönstret.
  • Jobb som använder jobb-API-begäran runs submit är inte tillgängliga när du visar ursprung. Ursprung på tabell- och kolumnnivå registreras fortfarande när du använder runs submit begäran, men länken till körningen registreras inte.
  • Unity Catalog samlar in ursprung till kolumnnivån i så stor utsträckning som möjligt. Det finns dock vissa fall då det inte går att samla in ursprung på kolumnnivå.
  • Kolumn härkomst stöds endast när både källan och målet refereras till av tabellnamnet (exempel: select * from <catalog>.<schema>.<table>). Det går inte att avbilda kolumnraden om källan eller målet hanteras av sökvägen (exempel: select * from delta."s3://<bucket>/<path>").
  • Om en tabell eller vy har bytt namn registreras inte ursprung för den omdöpta tabellen eller vyn.
  • Om ett schema eller en katalog har bytt namn registreras inte ursprung för tabeller och vyer under den omdöpta katalogen eller schemat.
  • Om du använder Kontrollpunkter för Spark SQL-datauppsättning samlas inte ursprunget in.
  • Unity Catalog samlar in ursprung från Delta Live Tables-pipelines i de flesta fall. I vissa fall kan dock fullständig härkomsttäckning inte garanteras, till exempel när pipelines använder API:et APPLY CHANGES eller TEMPORÄRA tabeller.
  • Ursprunget avbildar inte Stack-funktioner.
  • Globala temporära vyer samlas inte in i ursprunget.
  • Tabeller under system.information_schema samlas inte in i ursprunget.