Objekty v Unity Catalogu
Cíle kapitoly
- Navrhnout konzistentní naming conventions a používat třívrstvý namespace
catalog.schema.object - Vytvořit catalog a schema včetně managed storage location a workspace bindings
- Rozlišit managed a external tabulky, vytvářet views, materialized views a volumes
- Provádět DDL operace — SQL/Python funkce, procedury, ALTER a governance tagy
- Připojit externí databázi přes foreign catalog (Lakehouse Federation) a nakonfigurovat AI/BI Genie instructions
Třívrstvý namespace a naming conventions
Vše, co v Unity Catalogu vytvoříte, žije v třívrstvém namespace: catalog.schema.object. Nad těmito třemi vrstvami stojí metastore — jeden na region, sdílený všemi workspaces v daném regionu. Metastore sami nevytváříte pro každý projekt; je to střecha, pod kterou stavíte katalogy.
Než začnete cokoliv vytvářet, dohodněte si naming conventions. Unity Catalog má několik tvrdých pravidel, která vám rozhodování zjednoduší:
| Pravidlo | Detail |
|---|---|
| Délka jména | max. 255 znaků |
| Velikost písmen | jména objektů se ukládají jako lowercase; SalesData = salesdata |
| Zakázané znaky | tečka, mezera, lomítko, řídicí znaky (tečka odděluje vrstvy namespace) |
| Speciální znaky | možné přes backticky, např. `sales-data` — v praxi se jim vyhněte |
| Sloupce | zachovávají zadanou velikost písmen, dotazy jsou case-insensitive |
Doporučený vzor je lowercase s podtržítky (customer_data, sales_summary) — camelCase se stejně převede na lowercase a vznikne jen zmatek. Views prefixujte vw_, dočasné staging tabulky tmp_. Názvy schémat zarovnejte s vrstvami medallion architektury: bronze, silver, gold — pak z sales_data.gold.monthly_revenue každý na první pohled pozná, co drží v ruce.
U katalogů se rozhodujete mezi dvěma strategiemi: podle domény (sales_data, finance_data) nebo podle prostředí (dev, test, prod). Kombinace {domena}_{prostredi} — tedy sales_dev, sales_prod — škáluje nejlépe, ale roste vám počet katalogů, takže potřebujete disciplínu ve správě.
CREATE TABLE/CREATE SCHEMA na konkrétní týmy, validujte jména v CI/CD pipeline a nekonzistence pravidelně hledejte dotazem do information_schema.sales_final_report_v1_updated je klasický antipattern. Verze a stav patří do metadat (comments, tagy), ne do identifikátoru.Vytvoření katalogu
Catalog je nejvyšší kontejner a primární jednotka izolace dat: každý katalog může mít vlastní storage location, bezpečnostní hranice i přístupové politiky. K vytvoření potřebujete být metastore admin, nebo mít privilegium CREATE CATALOG. Každý nový katalog automaticky dostane dvě schémata: default a information_schema.
-- katalog s dedikovanym managed storage CREATE CATALOG IF NOT EXISTS prod_catalog MANAGED LOCATION 'abfss://prod-data@mystorageaccount.dfs.core.windows.net/catalog-root' COMMENT 'Production catalog with dedicated ADLS Gen2 storage';
IF NOT EXISTS dělá skript idempotentní — můžete ho pouštět opakovaně bez chyby.
V UI: Catalog v levé navigaci → Create catalog → jméno + typ Standard → volitelně managed storage location → Create. Po vytvoření nastavte workspace bindings — nový katalog je defaultně viditelný ze všech workspaces připojených k metastore. Produkční katalog omezte jen na produkční workspace.
Managed storage location určuje, kam Unity Catalog fyzicky ukládá soubory managed tabulek a volumes v katalogu. Bez ní padají managed objekty do defaultního úložiště metastore — a pokud metastore default nemá, je MANAGED LOCATION při vytvoření katalogu povinná. K jejímu nastavení potřebujete existující external location a privilegium CREATE MANAGED STORAGE.
prod_catalog, je jedno špatné USE CATALOG od incidentu. Workspace bindings nastavte hned po vytvoření katalogu.Vytvoření schématu
Schema je druhá vrstva namespace a organizuje data uvnitř katalogu do logických celků — typicky jeden use case, projekt nebo tým. V Databricks narazíte i na termín „database": CREATE DATABASE je alias pro CREATE SCHEMA, jde o totéž. K vytvoření potřebujete USE CATALOG a CREATE SCHEMA na nadřazeném katalogu.
CREATE SCHEMA IF NOT EXISTS prod_catalog.customer_analytics COMMENT 'Customer behavior and segmentation analysis'; -- schema s vlastnim ulozistem (napr. finance kvuli compliance) CREATE SCHEMA IF NOT EXISTS prod_catalog.financial_data MANAGED LOCATION 'abfss://finance@mystorageaccount.dfs.core.windows.net/schema-data';
Tři osvědčené vzory organizace schémat:
| Vzor | Příklad | Kdy použít |
|---|---|---|
| Podle oddělení | marketing_analytics, financial_data | business units vlastní svá data |
| Podle projektu | customer_churn_model, pricing_optimization | dočasné iniciativy, snadný úklid po konci projektu |
| Podle fáze zpracování | bronze, silver, gold | medallion pipeline, nejčastější u data engineeringu |
Managed storage na úrovni schématu je volitelná — pokud ji nezadáte, managed tabulky používají úložiště katalogu (případně metastore). Hierarchie fallbacku je tedy: schema → catalog → metastore.
USE SCHEMA (plus USE CATALOG na katalogu). Detailně se privilegiím věnuje kapitola o zabezpečení Unity Catalogu.Tabulky a views
Managed vs. external tabulky
Managed table je default: Databricks spravuje metadata i datové soubory, formát je Delta Lake (ACID transakce, time travel, schema enforcement) a při DROP TABLE se smažou metadata i data. External table jen registruje metadata nad daty v externím úložišti — DROP odstraní pouze registraci v katalogu, soubory zůstanou.
-- managed tabulka (default, format Delta Lake) CREATE TABLE production.sales.sales_transactions ( transaction_id BIGINT, customer_id INT, amount DECIMAL(10,2), transaction_date DATE ); -- external tabulka nad existujicimi CSV soubory CREATE EXTERNAL TABLE production.sales.archived_sales USING CSV LOCATION 'abfss://container@storage.dfs.core.windows.net/sales/archive' OPTIONS (header 'true', inferSchema 'true');
Primary a foreign keys
Unity Catalog umí definovat PRIMARY KEY a FOREIGN KEY constraints — ale pozor na očekávání z klasických databází:
Kdo čeká, že PRIMARY KEY v Databricks zablokuje duplicitní řádky, bude překvapen. PK/FK constraints jsou informational only — nevynucují se při zápisu. Dokumentace: „these constraints are informational only and are not enforced." Slouží jako metadata pro dokumentaci datového modelu, pro query optimizer (lepší join strategie) a pro nástroje jako AI/BI Genie, které z nich odvozují join relationships. Datovou kvalitu vynucují jen NOT NULL a CHECK constraints.
CREATE TABLE customers ( customer_id BIGINT NOT NULL, customer_name STRING, CONSTRAINT customers_pk PRIMARY KEY (customer_id) ); CREATE TABLE orders ( order_id BIGINT NOT NULL PRIMARY KEY, customer_id BIGINT, total_amount DECIMAL(10,2), CONSTRAINT orders_customers_fk FOREIGN KEY (customer_id) REFERENCES customers(customer_id) );
Views: standardní, dynamické, materializované
| Typ | Data | Kdy použít |
|---|---|---|
| View | nic neukládá, dotaz běží při každém přístupu | zapouzdření logiky, vždy aktuální data |
| Dynamic view | jako view + row filtering / column masking | řízení přístupu podle uživatele (is_account_group_member()) |
| Materialized view | předpočítané výsledky v Delta tabulce | drahé agregace, dashboardy, akceptovatelná mírná neaktuálnost |
-- dynamic view: maskovani sloupce podle skupiny CREATE VIEW sales_redacted AS SELECT user_id, CASE WHEN is_account_group_member('auditors') THEN email ELSE 'REDACTED' END AS email, product, total FROM sales_raw; -- materialized view s planovanym refreshem CREATE MATERIALIZED VIEW daily_sales_summary SCHEDULE EVERY 1 DAY AS SELECT transaction_date, COUNT(*) AS transaction_count, SUM(amount) AS total_sales FROM sales_transactions GROUP BY transaction_date;
Materialized views podporují inkrementální refresh — zpracují jen změněná data. Podmínkou je, aby zdrojové Delta tabulky měly zapnutý row tracking (delta.enableRowTracking = true). Zapnutí na velké existující tabulce chvíli trvá, povyšuje protokol tabulky a je nevratné.
Streaming table (CREATE OR REFRESH STREAMING TABLE) zpracovává pouze nové řádky od posledního refreshe — streaming sémantika, exactly-once. Hodí se pro inkrementální ingestion (Auto Loader nad cloud storage, Kafka) a bronze/silver vrstvy, kde data jen přibývají. Materialized view naopak počítá agregace nad kompletním datasetem batch sémantikou. Pravidlo: zdroj jen appenduje a historii nedrží (Kafka) → streaming table; agregace nad celkem s periodickým přepočtem → materialized view. Streaming tables rozebírá detailně kapitola o ingestion.
CLUSTER BY) — layout dat se optimalizuje automaticky podle dotazů a nehrozí skewed partitions.Volumes: governance pro soubory
Volume je objekt Unity Catalogu pro netabulková data — CSV k ingestion, obrázky, audio, ML modely. Sedí na třetí úrovni namespace (catalog.schema.volume) a přenáší stejný governance model, jaký znáte z tabulek, na soubory.
Stejně jako u tabulek volíte managed (úložiště i lifecycle řeší Unity Catalog; po dropu jsou soubory označeny ke smazání po retenční lhůtě) nebo external (soubory leží na vámi zadané cestě a drop odstraní jen registraci). External volume použijte, když k souborům přistupují i systémy mimo Databricks nebo když governance přidáváte nad existující úložiště.
-- managed volume CREATE VOLUME IF NOT EXISTS dev_catalog.bronze_schema.landing_files COMMENT 'Landing area for CSV files from external systems'; -- external volume nad existujicim ulozistem CREATE EXTERNAL VOLUME prod_catalog.silver_schema.ml_models LOCATION 'abfss://models@mystorageaccount.dfs.core.windows.net/production/'; -- prava: cteni a zapis pro skupinu GRANT READ VOLUME, WRITE VOLUME ON VOLUME dev_catalog.bronze_schema.landing_files TO `data-engineers`;
K souborům přistupujete jednotnou POSIX-style cestou /Volumes/<catalog>/<schema>/<volume>/<cesta> — funguje ve Sparku, pandas, SQL i dbutils.fs, bez credentials a connection stringů:
# stejna cesta pro Spark i pandas df = spark.read.format("csv").load("/Volumes/dev_catalog/bronze_schema/landing_files/data.csv") import pandas as pd pdf = pd.read_csv("/Volumes/dev_catalog/bronze_schema/landing_files/data.csv") # sprava souboru dbutils.fs.ls("/Volumes/dev_catalog/bronze_schema/landing_files")
READ VOLUME — uživatel potřebuje i USE CATALOG a USE SCHEMA na nadřazených objektech. Privilegia se v hierarchii vyhodnocují vždy shora dolů.DDL operace: funkce, procedury, ALTER a tagy
Funkce jako governed objekty
Funkce v Unity Catalogu nejsou jen syntaktický cukr — jsou to governed objekty s vlastníkem, privilegii a sledováním použití. Definujete je jednou a voláte odkudkoliv, takže výpočet slevy nebo klasifikace známky je v celé organizaci konzistentní. Podporovány jsou scalar i table-valued funkce v SQL nebo Pythonu:
-- SQL scalar funkce CREATE FUNCTION dev_catalog.finance_schema.calculate_discount(price DOUBLE, discount_rate DOUBLE) RETURNS DOUBLE RETURN price * (1 - discount_rate); -- Python funkce (bezi na serverless / pro SQL warehouse) CREATE FUNCTION dev_catalog.analytics_schema.normalize_text(input_text STRING) RETURNS STRING LANGUAGE PYTHON AS $$ return input_text.lower().strip() if input_text else None $$; -- table-valued funkce CREATE FUNCTION dev_catalog.utils_schema.split_to_rows(input_array ARRAY<STRING>) RETURNS TABLE(value STRING) RETURN SELECT explode(input_array) AS value;
Pro vícekrokové workflow (validace → transformace → load) existují SQL stored procedures — CREATE PROCEDURE s IN/OUT/INOUT parametry, proměnnými a řízením toku, volané přes CALL. Vyžadují Databricks Runtime 17.0+; přesný stav podpory ověřte v dokumentaci.
ALTER: vlastnictví, tagy, struktura
-- prevod vlastnictvi katalogu na skupinu ALTER CATALOG dev_catalog SET OWNER TO `data_engineering_team`; -- governance tagy pro klasifikaci a dohledatelnost -- nazev tagu i hodnota musi byt retezcove literaly ALTER CATALOG dev_catalog SET TAGS ( 'environment' = 'development', 'cost_center' = 'engineering', 'data_classification' = 'internal' ); -- upravy struktury tabulky bez rebuildu ALTER TABLE dev_catalog.sales_schema.orders ADD COLUMN shipping_carrier STRING COMMENT 'Name of the shipping carrier'; ALTER TABLE dev_catalog.sales_schema.orders ALTER COLUMN quantity TYPE BIGINT;
ALTER TABLE zvládne přidání, přejmenování i odstranění sloupců a rozšíření typů (INT → BIGINT) při zachování dat — vyžaduje privilegium MODIFY. Rozšiřování typů (type widening) funguje na Delta tabulkách od Databricks Runtime 15.2 a výš; má-li se typ rozšířit automaticky už při ingesci, zapněte na tabulce delta.enableTypeWidening. Podporované dvojice typů a přesný stav funkce ověřte v dokumentaci. Přejmenování sloupce potřebuje zapnutý Delta column mapping. Tagy jsou prohledávatelná metadata: základ pro klasifikaci dat, cost management i pozdější automatizovanou governance.
ALTER CATALOG prod_catalog ENABLE PREDICTIVE OPTIMIZATION zapne automatickou údržbu (compaction, vacuum) pro všechny tabulky v katalogu — tabulky nastavení dědí, pokud ho na své úrovni nepřepíšete.Foreign catalog a Lakehouse Federation
Ne všechna data máte v lakehousu — a ne všechna tam potřebujete stěhovat. Lakehouse Federation umožňuje dotazovat externí databáze (PostgreSQL, MySQL, Azure SQL, Snowflake, BigQuery…) přímo z Databricks, přičemž přístup řídí, audituje a lineage sleduje Unity Catalog. Ideální pro ad-hoc analýzy nad živými provozními daty, proof-of-concept bez ETL a postupnou migraci.
Architektura stojí na dvou objektech: connection uchovává technické detaily připojení (JDBC host, port, credentials — ideálně přes Databricks secrets) a foreign catalog zrcadlí konkrétní externí databázi do namespace Unity Catalogu. Jedna connection může obsloužit více foreign catalogů (více databází na stejném serveru).
-- 1) connection: credentials pres Databricks secrets, ne v plaintextu CREATE CONNECTION postgresql_prod TYPE postgresql OPTIONS ( host 'prod-db.example.com', port '5432', user secret ('prod-secrets','postgres-user'), password secret ('prod-secrets','postgres-password') ); -- 2) foreign catalog zrcadlici databazi customers CREATE FOREIGN CATALOG IF NOT EXISTS prod_customer_data USING CONNECTION postgresql_prod OPTIONS (database 'customers'); -- 3) dotaz jako na beznou tabulku Unity Catalogu SELECT customer_id, SUM(transaction_amount) AS total_spent FROM prod_customer_data.public.transactions GROUP BY customer_id;
Metadata se synchronizují automaticky při každém dotazu. U vysokofrekvenčních dotazů to může být pomalé — pak metadata občerstvujte plánovaně přes REFRESH FOREIGN CATALOG / SCHEMA / TABLE (např. z Lakeflow Jobs) a dotazy poběží nad cache.
CREATE CONNECTION na metastore pro connection; CREATE CATALOG na metastore plus vlastnictví connection (nebo CREATE FOREIGN CATALOG na ní) pro foreign catalog. Přístup pro federaci je primárně read-only — možnosti zápisu ověřte v aktuální dokumentaci pro konkrétní systém.AI/BI Genie instructions
AI/BI Genie umožňuje business uživatelům ptát se na data přirozeným jazykem — Genie z otázky vygeneruje SQL nad tabulkami Unity Catalogu. Aby generovalo správné SQL, potřebuje kontext: k tomu slouží knowledge store objektu Genie Agent (dříve Genie space), kde metadata upravujete na jeho úrovni, aniž byste měnili podkladové objekty v katalogu.
Genie Agent stavíte nad výběrem tabulek (max. 25, doporučeno začít s pěti a méně). Pak vrstvíte kontext:
| Nástroj | K čemu slouží |
|---|---|
| Popisy tabulek a sloupců | business jazyk místo technického („obsahuje všechny nákupy zákazníků…"), synonyma pro sloupce |
| Skrytí sloupců | surrogate keys a audit sloupce ven — matou uživatele i model |
| Joins | vztahy mezi tabulkami vč. kardinality; PK/FK z Unity Catalogu si Genie načte samo |
| Prompt matching | vzorky reálných hodnot — „California" se namapuje na kód „CA" |
| SQL expressions | znovupoužitelné measures/filtry/dimenze (gross margin, fiskální kvartál) |
| Example SQL queries | vzorové otázky s hotovým SQL; parametrizované se označují jako Trusted |
| Text instructions | globální pravidla („fiskální rok začíná v únoru") — používat střídmě |
Tady se vyplácí poctivá práce z předchozích sekcí: PK/FK constraints ze sekce 3.4, popisné komentáře a konzistentní jména Genie automaticky vytěží při zakládání Genie Agenta (knowledge mining) a uloží jako join relationships. Dobře anotovaný katalog znamená méně ruční konfigurace.
Konfigurace Genie je iterativní proces: otestujte Genie Agenta vlastními otázkami, přes Show generated code zkontrolujte vygenerované SQL, chybné odpovědi opravte a uložte jako novou instrukci (Add as instruction). Průběžně sledujte zpětnou vazbu uživatelů v tabu Monitoring a měřte přesnost benchmark otázkami.
Genie Agent má dva oddělené limity: instructions limit 100 (example SQL queries, SQL funkce a celý blok textových instrukcí dohromady) a knowledge store snippets limit 200 (popisy tabulek, join relationships a SQL expressions dohromady). Entity matching zvládne až 1 024 distinct hodnot na sloupec napříč 120 sloupci jednoho agenta. Popisy sloupců a prompt matching se do limitů nepočítají. Limity se mohou měnit — aktuální hodnoty ověřte v dokumentaci.
Lab 3: Create and Organize Objects in Unity Catalog (45 minut)
Lakeside University buduje datovou platformu pro studijní agendu: v labu vytvoříte katalog edu_dev s medallion schématy (bronze/silver/gold), managed tabulky studentů, kurzů a zápisů s PK/FK constraints, view a materialized view pro analytické dotazy, managed volume pro CSV soubory, SQL funkci pro klasifikaci známek a přes ALTER aplikujete governance tagy. Volitelně nad datasetem postavíte Genie Agenta.
▶ Otevřít lab na GitHubu (EN) · Learn modul k tématu — s krátkými výukovými videy
DROP TABLE u managed vs. external tabulky? 2) Vynucují PK/FK constraints v Unity Catalogu referenční integritu při zápisu — a k čemu tedy slouží? 3) Jaký je rozdíl mezi connection a foreign catalogem v Lakehouse Federation a která privilegia potřebujete k jejich vytvoření?