Sdílet prostřednictvím


Vyčištění a ověření dat pomocí dávkového zpracování nebo zpracování datových proudů

Čištění a ověřování dat je nezbytné pro zajištění kvality datových prostředků v jezeře. Tento článek popisuje nabídky produktů Azure Databricks navržené pro usnadnění kvality dat a také doporučení pro definování obchodní logiky pro implementaci vlastních pravidel.

Vynucení schématu v Azure Databricks

Delta Lake poskytuje sémantiku pro vynucení kontrol schématu a omezení při zápisu, což zajišťuje záruky kvality dat pro tabulky v architektuře lakehouse.

Vynucení schématu zajišťuje, aby data zapsaná do tabulky dodržovala předdefinované schéma. Ověřovací pravidla schématu se liší podle operace. Viz vynucení schématu.

Pro zpracování vývoje schématu delta poskytuje mechanismy pro provádění změn schématu a vývoj tabulek. Je důležité pečlivě zvážit, kdy použít evoluci schématu, aby nedocházelo ke ztrátě polí nebo selhání datových kanálů. Podrobnosti o ruční nebo automatické aktualizaci schémat najdete v tématu Aktualizace schématu tabulky Delta Lake.

Omezení tabulky

Omezení můžou mít podobu informačního primárního klíče a omezení cizího klíče nebo vynucených omezení. Vizklauzule .

Omezení tabulek v Azure Databricks jsou vynucená nebo informační.

Vynucená omezení zahrnují NOT NULL a CHECK omezení.

Informační omezení zahrnují omezení primárního klíče a cizího klíče.

Viz Omezení v Azure Databricks.

Práce s hodnotami null nebo s chybějícími hodnotami

U tabulek Delta lze vynutit NOT NULL. U existující tabulky ji lze povolit pouze v případě, že žádné existující záznamy ve sloupci nemají hodnotu null a zabrání vložení nových záznamů s hodnotami null do tabulky.

Vynucování vzorů

Regulární výrazy (regex) lze použít k vynucení očekávaných vzorů v datovém poli. To je zvlášť užitečné při práci s textovými daty, která musí dodržovat konkrétní formáty nebo vzory.

Pokud chcete vynutit vzor pomocí regulárního výrazu, můžete v SQL použít funkce REGEXP nebo RLIKE. Tyto funkce umožňují porovnat datové pole se zadaným vzorem regulárních výrazů.

Zde je příklad použití omezení CHECK s regulárním výrazem pro vynucení vzoru v SQL:

CREATE TABLE table_name (
  column_name STRING CHECK (column_name REGEXP '^[A-Za-z0-9]+$')
);

Prosazování hodnoty

Omezení se dají použít k vynucení rozsahů hodnot u sloupců v tabulce. Tím zajistíte, že se dají vložit nebo aktualizovat jenom platné hodnoty v zadaném rozsahu.

Pokud chcete vynutit omezení rozsahu hodnot, můžete použít omezení CHECK v SQL. Omezení CHECK umožňuje definovat podmínku, která musí být pravdivá pro každý řádek v tabulce.

Tady je příklad použití omezení k vynucení rozsahu CHECK hodnot ve sloupci:

CREATE TABLE table_name (
  column_name INT CHECK (column_name >= 0 AND column_name <= 100)
);

Definujte a nakonfigurujte očekávání pomocí deklarativních kanálů Sparku Lakeflow.

Deklarativní kanály Sparku pro Lakeflow umožňují definovat očekávání při deklarování materializovaných zobrazení nebo streamovaných tabulek. Můžete se rozhodnout nakonfigurovat očekávání tak, aby vás varovala před porušením, odstranění porušujících záznamů nebo selhání úloh na základě porušení. Podívejte se na Řiďte kvalitu dat pomocí očekávání v rámci datového toku.

Monitorování dat

Azure Databricks poskytuje služby monitorování kvality dat, které umožňují monitorovat statistické vlastnosti a kvalitu dat ve všech tabulkách ve vašem účtu. Podívejte se na Profilace dat.

Přetypování datových typů

Když vkládáte nebo aktualizujete data do tabulky, Azure Databricks přetypuje datové typy, když je to možné bezpečně, aniž by došlo ke ztrátě informací.

Podrobnosti o chování při přetypovávání najdete v následujících článcích.

Vlastní obchodní logika

Pomocí filtrů a klauzulí WHERE můžete definovat vlastní logiku, která umístí chybné záznamy do karantény a brání jejich šíření do podřízených tabulek. CASE WHEN ... OTHERWISE klauzule umožňují definovat podmíněnou logiku pro řádné použití obchodní logiky na záznamy, které porušují očekávání předvídatelně.

DECLARE current_time = now()

INSERT INTO silver_table
  SELECT * FROM bronze_table
  WHERE event_timestamp <= current_time AND quantity >= 0;

INSERT INTO quarantine_table
  SELECT * FROM bronze_table
  WHERE event_timestamp > current_time OR quantity < 0;

Poznámka:

Databricks doporučuje vždy zpracovávat filtrovaná data jako samostatnou operaci zápisu, zejména při použití strukturovaného streamování. Použití .foreachBatch k zápisu do více tabulek může vést k nekonzistentním výsledkům.

Můžete mít například nadřazený systém, který nedokáže kódovat NULL hodnoty, a proto se zástupná hodnota -1 používá k reprezentaci chybějících dat. Místo psaní vlastní logiky pro všechny podřízené dotazy v Azure Databricks, abyste ignorovali záznamy obsahující -1, můžete použít případ, kdy příkaz tyto záznamy dynamicky nahradí jako transformaci.

INSERT INTO silver_table
  SELECT
    * EXCEPT weight,
    CASE
      WHEN weight = -1 THEN NULL
      ELSE weight
    END AS weight
  FROM bronze_table;