Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.