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.
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ázevlineagedemo
sché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í keUSE 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ímMANAGE
schématu. Pokud chcete například udělit všem uživatelům ve skupině oprávnění "data_engineers" k vytváření tabulek velineagedemo
schématulineage_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:
Přejděte na cílovou stránku Azure Databricks, na bočním panelu klikněte na Nový a v nabídce vyberte Poznámkový blok.
Zadejte název poznámkového bloku a vyberte SQL ve výchozím jazyce.
V clusteru vyberte cluster s přístupem k katalogu Unity.
Klikněte na Vytvořit.
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
Pokud chcete dotazy spustit, klikněte do buňky a stiskněte shift+enter nebo klikněte a vyberte Spustit buňku.
Použití Průzkumníka katalogu k zobrazení rodokmenu vygenerovaného těmito dotazy:
Do vyhledávacího pole v horním panelu pracovního prostoru Azure Databricks vyhledejte
lineage_data.lineagedemo.dinner
tabulku a vyberte ji.Vyberte kartu Rodokmen. Zobrazí se panel rodokmenu a zobrazí související tabulky (v tomto příkladu je to
menu
tabulka).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 ikonu uzlu zobrazíte další připojení, pokud jsou k dispozici.
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.
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.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:
Pokud chcete zobrazit rodokmen pomocí jiného jazyka, například Python:
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")
Buňku spusťte tak, že kliknete na buňku a stisknete shift+enter nebo kliknetea vyberete Spustit buňku.
Do vyhledávacího pole v horním panelu pracovního prostoru Azure Databricks vyhledejte
lineage_data.lineagedemo.price
tabulku a vyberte ji.Přejděte na kartu Rodokmen a klikněte na Zobrazit graf rodokmenu. Kliknutím na ikony můžete prozkoumat rodokmen dat vygenerovaný dotazy.
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:
Na bočním panelu klikněte na Nový a v nabídce vyberte Poznámkový blok.
Zadejte název poznámkového bloku a vyberte SQL ve výchozím jazyce.
Klikněte na Vytvořit.
Do první buňky poznámkového bloku zadejte následující dotaz:
SELECT * FROM lineage_data.lineagedemo.menu
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.
Klikněte na možnost Spustit.
Do vyhledávacího pole v horním panelu pracovního prostoru Azure Databricks vyhledejte
lineage_data.lineagedemo.menu
tabulku a vyberte ji.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:
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.
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
.Klikněte na Otevřít na řídicím panelu.
Vyberte sloupce, které chcete přidat na řídicí panel, a klikněte na Vytvořit.
Publikujte řídicí panel.
V rodokmenu dat se sledují jenom publikované řídicí panely.
Do vyhledávacího pole v horním panelu vyhledejte
lineage_data.lineagedemo.menu
tabulku a vyberte ji.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í userA
sprá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í userA
a 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 vlastnostispark.databricks.dataLineage.mergeIntoV2Enabled
Spark natrue
hodnotu . Povolení tohoto příznaku může zpomalit výkon dotazů, zejména v úlohách, které zahrnují velmi široké tabulky.