La base de datos se encoge de hombros — el validador pone nombres
Una importación fallida rara vez se explica sola. El cargador informa de un error de sintaxis cerca de tal fila, o peor aún, carga la mitad del archivo y se detiene, y la persona al mando se queda adivinando entre codificaciones, separadores y estilos de comillas. Por eso el primer movimiento no es reparar sino diagnosticar — ejecute la validación estructural y obtenga una lista de defectos con números de fila — filas malformadas, comillas sin cerrar, columnas que no cuadran con el encabezado. Un archivo que valida limpio y aun así no carga tiene un problema de encabezados o de duplicados, que es justo lo que atienden los dos pasos siguientes. Un archivo que no valida limpio corrige primero sus filas desparejas o las salta a conciencia, porque todas las herramientas posteriores confían en la estructura que reciben.
Los encabezados son el contrato
La tabla de destino es el contrato; la primera fila del archivo es la negociación. Las exportaciones externas llegan con Customer ID en enero, userid en febrero y CUSTID cada vez que otro equipo genera el informe. La resolución de encabezados mapea cada uno de esos nombres hacia las columnas reales del esquema de destino, combinando el emparejamiento automático por capas con un diccionario explícito de alias para los nombres que ya sabe poco fiables. El entregable de este paso es un mapeo donde cada columna del esquema recibe exactamente un encabezado de origen — nada sin cubrir, nada reclamado dos veces. Una columna sin mapear significa NULL silenciosos tras la carga; una reclamada por dos significa que un campo sobrescribe calladamente a otro. Ambos fallos salen más baratos en la pantalla de mapeo que en una consulta tres semanas después.
Los duplicados son una decisión de política
Las filas duplicadas en un archivo de importación casi nunca son accidentes — son reexportaciones, formularios enviados dos veces o dos personas tecleando al mismo cliente. Por eso la desduplicación pertenece a una política declarada y no a un reflejo. La coincidencia exacta es el valor por omisión honesto — elimina las filas que aparecen dos veces idénticas y nunca toca las que solo se parecen. La difusa se gana su sitio cuando el archivo se escribió a mano y espacios o mayúsculas separan gemelos verdaderos, y debe quedar por escrito, porque "quitamos 340 filas" solo se defiende cuando el criterio consta en el acta. La aritmética de filas se cierra en este paso — filas de origen, menos duplicados, menos filas malformadas saltadas, igual a lo que el paso siguiente emitirá.
Dos salidas — INSERT revisables o TSV masivo
El artefacto final sigue a la ruta de carga. Las sentencias INSERT por lotes sirven para la carga moderada y revisada — llevan inferencia de tipos, apuntan a MySQL, PostgreSQL, SQLite o SQL Server y declaran una estrategia de conflictos, ON CONFLICT u IGNORE, de modo que reejecutarlas no duplica nada. Pueden leerse en una revisión de código, entrar al control de versiones y reproducirse cuando haga falta. La salida TSV sirve al cargador masivo nativo — las rutas COPY y LOAD DATA consumen un archivo limpio separado por tabuladores muchísimo más rápido que cualquier corriente de sentencias, y la conversión de dialecto se ocupa de los campos entre comillas y los separadores incrustados para que el TSV se mantenga seguro de analizar. Vale una advertencia — el cargador masivo no le resolverá los conflictos, así que un archivo que pueda contener reejecuciones pertenece a la ruta INSERT, donde vive la estrategia de conflictos.
Dónde termina este flujo
Esta página repara un CSV externo que una base de datos rechaza y lo acompaña hasta su primera carga con éxito. Cuando la tarea crece más allá, entréguela a los vecinos. Las fuentes que llegan como libros de cálculo, o una entrega que debe correr sin atención cada semana, pertenecen al flujo de ingesta ETL. Los valores sospechosos, los atípicos y la evidencia de calidad para sostener una discusión pertenecen a la investigación de calidad de datos. Filtrar, agrupar y reestructurar una tabla que ya carga bien pertenece al flujo de utilidades CSV, y diseñar o migrar el esquema mismo pertenece a las páginas de migración de esquema de base de datos. Repare primero — y cuando la tarea se vuelva rutina, conviértala en un flujo permanente.