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.
Omezení primárního klíče, která zachycují relace mezi poli v tabulkách, můžou uživatelům a nástrojům pomoct pochopit relace v datech. Tento článek obsahuje příklady, které ukazují, jak můžete použít primární klíče s možností RELY optimalizovat některé běžné typy dotazů.
Poznámka
Optimalizace dotazů přidružené k RELY příkazu vyžadují, aby se dotazy spouštěly na výpočetních prostředcích s podporou Photon. Podívejte se na co je Photon? Photon běží ve výchozím nastavení ve službě SQL Warehouse a bezserverové výpočetní prostředky pro poznámkové bloky a pracovní postupy. Další informace o Photonu najdete v tématu Co je Photon?
Přidání omezení primárního klíče
V příkazu pro vytvoření tabulky můžete přidat omezení primárního klíče, jako v následujícím příkladu, nebo přidat omezení do tabulky pomocí klauzule ADD CONSTRAINT.
CREATE TABLE customer (
c_customer_sk int,
PRIMARY KEY (c_customer_sk)
...
)
V tomto příkladu c_customer_sk je klíč ID zákazníka. Omezení primárního klíče určuje, že každá hodnota ID zákazníka by měla být v tabulce jedinečná. Azure Databricks nevynucuje klíčová omezení. Můžete je ověřit prostřednictvím stávajícího datového kanálu nebo ETL. Další informace o očekáváních při práci na proudových tabulkách a materializovaných zobrazeních najdete v tématu Správa kvality dat s očekáváními datového potrubí. Informace o práci s omezeními v tabulkách Delta najdete v tématu Omezení v Azure Databricks.
Poznámka
Uživatel zodpovídá za kontrolu, jestli je omezení splněné. Spoléhat se na omezení, které není splněno, může vést k nesprávným výsledkům dotazu.
Slouží RELY k povolení optimalizací.
Pokud víte, že omezení primárního klíče je platné, můžete optimalizaci na základě omezení povolit zadáním možnosti RELY. Úplnou syntaxi najdete v ADD CONSTRAINT klauzuli.
Možnost RELY umožňuje službě Azure Databricks zneužít omezení k přepsání dotazů. Následující optimalizace lze provést pouze v případě, že RELY je možnost zadána ADD CONSTRAINT v klauzuli nebo ALTER TABLE příkazu.
Pomocí ALTER TABLE, můžete upravit primární klíč tabulky tak, aby zahrnoval RELY možnost, jak je znázorněno v následujícím příkladu.
ALTER TABLE
customer DROP PRIMARY KEY;
ALTER TABLE
customer
ADD
PRIMARY KEY (c_customer_sk) RELY;
Příklady optimalizace
Následující příklady rozšiřují předchozí příklad, který vytvoří tabulku customer, kde c_customer_sk je ověřený jedinečný identifikátor pojmenovaný jako PRIMARY KEY se zadanou možností RELY.
Příklad 1: Vyloučení nepotřebných agregací
Následující příklad ukazuje dotaz, který použije DISTINCT operaci na primární klíč.
SELECT
DISTINCT c_customer_sk
FROM
customer;
Vzhledem k tomu, že c_customer_sk sloupec je ověřeným omezením PRIMARY KEY, jsou všechny hodnoty ve sloupci jedinečné. Pokud je zadaná možnost RELY, Azure Databricks může dotaz optimalizovat tak, že neprovádí operaci DISTINCT.
Příklad 2: Vyloučení nepotřebných spojení
Následující příklad ukazuje dotaz, ve kterém Azure Databricks může eliminovat nepotřebné spojení.
Dotaz spojí tabulku faktů store_sales s tabulkou dimenzí customer. Provede levé vnější spojení, takže výsledek dotazu zahrnuje všechny záznamy z tabulky store_sales a odpovídající záznamy z tabulky customer. Pokud v tabulce customer neexistuje žádný odpovídající záznam, výsledek dotazu zobrazí NULL hodnotu pro sloupec c_customer_sk.
SELECT
SUM(ss_quantity)
FROM
store_sales ss
LEFT JOIN customer c ON ss.customer_sk = c.c_customer_sk;
Pro pochopení, proč je toto spojení zbytečné, zvažte dotaz. Vyžaduje pouze sloupec ss_quantity z tabulky store_sales. Tabulka customer je spojena na základě svého primárního klíče, takže každý řádek store_sales odpovídá maximálně jednomu řádku v customer. Vzhledem k tomu, že operace je vnější spojení, zachovají se všechny záznamy z tabulky store_sales, takže spojení nezmění žádná data z této tabulky. Agregace SUM je stejná bez ohledu na to, jestli jsou tyto tabulky spojené.
Použití omezení primárního klíče s RELY poskytuje optimalizátoru dotazů informace, které potřebuje k odstranění spojení. Optimalizovaný dotaz vypadá nějak takto:
SELECT
SUM(ss_quantity)
FROM
store_sales ss
Další kroky
V tématu Zobrazení diagramu vztahů entit se dozvíte, jak prozkoumat vztahy primárního klíče a cizího klíče v uživatelském rozhraní Průzkumníka katalogu.