Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las restricciones de clave principal, que capturan relaciones entre campos de tablas, pueden ayudar a los usuarios y a las herramientas a comprender las relaciones de los datos. Este artículo contiene ejemplos que muestran cómo puede usar claves principales con la opción RELY
para optimizar algunos tipos comunes de consultas.
Nota
Las optimizaciones de consultas asociadas al comando RELY
requieren que las consultas se ejecuten en un cómputo con Photon habilitado. Consulte ¿Qué es Photon? Photon se ejecuta de forma predeterminada en almacenes de SQL y proceso sin servidor para cuadernos y flujos de trabajo. Para obtener más información sobre Photon, consulte ¿Qué es Photon?.
:::
:::
Adición de restricciones de clave principal
Puede agregar una restricción de clave principal en la instrucción de creación de tablas, como en el ejemplo siguiente, o agregar una restricción a una tabla mediante la cláusula ADD CONSTRAINT
.
CREATE TABLE customer (
c_customer_sk int,
PRIMARY KEY (c_customer_sk)
...
)
En este ejemplo, c_customer_sk
es la clave de identificador de cliente. La restricción de clave principal especifica que cada valor de identificador de cliente debe ser único en la tabla. Azure Databricks no aplica restricciones de clave. Se pueden validar a través de la canalización de datos existente o ETL. Consulte Administración de la calidad de los datos con expectativas de canalización para obtener información sobre las expectativas de trabajo en tablas de streaming y vistas materializadas. Consulte Restricciones en Azure Databricks para obtener información sobre cómo trabajar con restricciones en tablas Delta.
Nota
Es responsabilidad del usuario comprobar si se cumple una restricción. Confiar en una restricción que no se cumple puede dar lugar a resultados de consulta incorrectos.
Uso de RELY
para habilitar optimizaciones
Cuando sepa que una restricción de clave principal es válida, puede habilitar optimizaciones basadas en la restricción especificándolo con la opción RELY
. Consulte ADD CONSTRAINT cláusula para obtener la sintaxis completa.
La opción RELY
permite a Azure Databricks aprovechar la restricción para volver a escribir consultas. Las siguientes optimizaciones solo pueden realizarse si la opción RELY
se especifica en una cláusula ADD CONSTRAINT
o en una instrucción ALTER TABLE
.
Con ALTER TABLE
, puede modificar la clave principal de una tabla para incluir la RELY
opción , como se muestra en el ejemplo siguiente.
ALTER TABLE
customer DROP PRIMARY KEY;
ALTER TABLE
customer
ADD
PRIMARY KEY (c_customer_sk) RELY;
Ejemplos de optimización
Los siguientes ejemplos amplían el ejemplo anterior que crea una tabla customer
donde c_customer_sk
es un identificador único verificado denominado como PRIMARY KEY
con la opción RELY
especificada.
Ejemplo 1: Eliminación de agregaciones innecesarias
A continuación se muestra una consulta que aplica una operación DISTINCT
a una clave principal.
SELECT
DISTINCT c_customer_sk
FROM
customer;
Dado que la columna c_customer_sk
es una restricción PRIMARY KEY
verificada, todos los valores de la columna son únicos. Si se especifica la opción RELY
, Azure Databricks puede optimizar la consulta al no realizar la operación DISTINCT
.
Ejemplo 2: Eliminación de combinaciones innecesarias
En el ejemplo siguiente se muestra una consulta en la que Azure Databricks puede eliminar una combinación innecesaria.
La consulta combina una tabla de hechos, store_sales
, con una tabla de dimensiones, customer
. Realiza una combinación externa izquierda, por lo que el resultado de la consulta incluye todos los registros de la tabla store_sales
y los registros coincidentes de la tabla customer
. Si no hay ningún registro coincidente en la tabla customer
, el resultado de la consulta muestra un valor NULL
para la columna 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 qué esta combinación es innecesaria, considere la instrucción de consulta. Solo requiere la columna ss_quantity
de la tabla store_sales
. La tabla customer
está unida por su clave principal, por lo que cada fila de store_sales
coincide como máximo con una fila de customer
. Como la operación es una combinación externa, se conservan todos los registros de la tabla store_sales
, por lo que la combinación no cambia ningún dato de esa tabla. La agregación SUM
es la misma tanto si estas tablas están unidas como si no.
El uso de la restricción de clave principal con RELY
proporciona al optimizador de consultas la información que necesita para eliminar la combinación. La consulta optimizada tiene un aspecto más similar al siguiente:
SELECT
SUM(ss_quantity)
FROM
store_sales ss
Pasos siguientes
Consulte Vista del diagrama de relación de entidades para aprender a explorar las relaciones de clave principal y clave externa en la interfaz de usuario del Explorador de catálogos.