Publicado: 24 de julio de 2024
por Xinyi Yu, Justin Talbot y Serge Rielau
Databricks se complace en anunciar la Disponibilidad General (GA) de las restricciones de Clave Primaria (PK) y Clave Externa (FK), a partir de Databricks Runtime 15.2 y Databricks SQL 2024.30. Esta versión sigue a una vista previa pública de gran éxito, adoptada por cientos de clientes activos semanales, y representa un hito importante en la mejora de la integridad de los datos y la gestión de datos relacionales dentro del Lakehouse.
Además, Databricks ahora puede usar estas restricciones para optimizar consultas y eliminar operaciones innecesarias del plan de consulta, ofreciendo un rendimiento mucho más rápido.
Las Claves Primarias (PK) y Claves Externas (FK) son elementos esenciales en las bases de datos relacionales, actuando como bloques de construcción fundamentales para el modelado de datos. Proporcionan información sobre las relaciones de datos en el esquema a usuarios, herramientas y aplicaciones; y permiten optimizaciones que aprovechan las restricciones para acelerar las consultas. Las claves primarias y externas ya están disponibles para sus tablas de Delta Lake alojadas en Unity Catalog.
Puede definir restricciones al crear una tabla:
En el ejemplo anterior, definimos una restricción de clave primaria en la columna UserID. Databricks también admite restricciones en grupos de columnas.
También puede modificar tablas de Delta existentes para agregar o eliminar restricciones:
Aquí creamos la clave primaria llamada products_pk en la columna no nula ProductID en una tabla existente. Para ejecutar esta operación con éxito, debe ser el propietario de la tabla. Tenga en cuenta que los nombres de las restricciones deben ser únicos dentro del esquema.
El comando posterior elimina la clave primaria especificando el nombre.
El mismo proceso se aplica a las claves externas. La siguiente tabla define dos claves externas al momento de la creación de la tabla:
Consulte la documentación sobre las sentencias CREATE TABLE y ALTER TABLE para obtener más detalles sobre la sintaxis y las operaciones relacionadas con las restricciones.
Las restricciones de clave primaria y clave externa no se aplican en el motor de Databricks, pero pueden ser útiles para indicar una relación de integridad de datos que se pretende que sea verdadera. Databricks puede aplicar restricciones de clave primaria de forma upstream como parte del pipeline de ingesta. Consulte Gestión de la calidad de los datos con Delta Live Tables para obtener más información sobre las restricciones aplicadas. Databricks también admite restricciones NOT NULL y CHECK aplicadas (consulte la documentación de Restricciones para obtener más información).
Herramientas y aplicaciones como la última versión de Tableau y PowerBI pueden importar y utilizar automáticamente sus relaciones de clave primaria y clave externa desde Databricks a través de conectores JDBC y ODBC.
Hay varias formas de ver las restricciones de clave primaria y clave externa definidas en la tabla. También puede usar comandos SQL para ver información de restricciones con el comando DESCRIBE TABLE EXTENDED:
También puede ver la información de restricciones a través de Catalog Explorer:
Cada columna de clave primaria y clave externa tiene un pequeño icono de llave junto a su nombre.
Y puede visualizar la información de claves primarias y externas y las relaciones entre tablas con el Diagrama de Relación de Entidades en Catalog Explorer. A continuación, se muestra un ejemplo de una tabla purchases que hace referencia a dos tablas, users y products:
Las siguientes tablas de INFORMATION_SCHEMA también proporcionan información de restricciones:
TABLE_CONSTRAINTS: Describe metadatos para todas las restricciones de clave primaria y clave externa dentro del catálogo.KEY_COLUMN_USAGE: Enumera las columnas de las restricciones de clave primaria o clave externa dentro del catálogo.CONSTRAINT_TABLE_USAGE: Describe las restricciones que hacen referencia a tablas en el catálogo.CONSTRAINT_COLUMN_USAGE: Describe las restricciones que hacen referencia a columnas en el catálogo.REFERENTIAL_CONSTRAINTS: Describe las restricciones referenciales (claves externas) definidas en el catálogo.Si sabe que la restricción de clave primaria es válida (por ejemplo, porque su pipeline de datos o trabajo ETL la aplica), puede habilitar optimizaciones basadas en la restricción especificándola con la opción RELY, como:
Usar la opción RELY permite a Databricks optimizar consultas de maneras que dependen de la validez de la restricción, ya que garantiza que se mantiene la integridad de los datos. Tenga cuidado aquí, ya que si una restricción se marca como RELY pero los datos violan la restricción, sus consultas pueden devolver resultados incorrectos.
Cuando no especifica la opción RELY para una restricción, el valor predeterminado es NORELY, en cuyo caso las restricciones aún pueden usarse para fines informativos o estadísticos, pero las consultas no dependerán de ellas para ejecutarse correctamente.
La opción RELY y las optimizaciones que la utilizan están actualmente disponibles para claves primarias, y próximamente también estarán disponibles para claves externas.
Puede modificar la clave primaria de una tabla para cambiar si es RELY o NORELY usando ALTER TABLE, por ejemplo:
Una optimización simple que podemos hacer con las restricciones de clave primaria RELY es eliminar agregaciones innecesarias. Por ejemplo, en una consulta que aplica una operación distinct sobre una tabla con una clave primaria usando RELY:
Podemos eliminar la operación DISTINCT innecesaria:
Como puede ver, esta consulta depende de la validez de la restricción de clave primaria RELY; si hay IDs de cliente duplicados en la tabla de clientes, la consulta transformada devolverá resultados duplicados incorrectos. Usted es responsable de aplicar la validez de la restricción si establece la opción RELY.
Si la clave primaria es NORELY (el valor predeterminado), el optimizador no eliminará la operación DISTINCT de la consulta. Entonces puede ejecutarse más lentamente, pero siempre devuelve resultados correctos, incluso si hay duplicados. Si la clave primaria es RELY, Databricks puede eliminar la operación DISTINCT, lo que puede acelerar enormemente la consulta, aproximadamente 2 veces en el ejemplo anterior.
Otra optimización muy útil que podemos realizar con las claves primarias RELY es eliminar uniones innecesarias. Si una consulta une una tabla que no se referencia en ningún otro lugar excepto en la condición de unión, el optimizador puede determinar que la unión es innecesaria y eliminarla del plan de consulta.
Para dar un ejemplo, supongamos que tenemos una consulta que une dos tablas, store_sales y customer, unidas por la clave primaria de la tabla de clientes PRIMARY KEY (c_customer_sk) RELY.
Si no tuviéramos la clave primaria, cada fila de store_sales podría coincidir potencialmente con varias filas en customer, y necesitaríamos ejecutar la unión para calcular el valor SUM correcto. Pero debido a que la tabla customer se une por su clave primaria, sabemos que la unión generará una fila por cada fila de store_sales.
Por lo tanto, la consulta en realidad solo necesita la columna ss_quantity de la tabla de hechos store_sales. En consecuencia, el optimizador de consultas puede eliminar por completo la unión de la consulta, transformándola en:
Esto se ejecuta mucho más rápido al evitar toda la unión. En este ejemplo, observamos que la optimización acelera la consulta de 1.5 minutos a 6 segundos!. ¡Y los beneficios pueden ser aún mayores cuando la unión involucra muchas tablas que se pueden eliminar!
Puede que te preguntes, ¿por qué alguien ejecutaría una consulta como esta? ¡En realidad es mucho más común de lo que piensas! Una razón común es que los usuarios crean vistas que unen varias tablas, como unir muchas tablas de hechos y dimensiones. Escriben consultas sobre estas vistas que a menudo utilizan columnas de solo algunas de las tablas, no de todas, y así el optimizador puede eliminar las uniones contra las tablas que no son necesarias en cada consulta. Este patrón también es común en muchas herramientas de Business Intelligence (BI), que a menudo generan consultas que unen muchas tablas en un esquema, incluso cuando una consulta solo utiliza columnas de algunas de las tablas.
Desde su vista previa pública, más de 2600 clientes de Databricks han utilizado restricciones de clave primaria y clave externa. Hoy, nos complace anunciar la disponibilidad general de esta característica, marcando una nueva etapa en nuestro compromiso de mejorar la gestión y la integridad de los datos en Databricks.
Además, Databricks ahora aprovecha las restricciones de clave con la opción RELY para optimizar consultas, como la eliminación de agregaciones y uniones innecesarias, lo que resulta en un rendimiento de consulta mucho más rápido.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
