Curso
Cuando trabajes con Snowflake, una de las operaciones fundamentales que realizarás será insertar datos en tablas. La sentencia INSERT INTO
te permite añadir nuevos registros a una tabla, ya sea introduciendo valores manualmente, insertando varias filas o extrayendo datos de otras tablas.
En esta guía, te guiaré a través de la sintaxis, los distintos casos de uso, las mejores prácticas y los pasos habituales para la resolución de problemas en el uso eficaz de INSERT INTO
en Snowflake.
¿Qué es el comando INSERT INTO en Snowflake?
Antes de hablar de la sintaxis, primero debemos comprender la finalidad de INSERT INTO
en Snowflake y sus diferentes casos de uso.
Añadir datos a una base de datos es una parte fundamental de su gestión. La sentencia INSERT INTO
en Snowflake se utiliza para añadir nuevas filas de datos a una tabla. Puede insertar filas individuales, filas múltiples o datos masivos de otra tabla. Puedes insertar datos escribiendo manualmente cada valor de una fila o conjunto de filas concreto, o utilizar una sentencia SQL para cargar datos en bloque desde otras fuentes de datos.
> Aunque INSERT INTO
es un comando fundamental, asegurarse de que entiendes Snowflake y su arquitectura es un buen punto de partida. ¡Consulta teste tutorial sobre Snowflake para repasar los fundamentos!
Casos prácticos de INSERT INTO
Éstos son algunos de los casos de uso habituales de la cláusula INSERT INTO
.
- Añadir manualmente nuevos registros a una tabla.
- Inserción masiva de varias filas en una sola consulta.
- Transferir datos de una tabla a otra.
- Añadir nuevos datos a un conjunto de datos existente.
- Rellenar una tabla a partir de los resultados de una consulta
SELECT
.
> Aprender esta cláusula es gr¡comer también para las entrevistas Snowflake!
Sintaxis de INSERT INTO en Snowflake
Ahora entramos en la sintaxis propiamente dicha. Primero vamos a hablar del uso más sencillo de INSERT INTO
: simplemente añadir datos a una fila introduciendo manualmente los valores.
La sintaxis básica de INSERT INTO
es la siguiente:
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
Escribes la cláusula INSERT INTO
seguida de table_name
, que es donde vamos a insertar los datos. Para concretar el orden de los datos, podemos especificar los nombres de las columnas que siguen entre paréntesis como (column1, column2, column3)
. La parte final es escribir el VALUES (value1, value2, value3)
, que se insertará en las columnas respectivas.
Insertar datos sin especificar los nombres de las columnas
Si omites los nombres de las columnas, Snowflake asume que los valores se proporcionan en el mismo orden que el esquema de la tabla. Es decir, se supondrá que el primer valor corresponde a la primera columna de la tabla, y así sucesivamente.
INSERT INTO table_name
VALUES (value1, value2, value3);
Con este enfoque, debes asegurarte de que los valores están en el mismo orden que las columnas, o puedes encontrarte con algunos problemas con los tipos de datos o la coherencia de los datos.
Uso avanzado de INSERT INTO en Snowflake
Algunos de los usos más avanzados de INSERT INTO
son insertar una única fila de una tabla diferente, insertar varias filas o insertar datos con condiciones. Es una forma útil de añadir datos a una tabla o de archivar datos en una tabla aparte.
Utilizar INSERT INTO con varias filas
En lugar de insertar una fila cada vez, puedes insertar varias filas en una sola sentencia:
INSERT INTO employees (id, name, department)
VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'Finance'),
(3, 'Charlie', 'IT');
Este enfoque reduce la sobrecarga de ejecución de la consulta y mejora el rendimiento. Observa que cada fila está completamente encerrada entre paréntesis y seguida de una coma. No hacerlo puede dar lugar a errores.
Insertar datos de otra tabla
Para copiar datos de una tabla a otra, utiliza INSERT INTO
con una sentencia SELECT
:
INSERT INTO target_table (column1, column2)
SELECT
column1,
column2
FROM source_table ;
Esto es útil para archivar datos, transformar datos antes de insertarlos o añadir registros filtrados. Si los datos de origen tienen el mismo orden de columnas que los de destino, puedes omitir el nombre de las columnas junto a target_table
.
Inserciones condicionales
Puedes insertar datos basándote en una condición de tu sentencia SELECT
, de modo que no estés copiando una tabla entera.
INSERT INTO high_salary_employees (id, name, salary)
SELECT
id,
name,
salary
FROM employees
WHERE salary > 100000;
Esto garantiza que sólo se inserten en la nueva tabla los empleados que cumplan la condición. Hacerlo ayuda a mantener la integridad de los datos y reduce la sobrecarga computacional y de almacenamiento.
Buenas prácticas para utilizar INSERT INTO en Snowflake
Éstas son algunas de las mejores prácticas al utilizar INSERT INTO
en Snowflake. Esto incluye utilizar sentencias más eficientes como MERGE
y validar los datos antes de insertarlos.
Utilizar MERGE en lugar de INSERT INTO para upserts
Si necesitas insertar nuevos registros pero actualizar los existentes, MERGE
es una opción mejor porque puede hacer coincidir los datos existentes.
Busca dónde las filas actuales cumplen un determinado criterio (por ejemplo, un ID de empleado existente) y puede actualizar valores específicos en la tabla de destino utilizando una tabla de origen. Cuando no haya ninguna coincidencia, entonces insertará los nuevos datos. Se trata de un concepto conocido como "upsert" (actualizar e insertar).
Mira a continuación un ejemplo de cómo utilizar MERGE
:
MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET t.salary = s.salary
WHEN NOT MATCHED THEN
INSERT (id, name, salary) VALUES (s.id, s.name, s.salary);
> La declaración MERGE
se está convirtiendo rápidamente en un procedimiento estándar y es una parte kparte de las certificaciones Snowflake.
Inserciones por lotes y rendimiento
Para mejorar el rendimiento al insertar grandes conjuntos de datos, intenta centrarte en realizar inserciones por lotes. Esto reduce la sobrecarga al no tener que crear nuevas conexiones con cada carga y mejora el rendimiento general. Aquí tienes algunos consejos para la inserción por lotes:
- Utiliza inserciones masivas en lugar de insertar fila a fila.
- Utiliza
COPY INTO
cuando cargues grandes datos de fuentes externas. Esto es útil cuando te conectas a algo como S3. - Evita insertar datos dentro de bucles en los guiones; el procesamiento por lotes es más eficaz. Así que termina el bucle, almacena los datos como una única fuente de datos y luego carga toda esa fuente de datos de una vez.
Validación de datos antes de insertar
Antes de insertar datos, valídalos. Puede causar muchos problemas, o directamente el fracaso, si tus datos no están validados. Piensa en cómo podrían utilizarse los datos aguas abajo y en el aspecto que deberían tener tus datos insertados. He aquí algunas cosas clave que debes tener en cuenta:
- Los tipos de datos coinciden con las definiciones de columna.
- Los campos obligatorios no son nulos.
- No hay claves primarias duplicadas ni violaciones de restricciones únicas.
Tratamiento de errores con INSERT INTO en Snowflake
Como ya se ha dicho, puede haber algún error ocasional al insertar datos. Aquí tienes algunos consejos sobre cómo hacer frente a los errores más comunes.
Lidiando con llaves duplicadas
El propio Snowflake no aplica necesariamente restricciones únicas, lo que significa que es posible insertar datos duplicados.
Si te preocupan las claves duplicadas, puede que sea mejor plantearte gestionarlo con MERGE
o ON CONFLICT
(si es compatible). Por último, también puedes añadir una condición a tu inserción utilizando WHERE
para excluir todo lo que exista en la tabla de destino.
INSERT INTO employees (id, name)
SELECT id, name FROM new_employees
WHERE id NOT IN (SELECT id FROM employees);
Manejar valores NULL
Asegúrate de que las columnas anulables permiten valores NULL o proporcionan valores por defecto. Snowflake hace cumplir cualquier restricción de columna NOT NULL, por lo que si tienes datos NULL en una columna con esa restricción, tu inserción fallará. Lo más importante aquí es comprender tus datos, dónde se permite que existan NULL y dónde no.
Solución de problemas comunes con INSERT INTO
Otros problemas pueden reducirse a tipos de datos o problemas de permisos. Discutiremos brevemente cómo abordar estas cuestiones.
Desajustes en los tipos de datos
Se producen errores al insertar un valor de un tipo de datos incorrecto. A veces puedes solucionar esto utilizando la fundición de tipo de tus datos, pero eso puede dar lugar a NULLs. Para asegurarte de que tus datos insertados son los mismos que los del destino, puedes probar a mirar en information_schema
(donde tienes permisos) y evaluar así tu esquema:
SELECT column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'employees';
Problemas de permisos
Si recibes un error de permiso, comprueba las funciones y privilegios de los usuarios:
SHOW GRANTS TO USER current_user;
Si no tienes permiso para utilizar INSERT
, consúltalo con tu jefe, con el departamento informático o con quien sea el propietario del conjunto de datos. Si puedes concederte permisos, utiliza el siguiente código:
GRANT INSERT ON TABLE employees TO user_name;
Conclusión
El comando INSERT INTO de Snowflake es una potente herramienta para añadir datos a tablas de forma eficaz. Tanto si se insertan filas sueltas, datos en bloque o se copian de otra tabla, comprender su sintaxis y las mejores prácticas garantiza la integridad de los datos y el rendimiento. Puedes mantener una base de datos Snowflake robusta y eficiente gestionando los errores, validando los datos y optimizando las inserciones.
Para saber más sobre Snowflake, te recomiendo que consultes los siguientes cursos:
Preguntas frecuentes
¿Cuál es la diferencia entre INSERTAR ENTRADA y COPIAR ENTRADA en Snowflake?
INSERT INTO
se utiliza para insertar filas concretas de datos, mientras que COPY INTO
está optimizado para la carga masiva de grandes conjuntos de datos desde fuentes externas como AWS S3 o Azure Blob Storage.
¿Admite INSERT INTO transacciones en Snowflake?
Sí, Snowflake admite transacciones, por lo que puedes utilizar BEGIN
, COMMIT
, y ROLLBACK
para garantizar la integridad de los datos al insertarlos.
¿Cuáles son las mejores prácticas de rendimiento al insertar grandes cantidades de datos?
Utiliza inserciones por lotes en lugar de insertar fila a fila, aprovecha COPY INTO
para cargas masivas y evita índices innecesarios que pueden ralentizar el rendimiento de la inserción.
¿Puedo INSERTAR EN una vista segura en Snowflake?
No. Las vistas -incluidas las vistas seguras- son tablas virtuales y no se puede escribir directamente en ellas. Debes insertar en la tabla base subyacente o utilizar una tabla de preparación transitoria y, a continuación, volver a crear o actualizar la vista.
¿Cómo inserto datos JSON en una columna VARIANT?
Envuelve el JSON entre comillas simples y pásalo a VARIANT
, por ejemplo: INSERT INTO t (payload) VALUES (PARSE_JSON('{\"key\":\"value\"}'));
. Snowflake conserva automáticamente el formato semiestructurado para su posterior consulta.
¿Cuál es la forma más rápida de deshacer un INSERT INTO accidental?
Aprovecha el Viaje en el Tiempo para restaurar la tabla a un punto anterior a la inserción: CREATE OR REPLACE TABLE my_table AS SELECT * FROM my_table AT (TIMESTAMP => '2025-06-17 09:00:00');
. Esto evita las sentencias manuales DELETE y preserva la agrupación.
¿Insert INTO crea automáticamente microparticiones?
Sí. Cada operación DML (incluidas las inserciones) activa el motor de microparticionado de Snowflake, que organiza los datos para su poda y compresión. No necesitas gestionar las particiones manualmente.
¿Cómo afecta la agrupación al rendimiento de INSERT?
Las claves agrupadas ayudan a la velocidad de consulta, pero añaden sobrecarga a las escrituras. Las inserciones frecuentes en una tabla muy agrupada pueden ser más lentas, así que elige bien las claves de agrupación y, si es posible, reagrupa en horas de menor actividad.
¿Puedo utilizar INSERT INTO con Snowpipe?
Indirectamente. Snowpipe ingiere archivos en una tabla de preparación; luego puedes INSERT INTO
tablas analíticas después de las transformaciones. Para una carga continua, combina Snowpipe con arroyos y tareas en lugar de insertos manuales.
¿Cuántos datos puedo insertar en una sola frase?
Snowflake admite operaciones muy grandes INSERT INTO … SELECT
operaciones muy grandes -de varios terabytes en la práctica- porque divide el trabajo en microlotes. El principal limitador es el tamaño del almacén y la configuración del tiempo de espera.
Soy un científico de datos con experiencia en análisis espacial, aprendizaje automático y canalización de datos. He trabajado con GCP, Hadoop, Hive, Snowflake, Airflow y otros procesos de ciencia/ingeniería de datos.