Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I vincoli di chiave primaria, che acquisisce relazioni tra i campi nelle tabelle, possono aiutare gli utenti e gli strumenti a comprendere le relazioni nei dati. Questo articolo contiene esempi che illustrano come usare le chiavi primarie con l'opzione RELY per ottimizzare alcuni tipi comuni di query.
Nota
Le ottimizzazioni delle query associate al comando richiedono che le query vengano eseguite su un calcolo abilitato per Photon. Vedi Che cos'è Photon?. Photon viene eseguito per impostazione predefinita nei warehouse SQL e nelle risorse di calcolo serverless per notebook e flussi di lavoro. Per altre informazioni su Photon, si veda Che cos'è Photon?.
Aggiungere vincoli di chiave primaria
È possibile aggiungere un vincolo di chiave primaria nell'istruzione di creazione della tabella, come nell'esempio seguente o aggiungere un vincolo a una tabella usando la clausola ADD CONSTRAINT.
CREATE TABLE customer (
c_customer_sk int,
PRIMARY KEY (c_customer_sk)
...
)
In questo esempio è c_customer_sk la chiave ID cliente. Il vincolo di chiave primaria specifica che ogni valore ID cliente deve essere univoco nella tabella. Azure Databricks non applica vincoli di chiave. Possono essere convalidati tramite la pipeline di dati esistente o ETL. Consultare Gestire la qualità dei dati con le aspettative della pipeline per informazioni sulle aspettative operative relative alle tabelle di streaming e alle viste materializzate. Per informazioni sull'uso dei vincoli nelle tabelle Delta, vedere Vincoli in Azure Databricks.
Nota
È responsabilità dell'utente verificare se un vincolo è soddisfatto. L'uso di un vincolo non soddisfatto può causare risultati di query non corretti.
Usare RELY per abilitare le ottimizzazioni
Quando si sa che un vincolo di chiave primaria è valido, è possibile abilitare le ottimizzazioni in base al vincolo specificandolo con l'opzione RELY. Consultare la clausola ADD CONSTRAINT per la sintassi completa.
L'opzione RELY consente ad Azure Databricks di sfruttare il vincolo per riscrivere le query. Le ottimizzazioni seguenti possono essere eseguite solo se l'opzione RELY è specificata in una clausola o ADD CONSTRAINT in un'istruzione ALTER TABLE .
Usando ALTER TABLE, è possibile modificare la chiave primaria di una tabella per includere l'opzione RELY , come illustrato nell'esempio seguente.
ALTER TABLE
customer DROP PRIMARY KEY;
ALTER TABLE
customer
ADD
PRIMARY KEY (c_customer_sk) RELY;
Esempi di ottimizzazione
Gli esempi seguenti estendono l'esempio precedente che crea una tabella customer in cui c_customer_sk è un identificatore univoco verificato denominato come PRIMARY KEY con l'opzione RELY specificata.
Esempio 1: Eliminare le aggregazioni non necessarie
Di seguito viene illustrata una query che applica un'operazione DISTINCT a una chiave primaria.
SELECT
DISTINCT c_customer_sk
FROM
customer;
Poiché la colonna c_customer_sk è un vincolo di PRIMARY KEY verificato, tutti i valori nella colonna sono univoci. Quando l'opzione RELY è specificata, Azure Databricks può ottimizzare la query evitando di eseguire l'operazione DISTINCT.
Esempio 2: Eliminare i join non necessari
L'esempio seguente illustra una query in cui Azure Databricks può eliminare un join non necessario.
La query unisce una tabella dei fatti, store_sales con una tabella delle dimensioni customer. Esegue un left outer join, quindi il risultato della query include tutti i record della tabella store_sales e i record corrispondenti della tabella customer. Se nella tabella customer non è presente alcun record corrispondente, il risultato della query mostra un valore NULL per la colonna c_customer_sk.
SELECT
SUM(ss_quantity)
FROM
store_sales ss
LEFT JOIN customer c ON ss.customer_sk = c.c_customer_sk;
Per comprendere il motivo per cui questo join non è necessario, considerare l'istruzione di query. Richiede solo la colonna ss_quantity della tabella store_sales. La tabella customer viene unita alla chiave primaria, quindi ogni riga di store_sales corrisponde al massimo a una riga in customer. Poiché l'operazione è un outer join, tutti i record della tabella store_sales vengono mantenuti, pertanto il join non modifica i dati di tale tabella. L'aggregazione SUM è la stessa indipendentemente dal fatto che queste tabelle siano unite o no.
L'uso del vincolo di chiave primaria con RELY fornisce a Query Optimizer le informazioni necessarie per eliminare il join. La query ottimizzata è simile alla seguente:
SELECT
SUM(ss_quantity)
FROM
store_sales ss
Passaggi successivi
Vedere Visualizzare il diagramma delle relazioni tra entità per informazioni su come esplorare le relazioni tra chiavi primarie e chiavi esterne nell'interfaccia utente di Esplora cataloghi.