Zachycení a zobrazení rodokmenu dat pomocí katalogu Unity

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, pracovní postupy 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 ho pomocí rozhraní DATABricks REST API.

Poznámka:

Data rodokmenu můžete také zobrazit a dotazovat pomocí systémových tabulek rodokmenu (Public Preview). Další informace naleznete v tématu Referenční informace k systémovým tabulkám rodokmenu.

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.

Tento článek popisuje, jak vizualizovat rodokmen pomocí Průzkumníka katalogu a rozhraní REST API. 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 datový rámec Sparku (například funkce Spark SQL, které vracejí datový rámec) nebo rozhraní SQL Databricks. 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í k nadřazenému katalogu tabulky nebo zobrazení.

  • Aby uživatelé mohli zobrazit informace o rodokmenu pro poznámkové bloky, pracovní postupy 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.

  • Možná budete muset aktualizovat pravidla odchozí brány firewall tak, aby umožňovala připojení ke koncovému bodu centra událostí 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 centra událostí 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ů centra událostí. Informace o nastavení tras definovaných uživatelem pro Azure Databricks najdete v tématu Nastavení trasy definované uživatelem pro Azure Databricks.

Omezení

  • Streamování mezi tabulkami Delta se podporuje jenom v Databricks Runtime 11.3 LTS nebo novějším.

  • Vzhledem k tomu, že rodokmen se počítá v 1letém posuvném okně, nezobrazuje se rodokmen shromážděný před více než 1 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 1 roku.

    Data rodokmenu můžete filtrovat podle časového rámce. Když je vybrána možnost Všechna rodokmeny, zobrazí se data rodokmenu shromážděná od června 2023.

  • Pracovní postupy, které používají požadavek rozhraní API runs submit úloh, 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 odkazují 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 se tabulka přejmenuje, rodokmen dat pro přejmenovanou tabulku se nezachytí.

  • Pokud používáte vytváření kontrolních bodů datové sady Spark SQL, rodokmen se nezachytí. Viz pyspark.sql.DataFrame.checkpoint v dokumentaci k Apache Sparku.

  • Katalog Unity ve většině případů zaznamenává rodokmen z kanálů Delta Live Tables. 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.

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 nebo vlastník 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

K zachycení dat rodokmenu použijte následující kroky:

  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.

Pokud chcete k zobrazení rodokmenu vygenerovaného těmito dotazy použít Průzkumníka katalogu, postupujte takto:

  1. Do vyhledávacíhopole v horním panelu pracovního prostoru Azure Databricks zadejte lineage_data.lineagedemo.dinner a klikněte na Hledat lineage_data.lineagedemo.dinner v Databricks.

  2. V části Tabulky klikněte na dinner tabulku.

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

  4. 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 na uzlu zobrazíte další připojení, pokud jsou dostupná.

  5. Kliknutím na šipku spojující 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 pracovních postupů.

    Graf rodokmenu

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

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

K předvedení vytváření a zobrazování rodokmenu v jiném jazyce, například v Pythonu, použijte následující kroky:

  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íhopole v horním panelu pracovního prostoru Azure Databricks zadejte lineage_data.lineagedemo.price a klikněte na Hledat lineage_data.lineagedemo.price v Databricks.

  4. V části Tabulky klikněte na price tabulku.

  5. Vyberte kartu Rodokmen a klikněte na Zobrazit graf rodokmenu. Kliknutím na Ikona znaménka plus ikony můžete prozkoumat rodokmen dat vygenerovaný dotazy SQL a Pythonu.

    Rozbalený graf rodokmenu

  6. Kliknutím na šipku spojující 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 pracovních postupů.

Zachycení a zobrazení rodokmenu pracovního postupu

Rodokmen se zaznamenává také pro všechny pracovní postupy, které čtou nebo zapisují do katalogu Unity. Pokud chcete předvést zobrazení rodokmenu pracovního postupu Azure Databricks, postupujte následovně:

  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íhopole v horním panelu pracovního prostoru Azure Databricks zadejte lineage_data.lineagedemo.menu a klikněte na Hledat lineage_data.lineagedemo.menu v Databricks.

  8. V části Tabulky Zobrazit všechny tabulky klikněte na menu tabulku.

  9. Vyberte kartu Rodokmen, klikněte na Pracovní postupy a vyberte kartu Podřízená. Název úlohy se zobrazí v části Název úlohy jako příjemce menu tabulky.

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

Pokud chcete předvést zobrazení rodokmenu řídicího panelu SQL, použijte následující postup:

  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 textové pole Prohledat tabulky v horním panelu menu .
  3. Klikněte na Příkazy > Vytvořit rychlý řídicí panel.
  4. Vyberte sloupce, které chcete přidat na řídicí panel, a klikněte na Vytvořit.
  5. Do vyhledávacíhopole v horním panelu pracovního prostoru Azure Databricks zadejte lineage_data.lineagedemo.menu a klikněte na Hledat lineage_data.lineagedemo.menu v Databricks.
  6. V části Tabulky Zobrazit všechny tabulky klikněte na menu tabulku.
  7. Vyberte kartu Rodokmen a klikněte na Řídicí panely. Název řídicího panelu 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, pracovní postupy 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, pracovní postupy 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ů.

Rozhraní API rodokmenu dat

Rozhraní API rodokmenu dat umožňuje načíst rodokmen tabulky a sloupce.

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 .

Odpověď

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