Otimização de consultas usando restrições de chave primária
Primário key restrições, que capturam relacionamentos entre campos em tabelas, podem ajudar os usuários e as ferramentas a entender os relacionamentos nos dados. Este artigo contém exemplos que mostram como o senhor pode usar a chave primária com a opção RELY
para otimizar alguns tipos comuns de consultas.
Adicionar restrições de chave primária
O senhor pode adicionar uma restrição primária key na instrução de criação da tabela, como no exemplo a seguir, ou adicionar uma restrição a uma tabela usando a cláusula ADD CONSTRAINT
.
CREATE TABLE customer (
c_customer_sk int,
PRIMARY KEY (c_customer_sk)
...
)
Neste exemplo, c_customer_sk
é o ID do cliente key. A restrição primária key especifica que cada valor de ID de cliente deve ser exclusivo na tabela. Databricks não impõe as restrições do site key. Eles podem ser validados por meio de seu pipeline de dados ou ETL existente. Consulte gerenciar a qualidade dos dados com Delta Live Tables para saber mais sobre as expectativas de trabalho em tabelas de transmissão e visualizações materializadas. Consulte Restrições em Databricks para saber mais sobre como trabalhar com restrições em tabelas Delta.
Observação
É responsabilidade do usuário verificar se uma restrição está satisfeita. Confiar em uma restrição que não está satisfeita pode levar a resultados de consulta incorretos.
Use RELY
para ativar as otimizações
Quando o senhor sabe que uma restrição key primária é válida, pode ativar as otimizações com base na restrição especificando-a com a opção RELY
. Consulte a cláusula ADD CONSTRAINT para obter a sintaxe completa.
A opção RELY
permite que o Databricks explore a restrição para reescrever as consultas. As otimizações a seguir só podem ser executadas se a opção RELY
for especificada em uma cláusula ADD CONSTRAINT
ou instrução ALTER TABLE
.
Usando ALTER TABLE
, o senhor pode modificar o key primário de uma tabela para incluir a opção RELY
, conforme mostrado no exemplo a seguir.
ALTER TABLE
customer DROP PRIMARY KEY;
ALTER TABLE
customer
ADD
PRIMARY KEY (c_customer_sk) RELY;
Exemplos de otimização
Os exemplos a seguir estendem o exemplo anterior que cria uma tabela customer
em que c_customer_sk
é um identificador exclusivo verificado nomeado como PRIMARY KEY
com a opção RELY
especificada.
Exemplo 1: Eliminar agregações desnecessárias
A seguir, é mostrada uma consulta que aplica DISTINCT
operações a um primário key.
SELECT
DISTINCT c_customer_sk
FROM
customer;
Como a coluna c_customer_sk
é uma restrição PRIMARY KEY
verificada, todos os valores da coluna são exclusivos. Se a opção RELY
for especificada, o site Databricks poderá otimizar a consulta não executando as operações DISTINCT
.
Exemplo 2: Eliminar junções desnecessárias
O exemplo a seguir mostra uma consulta em que Databricks pode eliminar um join desnecessário.
A consulta une uma tabela de fatos, store_sales
, com uma tabela de dimensões, customer
. Ele executa um left outer join, de modo que o resultado da consulta inclui todos os registros da tabela store_sales
e os registros correspondentes da tabela customer
. Se não houver nenhum registro correspondente na tabela customer
, o resultado da consulta mostrará um valor NULL
para a coluna c_customer_sk
.
SELECT
SUM(ss_quantity)
FROM
store_sales ss
LEFT JOIN customer c ON ss.customer_sk = c.c_customer_sk;
Para entender por que esse join é desnecessário, considere a declaração de consulta. Ele requer apenas a coluna ss_quantity
da tabela store_sales
. A tabela customer
é unida em sua tabela primária key, de modo que cada linha de store_sales
corresponde a, no máximo, uma linha em customer
. Como a operação é um outer join, todos os registros da tabela store_sales
são preservados, portanto, o join não altera nenhum dado dessa tabela. A agregação SUM
é a mesma, independentemente de essas tabelas estarem unidas ou não.
O uso da restrição key primária com RELY
fornece ao otimizador de consultas as informações necessárias para eliminar o join. A consulta otimizada é mais ou menos assim:
SELECT
SUM(ss_quantity)
FROM
store_sales ss
Próximos passos
Consulte view the Entity Relationship Diagram para saber como explorar os relacionamentos primários key e externos key na UI do Catalog Explorer.