Model částečně strukturovaných dat
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.
Na jaký vzor byste měli použít následující aspekty:
- 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:
- Dotazování 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 řetězcového sloupce použitím standardního formátu JSON a potom dotazovat pole ve formátu JSON pomocí zápisu :
.
Mnoho systémů výstupních záznamů jako řetězcové nebo bajtové záznamy JSON. Ingestování a ukládání těchto záznamů jako řetězců má velmi nízkou režii na 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é jsou přítomné v datech v podřízených úlohách, můžete vyřešit.
- 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žít řetězce JSON pro mnoho aplikací, ale jsou zvlášť užitečné, když nejdůležitější výsledek úlohy ukládá kompletní a přesnou reprezentaci zdroje dat pro zpracování podřízeného zpracování. Mezi případy použití může patřit:
- Ingestování streamovaných dat ze služby fronty, 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 zpracovává data uložená jako struktury stejně jako všechny ostatní sloupce, což znamená, že neexistuje žádný funkční rozdíl od struktur a sloupců. Datové soubory Parquet používané Delta Lake vytvoří sloupec pro každé pole ve struktuře. Pole struktury můžete použít jako sloupce pro seskupování nebo sloupce pro rozdělování a můžete shromažďovat statistiky o strukturách ke zrychlení zpracování dat.
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 přítomných sloupců dostane do stovek.
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 mít do tabulky potvrzená pouze ověřená data, ale může vést k ztrátě dat nebo selhání úloh při zpracování malformovaný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 data zploštět?
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í: