INSERT
Crono SQL define tres patrones de carga basados en INSERT:
- INSERT RAW — inserta todos los registros sin clave; el único patrón de carga sin KEY
- INSERT IF NEW — inserta solo los registros que aún no existen en la tabla destino
- INSERT OVERWRITE — recarga completa o parcial de la tabla destino; el único patrón donde la KEY es opcional
Los tres mantienen la auditoría automáticamente. El resto de sentencias de carga también, a excepción de las formas ANSI descritas al final de esta página.
INSERT RAW
Sección titulada «INSERT RAW»INSERT RAW inserta todos los registros devueltos por la consulta en la tabla destino, sin ninguna comprobación de duplicados. Es el único patrón de carga que no admite KEY: cada ejecución añade filas nuevas independientemente de lo que ya exista en destino.
Es útil para tablas de log, registros de eventos o cualquier escenario donde se quiere acumular datos sin gestionar claves.
INSERT RAW INTO dwh.fact_order_detailsSELECT order_details.order_id, order_details.product_id, order_details.unit_price, order_details.quantity, order_details.discountFROM staging.order_detailsINSERT IF NEW
Sección titulada «INSERT IF NEW»INSERT IF NEW inserta únicamente los registros que aún no existen en la tabla destino, identificados por la clave de carga. Los registros ya existentes se ignoran — no se actualizan.
Es útil cuando la tabla destino se carga incrementalmente y los registros históricos no deben modificarse.
INSERT IF NEW INTO dwh.dim_products KEY (product_id)SELECT products.product_id, products.product_name, categories.category_name, suppliers.company_name AS supplierFROM staging.productsINNER JOIN staging.categories USING category_idINNER JOIN staging.suppliers USING supplier_idINSERT OVERWRITE
Sección titulada «INSERT OVERWRITE»INSERT OVERWRITE elimina primero el contenido de la tabla destino y luego inserta los registros de la consulta. Es el patrón de recarga completa.
INSERT OVERWRITE INTO dwh.dim_productsSELECT products.product_id, products.product_name, categories.category_name, suppliers.company_name AS supplierFROM staging.productsINNER JOIN staging.categories USING category_idINNER JOIN staging.suppliers USING supplier_idCHECK SNOWFLAKECuando se especifica una KEY, INSERT OVERWRITE elimina solo los registros que coincidan con los valores de clave devueltos por la consulta y los recarga. Esto permite recargar un subconjunto de datos —por ejemplo, el mes actual— sin tocar el histórico.
INSERT OVERWRITE dwh.fact_orders KEY (order_id)SELECT orders.order_id, orders.customer_id, orders.employee_id, orders.order_date, orders.freightFROM staging.ordersWHERE year(orders.order_date) = 2024 AND month(orders.order_date) = 1Compatibilidad ANSI
Sección titulada «Compatibilidad ANSI»Por compatibilidad, Crono SQL también soporta las formas estándar de la sentencia INSERT.
La forma VALUES permite insertar una o varias filas directamente, sin necesidad de una consulta origen. Es útil para poblar tablas de referencia pequeñas o insertar registros puntuales durante el desarrollo:
INSERT INTO dwh.dim_categories (category_id, category_name, description)VALUES (1, 'Beverages', 'Soft drinks, coffees, teas and beers'), (2, 'Condiments', 'Sweet and savory sauces and spreads'), (3, 'Confections', 'Desserts, candies and sweet breads')La forma con SELECT especifica explícitamente la lista de columnas destino:
INSERT INTO dwh.dim_products (product_id, product_name)SELECT products.product_id, products.product_nameFROM staging.productsLa lista de columnas también puede omitirse. En ese caso, Crono SQL infiere automáticamente los nombres de las columnas destino a partir de los alias del SELECT:
INSERT INTO dwh.dim_productsSELECT products.product_id, products.product_nameFROM staging.productsEstas formas ANSI no mantienen auditoría automática. En un proyecto Crono SQL se recomienda utilizar siempre uno de los tres patrones anteriores.