Compartir a través de


Optimización de consultas mediante restricciones de clave principal

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.