CTAS vs INSERT…. SELECT en Microsoft Fabric Data Warehouse:¿Cuál elegir para maximizar el rendimiento?

Una de las preguntas más habituales cuando se diseñan procesos de carga en Microsoft Fabric Data Warehouse es si resulta más eficiente utilizar un CREATE TABLE AS SELECT (CTAS) o un INSERT INTO…SELECT para copiar datos entre tablas. La respuesta corta es: depende de si la tabla destino ya existe y del objetivo de la carga. Sin embargo, entender las diferencias puede marcar una gran diferencia en tiempos de ejecución cuando trabajamos con cientos de millones de registros.

¿Qué es CTAS?

CTAS (Create Table As Select) permite crear una nueva tabla a partir del resultado de una consulta:

SQL
CREATE TABLE dbo.FactSales_New
AS
SELECT *
FROM dbo.FactSales_Stage;

Según Microsoft, Warehouse en Fabric ejecuta las operaciones CTAS de forma paralela, convirtiéndolo en un mecanismo altamente eficiente para transformaciones de datos y creación de nuevas tablas.

La principal ventaja es que el motor puede optimizar simultáneamente:

  • La creación física de la tabla.
  • La distribución de los datos.
  • La escritura paralela.
  • La generación de metadatos.

Todo ello en una única operación.

¿Qué es INSERT… SELECT?

Por el contrario, cuando la tabla destino ya existe, normalmente se utiliza:

SQL
INSERT INTO dbo.FactSales
SELECT *
FROM dbo.FactSales_Stage;

Este patrón es imprescindible cuando:

  • La tabla ya forma parte del modelo dimensional.
  • Existen permisos asignados.
  • Hay dependencias con procesos downstream.
  • Necesitamos conservar la estructura existente.

Microsoft clasifica esta aproximación como una de las opciones estándar para ingerir datos en tablas existentes utilizando T-SQL ya que los INSERT masivos están optimizados.

La diferencia fundamental

El diferencial clave es que CTAS crea una tabla nueva, mientras que INSERT carga datos en una tabla existente. Por lo tanto, si la tabla destino ya está creada, técnicamente no se está comparando exactamente «peras con peras»:

OperaciónCrea tablaInserta datosOptimización paralela
CTAS
INSERT…. SELECTNoMenos optimizada
COPY INTONoMáxima para ficheros

La propia documentación de Fabric destaca CTAS para generación de nuevas tablas derivadas de otras tablas, Lakehouses o incluso ficheros externos mediante OPENROWSET.

¿Por qué suele ser más rápido CTAS?

Cuando se analiza el comportamiento de los motores MPP (Massively Parallel Processing) que inspiran Fabric Warehouse, la principal ventaja de CTAS es que el motor no necesita gestionar una estructura preexistente, por lo que durante la operación puede:

  • Crear simultáneamente almacenamiento y metadatos
  • Escribir directamente en la estructura óptima
  • Distribuir la carga entre los nodos de ejecución
  • Aprovechar procesos masivos de escritura paralela

Microsoft indica explícitamente que CTAS ejecuta la ingestión «in parallel», convirtiéndolo en una opción altamente eficiente para constuir tablas derivadas.

Escenarios reales

Escenario 1: Regeneración completa de una tabla

El sistema cada noche necesita reconstruir una tabla de hechos de algo más de 500 millones de registros. Para ello, muchos equipos implementan:

SQL
TRUNCATE TABLE dbo.FactSales;
INSERT INTO dbo.FactSales
SELECT ...

Sin embargo, una alternativa frecuentemente más eficaz consiste en:

SQL
CREATE TABLE dbo.FactSales_New
AS
SELECT ...

y posteriormente reemplazar la tabla anterior.

NOTA: Este patrón minimiza el tiempo de carga y permite incluso implementar estrategias de rollback más sencillas.

Escenario 2: Carga incremental

Si únicamente se deben añadir los pedidos generados durante el día:

SQL
INSERT INTO dbo.FactSales
SELECT *
FROM dbo.StagingSales
WHERE LoadDate = CURRENT_DATE;

En este caso CTAS no aporta ventajas ya que se necesita conservar la tabla de destino.

Escenario 3: Creación de agregados

Para crear una tabla analítica:

SQL
CREATE TABLE dbo.CustomerRevenue
AS
SELECT
CustomerKey,
SUM(Revenue) AS TotalRevenue
FROM dbo.FactSales
GROUP BY CustomerKey;

Este es precisamente uno de los casos de uso recomendados por Microsoft para CTAS.

¿Y qué ocurre con COPY INTO?

Es la tercera opción que mucha veces pasa desapercibida.

Cuando el origen son ficheros CSV, Parquet o datos almacenados en OneLake, Microsoft recomienda utilizar:

SQL
COPY INTO dbo.FactSales
FROM '...'

Es el mecanismo que proporciona mayor throughout de ingestión para cargas masivas desde almacenamiento. Por lo tanto:

  • COPY INTO para cargar datos desde ficheros
  • CTAS para generar nuevas tablas a partir de consultas
  • INSERT…. SELECT para alimentar tablas existentes

Recomendación práctica para arquitectos de datos

En proyectos de modern data platform donde se utilizan Fabric Data Warehouse, Databricks o Synapse, suelo aplicar la siguiente regla:

Utiliza CTAS cuando:

✅ Vas a crear una tabla nueva.
✅ Necesitas transformar grandes volúmenes de datos.
✅ Vas a reconstruir una tabla completa.
✅ Buscas el máximo rendimiento posible.

Utiliza INSERT…SELECT cuando:

✅ La tabla ya existe.
✅ Realizas cargas incrementales.
✅ Debes conservar permisos y dependencias.
✅ La tabla forma parte del modelo productivo.

Utiliza COPY INTO cuando:

✅ El origen son ficheros.
✅ Estás realizando ingestiones masivas en bruto.
✅ El objetivo es maximizar throughput de carga.

Conclusión

Aunque ambas opciones pueden copiar exactamente los mismo datos, no están pensadas para el mismo propósito. CTAS suele ofrecer el mejor rendimiento cuando necesitamos crear una tabla nueva, ya que Fabric ejecuta la carga de forma paralela y optimizada para este escenario. Por el contrario, INSERT…SELECT sigue siendo la opción correcta cuando la tabla destino ya existe y queremos conservar su estructura y dependencias.

La recomendación práctica es sencilla: si tu proceso reconstruye completamente una tabla muy grande, considera utilizar un patrón CTAS + swap. Si realizas cargas incrementales sobre tablas existentes, mantén INSERT…SELECT. Y si los datos proceden de ficheros, evalúa COPY INTO, que actualmente es la opción de mayor rendimiento para ingesta masiva en Fabric Data Warehouse.

Referencias

Documentación oficial

Microsoft. (2026). Ingest data into the warehouse. Microsoft Learn. https://learn.microsoft.com/en-us/fabric/data-warehouse/ingest-data

Microsoft. (2026). Ingest data into your warehouse using Transact-SQL. Microsoft Learn. https://learn.microsoft.com/en-us/fabric/data-warehouse/ingest-data-tsql

Fuentes complementarias

Drive Data Science. (s.f.). Fabric warehouse advanced: COPY INTO, CTAS, dynamic management views, query insights, visual query editor, SSMS connectivity, and T-SQL with notebooks. Drive Data Science. https://www.drivedatascience.com/fabric-warehouse-advanced-copy-into-ctas-dmv-ssms-optimization/

Foto de portada gracias a Ann H: https://www.pexels.com/es-es/foto/zapatos-pavimento-zapatillas-flechas-2646530/

Publicado por alb3rtoalonso

Soy un enamorado del poder de los datos. Entusiasta de la mejora y formación continua.

Deja un comentario