CHECK SNOWFLAKE
La cláusula CHECK SNOWFLAKE, colocada justo después de todos los JOINs, verifica que las relaciones no pierden ni duplican ningún registro de la tabla del FROM. Se trata de una comprobación fundamental para validar que no estamos cometiendo ninguna equivocación al escribir la consulta y que los datos de origen son coherentes con lo esperado.
SELECT year(sales.OrderDate) AS OrderYear, Customer.CustomerId AS CustomerId, concat(CustomerPerson.FirstName,' ',CustomerPerson.LastName) AS Customer, CustomerPerson.FirstName AS FirstName, CustomerPerson.LastName AS LastName, sum(sales.subtotal) AS AmountFROM staging.SalesOrderHeader salesINNER JOIN staging.customer USING CustomerIdINNER JOIN staging.Person CustomerPerson USING Customer(PersonID BusinessEntityId)CHECK SNOWFLAKEWHERE year(sales.OrderDate)=2012Ver SQL compilado
IF EXISTS ( SELECT count(*) FROM staging.SalesOrderHeader sales LEFT JOIN staging.customer ON (sales.CustomerId=customer.CustomerId) LEFT JOIN staging.Person CustomerPerson ON (Customer.PersonID=CustomerPerson.BusinessEntityId) HAVING count(CASE WHEN customer.CustomerId IS NOT NULL AND CustomerPerson.BusinessEntityId IS NOT NULL THEN 1 END) <> (SELECT count(*) FROM staging.SalesOrderHeader sales)) THROW 50001,'Las relaciones de esta consulta pierden o duplican registros de sales.',1
SELECT year(sales.OrderDate) AS OrderYear, Customer.CustomerId AS CustomerId, concat(CustomerPerson.FirstName,' ',CustomerPerson.LastName) AS Customer, CustomerPerson.FirstName AS FirstName, CustomerPerson.LastName AS LastName, sum(sales.subtotal) AS AmountFROM staging.SalesOrderHeader salesINNER JOIN staging.customer ON (sales.CustomerId=customer.CustomerId)INNER JOIN staging.Person CustomerPerson ON (Customer.PersonID=CustomerPerson.BusinessEntityId)WHERE year(sales.OrderDate)=2012GROUP BY year(sales.OrderDate), Customer.CustomerId, concat(CustomerPerson.FirstName,' ',CustomerPerson.LastName), CustomerPerson.FirstName, CustomerPerson.LastNameLa cláusula CHECK SNOWFLAKE verifica que todas las ventas correspondan a un cliente y que ese cliente exista en la tabla de personas. Si no fuera así, la consulta no se ejecutaría y devolvería un error.