Sdílet prostřednictvím


Zachycení a zobrazení rodokmenu dat pomocí katalogu Unity

Tento článek popisuje, jak zachytit a vizualizovat rodokmen dat pomocí Průzkumníka katalogu, systémových tabulek rodokmenu dat a rozhraní REST API.

Katalog Unity můžete použít k zachycení rodokmenu dat modulu runtime napříč dotazy spuštěným v Azure Databricks. Rodokmen je podporovaný pro všechny jazyky a je zachycený na úrovni sloupce. Data rodokmenu zahrnují poznámkové bloky, úlohy a řídicí panely související s dotazem. Rodokmen je možné vizualizovat v Průzkumníku katalogu téměř v reálném čase a načíst programově pomocí systémových tabulek rodokmenu a rozhraní REST API Databricks.

Rodokmen se agreguje napříč všemi pracovními prostory připojenými k metastoru katalogu Unity. To znamená, že rodokmen zachycený v jednom pracovním prostoru je viditelný v jakémkoli jiném sdílení tohoto metastoru. Uživatelé musí mít správná oprávnění k zobrazení dat rodokmenu. Data rodokmenu se uchovávají po dobu 1 roku.

Následující obrázek je ukázkový graf rodokmenu. Konkrétní funkce rodokmenu dat a příklady jsou vyřešeny dále v tomto článku.

Přehled rodokmenu

Informace o sledování rodokmenu modelu strojového učení najdete v tématu Sledování rodokmenu dat modelu v katalogu Unity.

Požadavky

K zachycení rodokmenu dat pomocí katalogu Unity se vyžadují následující položky:

  • Pracovní prostor musí mít povolený katalog Unity.

  • Tabulky musí být zaregistrované v metastoru katalogu Unity.

  • Dotazy musí používat rozhraní Spark DataFrame (například funkce Spark SQL, které vracejí DataFrame) nebo Databricks SQL. Příklady dotazů Databricks SQL a PySpark najdete v tématu Příklady.

  • Pokud chcete zobrazit rodokmen tabulky nebo zobrazení, musí mít uživatelé alespoň BROWSE oprávnění nadřazeného katalogu tabulky nebo zobrazení. Nadřazený katalog musí být také přístupný z pracovního prostoru. Viz Omezení přístupu katalogu ke konkrétním pracovním prostorům.

  • Aby uživatelé mohli zobrazit informace o rodokmenu pro poznámkové bloky, úlohy nebo řídicí panely, musí mít k těmto objektům oprávnění definovaná nastavením řízení přístupu v pracovním prostoru. Viz oprávnění rodokmenu.

  • Pokud chcete zobrazit rodokmen kanálu s podporou katalogu Unity, musíte mít CAN_VIEW oprávnění k kanálu.

  • Sledování rodokmenu streamování mezi tabulkami Delta vyžaduje Databricks Runtime 11.3 LTS nebo vyšší.

  • Sledování rodokmenu sloupců pro úlohy Delta Live Tables vyžaduje Databricks Runtime 13.3 LTS nebo vyšší.

  • Možná budete muset aktualizovat pravidla odchozí brány firewall tak, aby umožňovala připojení ke koncovému bodu služby Event Hubs v řídicí rovině Azure Databricks. Obvykle se to týká, pokud je váš pracovní prostor Azure Databricks nasazený ve vlastní virtuální síti (označovaný také jako injektáž virtuální sítě). Pokud chcete získat koncový bod služby Event Hubs pro vaši oblast pracovního prostoru, přečtěte si téma Metastore, úložiště objektů blob artefaktů, úložiště systémových tabulek, úložiště objektů blob protokolu a IP adresy koncových bodů služby Event Hubs. Informace o nastavení tras definovaných uživatelem pro Azure Databricks najdete v tématu Nastavení trasy definované uživatelem pro Azure Databricks.

Příklady

Poznámka:

  • Následující příklady používají název lineage_data katalogu a název lineagedemoschématu . Pokud chcete použít jiný katalog a schéma, změňte názvy použité v příkladech.

  • K dokončení tohoto příkladu musíte mít CREATE oprávnění ke USE SCHEMA schématu. Tato oprávnění může udělit správce metastoru, vlastník katalogu, vlastník schématu nebo uživatel s oprávněním MANAGE schématu. Pokud chcete například udělit všem uživatelům ve skupině oprávnění "data_engineers" k vytváření tabulek ve lineagedemo schématu lineage_data v katalogu, může uživatel s jedním z výše uvedených oprávnění nebo rolí spouštět následující dotazy:

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

Zachycení a prozkoumání rodokmenu

Zachycení dat rodokmenu:

  1. Přejděte na cílovou stránku Azure Databricks, na bočním panelu klikněte na Nová ikonaNový a v nabídce vyberte Poznámkový blok.

  2. Zadejte název poznámkového bloku a vyberte SQL ve výchozím jazyce.

  3. V clusteru vyberte cluster s přístupem k katalogu Unity.

  4. Klikněte na Vytvořit.

  5. Do první buňky poznámkového bloku zadejte následující dotazy:

    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. Pokud chcete dotazy spustit, klikněte do buňky a stiskněte shift+enter nebo klikněte Nabídka Spustit a vyberte Spustit buňku.

Použití Průzkumníka katalogu k zobrazení rodokmenu vygenerovaného těmito dotazy:

  1. Do vyhledávacího pole v horním panelu pracovního prostoru Azure Databricks vyhledejte lineage_data.lineagedemo.dinner tabulku a vyberte ji.

  2. Vyberte kartu Rodokmen. Zobrazí se panel rodokmenu a zobrazí související tabulky (v tomto příkladu je to menu tabulka).

  3. Pokud chcete zobrazit interaktivní graf rodokmenu dat, klikněte na Zobrazit graf rodokmenu. Ve výchozím nastavení se v grafu zobrazuje jedna úroveň. Kliknutím na Ikona znaménka plus ikonu uzlu zobrazíte další připojení, pokud jsou k dispozici.

  4. Kliknutím na šipku, která propojuje uzly v grafu rodokmenu, otevřete panel připojení rodokmenu. Panel připojení rodokmenu zobrazuje podrobnosti o připojení, včetně zdrojových a cílových tabulek, poznámkových bloků a úloh.

    Graf rodokmenu

  5. Pokud chcete zobrazit poznámkový blok přidružený k dinner tabulce, vyberte poznámkový blok na panelu připojení rodokmenu nebo zavřete graf rodokmenu a klikněte na Poznámkové bloky. Pokud chcete poznámkový blok otevřít na nové kartě, klikněte na název poznámkového bloku.

  6. Pokud chcete zobrazit rodokmen na úrovni sloupce, klikněte na sloupec v grafu a zobrazte odkazy na související sloupce. Kliknutím na sloupec full_menu například zobrazíte nadřazené sloupce, ze kterých byl sloupec odvozen:

    Rodokmen sloupců v celé nabídce

Pokud chcete zobrazit rodokmen pomocí jiného jazyka, například Python:

  1. Otevřete poznámkový blok, který jste vytvořili dříve, vytvořte novou buňku a zadejte následující kód Pythonu:

    %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. Buňku spusťte tak, že kliknete na buňku a stisknete shift+enter nebo klikneteNabídka Spustita vyberete Spustit buňku.

  3. Do vyhledávacího pole v horním panelu pracovního prostoru Azure Databricks vyhledejte lineage_data.lineagedemo.price tabulku a vyberte ji.

  4. Přejděte na kartu Rodokmen a klikněte na Zobrazit graf rodokmenu. Kliknutím na Ikona znaménka plus ikony můžete prozkoumat rodokmen dat vygenerovaný dotazy.

    Rozbalený graf rodokmenu

  5. Kliknutím na šipku, která propojuje uzly v grafu rodokmenu, otevřete panel připojení rodokmenu. Panel připojení rodokmenu zobrazuje podrobnosti o připojení, včetně zdrojových a cílových tabulek, poznámkových bloků a úloh.

Zachycení a zobrazení rodokmenu pracovního postupu

Rodokmen se zaznamenává také pro všechny pracovní postupy, které čtou nebo zapisují do katalogu Unity. Zobrazení rodokmenu pro pracovní postup Azure Databricks:

  1. Na bočním panelu klikněte na Nová ikonaNový a v nabídce vyberte Poznámkový blok.

  2. Zadejte název poznámkového bloku a vyberte SQL ve výchozím jazyce.

  3. Klikněte na Vytvořit.

  4. Do první buňky poznámkového bloku zadejte následující dotaz:

    SELECT * FROM lineage_data.lineagedemo.menu
    
  5. V horním panelu klikněte na Plán . V dialogovém okně Plán vyberte Ručně, vyberte cluster s přístupem ke katalogu Unity a klikněte na Vytvořit.

  6. Klikněte na možnost Spustit.

  7. Do vyhledávacího pole v horním panelu pracovního prostoru Azure Databricks vyhledejte lineage_data.lineagedemo.menu tabulku a vyberte ji.

  8. Na kartě Rodokmen klikněte na Pracovní postupy a vyberte kartu Podřízené položky. Název úlohy se zobrazí v části Název úlohy jako příjemce menu tabulky.

Zachycení a zobrazení rodokmenu řídicího panelu

Vytvoření řídicího panelu a zobrazení rodokmenu dat:

  1. Přejděte na cílovou stránku Azure Databricks a otevřete Průzkumníka katalogu kliknutím na Katalog na bočním panelu.

  2. Klikněte na název katalogu, klikněte na rodokmen a vyberte menu tabulku. K vyhledání tabulky můžete také použít vyhledávací pole v horním panelumenu.

  3. Klikněte na Otevřít na řídicím panelu.

  4. Vyberte sloupce, které chcete přidat na řídicí panel, a klikněte na Vytvořit.

  5. Publikujte řídicí panel.

    V rodokmenu dat se sledují jenom publikované řídicí panely.

  6. Do vyhledávacího pole v horním panelu vyhledejte lineage_data.lineagedemo.menu tabulku a vyberte ji.

  7. Na kartě Rodokmen klikněte na Řídicí panely. Řídicí panel se zobrazí v části Název řídicího panelu jako příjemce tabulky nabídek.

Oprávnění rodokmenu

Grafy rodokmenu sdílejí stejný model oprávnění jako katalog Unity. Pokud uživatel nemá BROWSE oprávnění k SELECT tabulce, nemůže prozkoumat rodokmen. Uživatelé navíc můžou zobrazit jenom poznámkové bloky, úlohy a řídicí panely, které mají oprávnění k zobrazení. Pokud například spustíte následující příkazy pro uživatele bez oprávnění userAsprávce:

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

Když userA zobrazíte graf rodokmenu lineage_data.lineagedemo.menu tabulky, zobrazí se menu jim tabulka. Nebudou moct zobrazit informace o přidružených tabulkách, jako je například podřízená lineage_data.lineagedemo.dinner tabulka. Tabulka dinner je zobrazena jako masked uzel v zobrazení userAa userA nemůže rozbalit graf tak, aby zobrazoval podřízené tabulky z tabulek, ke kterým nemají oprávnění pro přístup.

Pokud spustíte následující příkaz, který udělí BROWSE oprávnění uživateli userB, který není správcem:

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

userB teď může zobrazit graf rodokmenu pro libovolnou tabulku ve schématu lineage_data .

Další informace o správě přístupu k zabezpečitelným objektům v katalogu Unity najdete v tématu Správa oprávnění v katalogu Unity. Další informace o správě přístupu k objektům pracovního prostoru, jako jsou poznámkové bloky, úlohy a řídicí panely, najdete v tématu Seznamy řízení přístupu.

Odstranění dat rodokmenu

Upozorňující

Následující pokyny odstraní všechny objekty uložené v katalogu Unity. Tyto pokyny použijte pouze v případě potřeby. Například pro splnění požadavků na dodržování předpisů.

Pokud chcete odstranit data rodokmenu, musíte odstranit metastor, který spravuje objekty katalogu Unity. Další informace o odstranění metastoru naleznete v tématu Odstranění metastoru. Data se odstraní do 90 dnů.

Dotazování na data rodokmenu pomocí systémových tabulek

Systémové tabulky rodokmenu můžete použít k programovému dotazování dat rodokmenu. Podrobné pokyny najdete v tématu Monitorování aktivity účtu pomocí systémových tabulek a odkazů na systémové tabulky rodokmenu.

Pokud je váš pracovní prostor v oblasti, která nepodporuje systémové tabulky rodokmenu, můžete k programovému načtení dat rodokmenu použít rozhraní REST API rodokmenu dat.

Načtení rodokmenu pomocí rozhraní REST API rodokmenu dat

Rozhraní API rodokmenu dat umožňuje načíst rodokmen tabulky a sloupce. Pokud je ale váš pracovní prostor v oblasti, která podporuje systémové tabulky rodokmenu, měli byste místo rozhraní REST API použít systémové dotazy na tabulky. Systémové tabulky jsou lepší volbou pro programové načítání dat rodokmenu. Většina oblastí podporuje systémové tabulky rodokmenu.

Důležité

Pokud chcete získat přístup k rozhraním REST API služby Databricks, musíte použít ověřování.

Načtení rodokmenu tabulky

Tento příklad načte data rodokmenu dinner pro tabulku.

Žádost

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

Nahradit <workspace-instance>.

Tento příklad používá soubor .netrc .

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

Načtení rodokmenu sloupců

Tento příklad načte data sloupců pro dinner tabulku.

Žádost

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

Nahradit <workspace-instance>.

Tento příklad používá soubor .netrc .

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

Omezení

  • Vzhledem k tomu, že rodokmen se počítá v ročním posuvném okně, nezobrazuje se rodokmen shromážděný před více než jedním rokem. Pokud například úloha nebo dotaz čte data z tabulky A a zapisuje do tabulky B, zobrazí se propojení mezi tabulkou A a tabulkou B pouze po dobu jednoho roku. Data rodokmenu můžete filtrovat podle časového rámce v intervalu jednoho roku.

  • Úlohy, které používají požadavek rozhraní API runs submit pro úlohy, nejsou při prohlížení rodokmenu k dispozici. Rodokmen na úrovni tabulky a sloupce se při použití runs submit požadavku zachytí, ale odkaz na spuštění se nezachytí.

  • Katalog Unity v maximální možné míře zachycuje rodokmen dat na úrovni sloupce. V některých případech však rodokmen dat na úrovni sloupce není možné zachytit.

  • Rodokmen sloupců se podporuje pouze v případě, že zdroj i cíl odkazuje na název tabulky (příklad: select * from <catalog>.<schema>.<table>). Rodokmen sloupců nelze zachytit, pokud zdroj nebo cíl řeší cesta (příklad: select * from delta."s3://<bucket>/<path>").

  • Pokud je přejmenována tabulka nebo zobrazení, rodokmen není zachycen pro přejmenovanou tabulku nebo zobrazení.

  • Pokud je schéma nebo katalog přejmenován, rodokmen není zachycen pro tabulky a zobrazení pod přejmenovaným katalogem nebo schématem.

  • Pokud používáte vytváření kontrolních bodů datové sady Spark SQL, rodokmen se nezachytí.

  • Katalog Unity ve většině případů zaznamenává rodokmen z kanálů tabulek Delta Live. V některých případech však nelze zaručit úplné pokrytí rodokmenu, například když kanály používají rozhraní APPLY CHANGES API nebo DOČASNÉ tabulky.

  • Rodokmen nezachytává funkce stacku.

  • Globální dočasná zobrazení nejsou zachycena v rodokmenu.

  • system.information_schema Tabulky nejsou zachyceny v rodokmenu.

  • Kompletní rodokmen na úrovni sloupce se ve výchozím nastavení pro MERGE operace nezachytává.

    Zachytávání rodokmenu pro MERGE operace můžete zapnout nastavením vlastnosti spark.databricks.dataLineage.mergeIntoV2Enabled Spark na truehodnotu . Povolení tohoto příznaku může zpomalit výkon dotazů, zejména v úlohách, které zahrnují velmi široké tabulky.