Udostępnij za pomocą


Optymalizacja zapytań przy użyciu ograniczeń klucza podstawowego

Ograniczenia klucza podstawowego, które przechwytują relacje między polami w tabelach, mogą pomóc użytkownikom i narzędziom zrozumieć relacje w danych. Ten artykuł zawiera przykłady pokazujące, jak można używać kluczy podstawowych z opcją RELY do optymalizacji niektórych typowych typów zapytań.

Nota

Optymalizacje zapytań skojarzone z poleceniem RELY wymagają uruchamiania zapytań na obliczeniach z obsługą funkcji Photon. Zobacz Co to jest Photon?. Narzędzie Photon jest domyślnie uruchamiane w usłudze SQL Warehouse i bezserwerowych obliczeniach dla notesów i przepływów pracy. Aby dowiedzieć się więcej na temat Photon, zobacz Co to jest Photon?.

Dodawanie ograniczeń klucza podstawowego

Ograniczenie klucza podstawowego można dodać w instrukcji tworzenia tabeli, tak jak w poniższym przykładzie, lub dodać ograniczenie do tabeli przy użyciu klauzuli ADD CONSTRAINT.

CREATE TABLE customer (
  c_customer_sk int,
  PRIMARY KEY (c_customer_sk)
  ...
  )

W tym przykładzie c_customer_sk jest kluczem identyfikatora klienta. Ograniczenie klucza podstawowego określa, że każda wartość identyfikatora klienta powinna być unikatowa w tabeli. Usługa Azure Databricks nie wymusza kluczowych ograniczeń. Można je zweryfikować za pomocą istniejącego potoku danych lub etL. Zobacz Zarządzanie jakością danych przy użyciu oczekiwań potoku, aby dowiedzieć się więcej o oczekiwaniach dotyczących pracy w tabelach przesyłania strumieniowego i zmaterializowanych widokach. Zobacz ograniczenia usługi Azure Databricks, aby dowiedzieć się więcej na temat pracy z ograniczeniami w tabelach Delta.

Nota

Użytkownik jest odpowiedzialny za sprawdzenie, czy ograniczenie jest spełnione. Poleganie na ograniczeniu, które nie jest spełnione, może prowadzić do nieprawidłowych wyników zapytania.

Użyj RELY polecenia , aby włączyć optymalizacje

Gdy wiadomo, że ograniczenie klucza podstawowego jest prawidłowe, można włączyć optymalizacje na podstawie ograniczenia, określając je za pomocą opcji RELY. Aby uzyskać pełną składnię, zobacz klauzulę w .

Opcja RELY umożliwia usłudze Azure Databricks wykorzystanie ograniczenia do ponownego zapisywania zapytań. Następujące optymalizacje można wykonać tylko wtedy, gdy RELY opcja jest określona w klauzuli ADD CONSTRAINT lub ALTER TABLE instrukcji.

Za pomocą ALTER TABLE możesz zmodyfikować klucz podstawowy tabeli, aby uwzględnić opcję RELY, jak pokazano w poniższym przykładzie.


ALTER TABLE
  customer DROP PRIMARY KEY;
ALTER TABLE
  customer
ADD
  PRIMARY KEY (c_customer_sk) RELY;

Przykłady optymalizacji

Poniższe przykłady rozszerzają poprzedni przykład, który tworzy tabelę customer, w której c_customer_sk jest zweryfikowanym unikatowym identyfikatorem o nazwie PRIMARY KEY z określoną opcją RELY.

Przykład 1. Eliminowanie niepotrzebnych agregacji

Poniżej przedstawiono zapytanie, które stosuje operację DISTINCT do klucza podstawowego.

SELECT
  DISTINCT c_customer_sk
FROM
  customer;

Ponieważ kolumna c_customer_sk jest zweryfikowanym ograniczeniem PRIMARY KEY, wszystkie wartości w kolumnie są unikatowe. Po określeniu opcji RELY usługa Azure Databricks może zoptymalizować zapytanie, nie wykonując operacji DISTINCT.

Przykład 2. Eliminowanie niepotrzebnych sprzężeń

Poniższy przykład przedstawia zapytanie, w którym usługa Azure Databricks może wyeliminować niepotrzebne sprzężenia.

Zapytanie łączy tabelę faktów, store_sales z tabelą wymiarów customer. Wykonuje lewe zewnętrzne sprzężenie, dlatego wynik zapytania zawiera wszystkie rekordy z tabeli store_sales oraz dopasowane rekordy z tabeli customer. Jeśli w tabeli customer nie ma pasującego rekordu, w wyniku zapytania zostanie wyświetlona wartość NULL kolumny c_customer_sk.

SELECT
  SUM(ss_quantity)
FROM
  store_sales ss
  LEFT JOIN customer c ON ss.customer_sk = c.c_customer_sk;

Aby zrozumieć, dlaczego to sprzężenie jest niepotrzebne, należy wziąć pod uwagę instrukcję zapytania. Wymaga tylko kolumny ss_quantity z tabeli store_sales. Tabela customer jest połączona po kluczu podstawowym, więc każdy wiersz store_sales odpowiada co najwyżej jednemu wierszowi w customer. Ponieważ operacja jest sprzężeniem zewnętrznym, wszystkie rekordy z tabeli store_sales są zachowywane, więc sprzężenie nie zmienia żadnych danych z tej tabeli. Agregacja SUM jest taka sama, czy te tabele są połączone.

Użycie ograniczenia klucza podstawowego z RELY daje optymalizatorowi zapytań informacje potrzebne do wyeliminowania sprzężenia. Zoptymalizowane zapytanie wygląda mniej więcej tak:

SELECT
  SUM(ss_quantity)
FROM
  store_sales ss

Następne kroki

Zobacz diagram relacji encji, aby dowiedzieć się, jak eksplorować relacje klucza głównego i klucza obcego w interfejsie użytkownika Eksploratora Katalogu.