Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As restrições de chave primária, que capturam relações entre campos em tabelas, podem ajudar os usuários e as ferramentas a entender as relações em seus dados. Este artigo contém exemplos que mostram como você pode usar chaves primárias com a opção RELY
para otimizar alguns tipos comuns de consultas.
Observação
As otimizações de consulta associadas ao RELY
comando exigem que as consultas sejam executadas na computação habilitada para Photon. Veja O que é Photon?. O Photon é executado por padrão em armazéns SQL e computação sem servidor para blocos de anotações e fluxos de trabalho. Para saber mais sobre Photon, consulte O que é Photon?.
:::
:::
Adicionar restrições de chave primária
Você pode adicionar uma restrição de chave primária em sua instrução de criação de 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
é a chave de ID do cliente. A restrição de chave primária especifica que cada valor de ID do cliente deve ser exclusivo na tabela. O Azure Databricks não impõe restrições de chave. Eles podem ser validados por meio de seu pipeline de dados existente ou ETL. Consulte Gerencie a qualidade dos dados com as expectativas do pipeline para saber mais sobre as expectativas de trabalho em tabelas de streaming e visualizações materializadas. Consulte Restrições no Azure Databricks para saber mais sobre como trabalhar com restrições em tabelas Delta.
Observação
É da responsabilidade do utilizador verificar se uma restrição está satisfeita. Confiar em uma restrição que não é satisfeita pode levar a resultados de consulta incorretos.
Use RELY
para habilitar otimizações
Quando você souber que uma restrição de chave primária é válida, poderá habilitar otimizações com base na restrição especificando-a com a opção RELY
. Consulte ADD CONSTRAINT cláusula para obter a sintaxe completa.
A opção RELY
permite que o Azure Databricks explore a restrição para reescrever consultas. As otimizações a seguir só podem ser executadas se a RELY
opção for especificada em uma ADD CONSTRAINT
cláusula ou ALTER TABLE
instrução.
Usando ALTER TABLE
, pode modificar a chave primária 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
onde c_customer_sk
é um identificador exclusivo verificado nomeado como um PRIMARY KEY
com a opção RELY
especificada.
Exemplo 1: Eliminar agregações desnecessárias
A seguir mostra uma consulta que aplica uma DISTINCT
operação a uma chave primária.
SELECT
DISTINCT c_customer_sk
FROM
customer;
Como a coluna c_customer_sk
é uma restrição de PRIMARY KEY
verificada, todos os valores na coluna são exclusivos. Com a opção RELY
especificada, o Azure Databricks pode otimizar a consulta não executando a operação de DISTINCT
.
Exemplo 2: Eliminar junções desnecessárias
O exemplo a seguir mostra uma consulta em que o Azure Databricks pode eliminar uma associação desnecessária.
A consulta une uma tabela de fatos, store_sales
com uma tabela de dimensão, customer
. Ele executa uma junção externa esquerda, portanto, 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 de 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 esta junção é desnecessária, considere a declaração de consulta. Requer apenas a coluna ss_quantity
da tabela store_sales
. A tabela customer
é ligada na sua chave primária, de modo que cada linha de store_sales
corresponde a, no máximo, uma linha em customer
. Como a operação é uma junção externa, todos os registros da tabela store_sales
são preservados, portanto, a junção não altera nenhum dado dessa tabela. A agregação SUM
é a mesma, quer estas tabelas sejam ou não unidas.
O uso da restrição de chave primária com o RELY
fornece ao otimizador de consulta as informações necessárias para eliminar a associação. A consulta otimizada tem mais esta aparência:
SELECT
SUM(ss_quantity)
FROM
store_sales ss
Próximos passos
Consulte Exibir o Diagrama de Relacionamento de Entidade para saber como explorar relações de chave primária e chave estrangeira na interface do usuário do Gerenciador de Catálogo.