Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek doporučuje vzory pro ukládání částečně strukturovaných dat v závislosti na tom, jak vaše organizace data používá. Azure Databricks poskytuje funkce, nativní datové typy a syntaxi dotazů pro práci s částečně strukturovanými, vnořenými a složitými daty.
Následující aspekty ovlivňují, který vzor byste měli použít:
- Mění se pole nebo typy ve zdroji dat často?
- Kolik jedinečných polí obsahuje zdroj dat?
- Potřebujete optimalizovat úlohy pro zápisy nebo čtení?
Databricks doporučuje ukládat data jako tabulky Delta pro podřízené dotazy.
Použít variantu
Ve službě Databricks Runtime 15.3 a vyšší můžete pomocí VARIANT typu ukládat částečně strukturovaná data JSON pomocí optimalizovaného kódování, které překračuje výkon řetězců JSON pro čtení a zápisy.
Typ VARIANT má podobné aplikace jako řetězce JSON. Některé úlohy stále využívají struktury, mapy a pole, zejména pro data s dobře známými schématy, které by mohly těžit z optimalizovaného rozložení dat a shromažďování statistik.
Další podrobnosti najdete v následujících článcích:
- Dotaz na data variant
- Jak se varianta liší od řetězců JSON?
- Ingestování dat jako částečně strukturovaný typ varianty
Použití řetězců JSON
Data můžete uložit do jednoho sloupce typu řetězec pomocí standardního formátování JSON a potom dotazovat pole v JSONu pomocí zápisu :.
Mnoho systémů vytváří záznamy JSON jako řetězce nebo jako bajtově kódované záznamy JSON. Načítání a ukládání těchto záznamů jako řetězců má velmi nízkou režii při zpracování. Pomocí funkce můžete také to_json převést libovolnou strukturu dat na řetězec JSON.
Při výběru ukládání dat jako řetězců JSON zvažte následující silné a slabé stránky:
- Všechny hodnoty se ukládají jako řetězce bez informací o typu.
- JSON podporuje všechny datové typy, které je možné reprezentovat pomocí textu.
- JSON podporuje řetězce s libovolnou délkou.
- Počet polí, která lze reprezentovat v jednom sloupci dat JSON, nejsou nijak omezena.
- Data před zápisem do tabulky nevyžaduje žádné předběžné zpracování.
- Problémy s typy, které se v datech vyskytují, můžete vyřešit v následných úlohách.
- JSON poskytuje nejhorší výkon při čtení, protože musíte analyzovat celý řetězec pro každý dotaz.
Řetězce JSON poskytují skvělou flexibilitu a snadno implementované řešení pro získání nezpracovaných dat do tabulky lakehouse. Můžete se rozhodnout používat řetězce ve formátu JSON v mnoha aplikacích, ale jsou obzvlášť užitečné tehdy, když je nejdůležitějším výsledkem úlohy uložení úplné a přesné reprezentace zdroje dat pro následné zpracování. Mezi případy použití může patřit:
- Příjem streamovaných dat ze služby front zpráv, jako je Kafka.
- Zaznamenávání odpovědí na dotazy rozhraní REST API
- Ukládání nezpracovaných záznamů z nadřazeného zdroje dat, které neřídí váš tým.
Pokud je logika příjmu dat flexibilní, uložení dat jako řetězce JSON by mělo být odolné i v případě, že narazíte na nová pole, změny struktury dat nebo změny typu ve zdroji dat. I když podřízené úlohy můžou selhat kvůli těmto změnám, tabulka obsahuje úplnou historii zdrojových dat, což znamená, že můžete vyřešit problémy bez nutnosti vrátit se ke zdroji dat.
Používání struktur
Částečně strukturovaná data můžete ukládat pomocí struktur a povolit všechny nativní funkce sloupců při zachování vnořené struktury zdroje dat.
Delta Lake umožňuje používat struktury stejným způsobem jako sloupce. V tabulce Delta Lake datové soubory Parquet vytvoří sloupec pro každé pole ve struktuře. Pole struktury můžete použít jako klíče clusteringu a shromažďovat statistiky o strukturách pro přeskočení dat. Tabulku nelze rozdělit podle pole struktury. Používejte místo toho shlukování kapalin. Viz Použití metody 'liquid clustering' pro tabulky.
Struktury obecně poskytují nejlepší výkon při čtení, protože podporují všechny optimalizace přeskakování dat a ukládají jednotlivá pole jako sloupce. Výkon může začít trpět, když se počet sloupců, které jsou přítomny, dostane ke stovkám.
Každé pole ve struktuře má datový typ, který se vynucuje při zápisu stejně jako sloupce. Struktury proto vyžadují úplné předběžné zpracování dat. To může být užitečné, pokud chcete do tabulky uložit pouze validovaná data, ale může vést k vyřazení dat nebo selhání úloh při zpracování nesprávně formátovaných záznamů z nadřazených systémů.
Struktury jsou pro vývoj schématu méně flexibilní než datové proudy JSON, ať už jde o vývoj datových typů nebo přidání nových polí.
Použití map a polí
Pomocí kombinace map a polí můžete nativně replikovat částečně strukturované formáty dat v Delta Lake. Statistiky nelze shromažďovat u polí definovaných těmito typy, ale poskytují vyvážený výkon při čtení i zápisu u částečně strukturovaných datových sad, které mají přibližně 500 polí.
Klíč i hodnota map jsou zadány, takže data jsou předem zpracována a schéma se vynucuje při zápisu.
K urychlení dotazů doporučuje Databricks ukládat pole, která se často používají k filtrování dat jako samostatných sloupců.
Musím svá data zploštit?
Pokud data ukládáte pomocí JSON nebo map, zvažte ukládání polí, která se často používají k filtrování dotazů jako sloupců. Kolekce statistik, dělení a clustering nejsou k dispozici pro pole v řetězcích nebo mapách JSON. Nemusíte to dělat pro data uložená jako struktury.
Syntaxe pro práci s vnořenými daty
Informace o práci s vnořenými daty najdete v následujících zdrojích informací: