Tengo un CSV de diario de eventos no normalizado de un cliente que estoy tratando de cargar en una tabla MySQL para poder refactorizar en un formato correcto. Creé una tabla llamada 'CSVImport' que tiene un campo para cada columna del archivo CSV. El CSV contiene 99 columnas, por lo que esta fue una tarea bastante difícil en sí misma:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
No hay restricciones en la tabla, y todos los campos contienen valores VARCHAR (256), excepto las columnas que contienen recuentos (representados por INT), sí / no (representado por BIT), precios (representados por DECIMAL) y borrones de texto ( representado por TEXTO).
Traté de cargar datos en el archivo:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
Toda la mesa está llena de NULL
.
Creo que el problema es que los borrones de texto contienen más de una línea, y MySQL está analizando el archivo como si cada nueva línea correspondiera a una fila de databazse. Puedo cargar el archivo en OpenOffice sin ningún problema.
El archivo clientdata.csv contiene 2593 líneas y 570 registros. La primera línea contiene nombres de columna. Creo que está delimitado por comas, y el texto aparentemente está delimitado con comillas dobles.
ACTUALIZAR:
En caso de duda, lea el manual: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Agregué información a la LOAD DATA
declaración de que OpenOffice era lo suficientemente inteligente como para inferir, y ahora carga la cantidad correcta de registros:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Pero todavía hay muchos NULL
registros completos , y ninguno de los datos que se cargaron parece estar en el lugar correcto.
fuente
Respuestas:
El núcleo de su problema parece coincidir con las columnas del archivo CSV con las de la tabla.
Muchos clientes gráficos MySQL tienen cuadros de diálogo de importación muy agradables para este tipo de cosas.
Mi favorito para el trabajo es HeidiSQL basado en Windows . Te da una interfaz gráfica para construir el
LOAD DATA
comando; puedes reutilizarlo programáticamente más tarde.Captura de pantalla: cuadro de diálogo "Importar archivo de texto"
Para abrir el cuadro de diálogo Importar archivo de texto ", vaya a
Tools > Import CSV file
:fuente
Use mysqlimport para cargar una tabla en la base de datos:
Lo encontré en http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/
Para hacer que el delimitador sea una pestaña, use
--fields-terminated-by='\t'
fuente
mysqlimport
utilizaLOAD DATA INFILE...
detrás de escena, por lo que es más o menos lo mismo.LOAD DATA INFILE
, debe crear una tabla antes de poder usarmysqlimport
.LOAD DATA INFILE
.--fields-optionally-enclosed-by=\"
y `--fields-escaped-by = \`La forma más simple en la que he importado más de 200 filas es debajo del comando en la ventana sql phpmyadmin
Tengo una tabla simple de país con dos columnas CountryId, CountryName
aquí hay datos .csv
Aquí está el comando:
Tenga en cuenta una cosa, nunca aparezca, en la segunda columna, de lo contrario su importación se detendrá
fuente
LOAD DATA LOCAL INFILE
. Si esto arroja un error 1148 "el comando usado no está permitido", puede habilitarlo ejecutando mysql en la línea de comando con--local-infile
.Utilicé este método para importar más de 100K registros ( ~ 5 MB ) en 0.046 segundos
Así es como lo haces:
Es muy importante incluir la última línea, si tiene más de un campo, es decir, normalmente omite el último campo (MySQL 5.6.17)
Luego, suponiendo que tenga la primera fila como título para sus campos, es posible que también desee incluir esta línea
Esto es lo que parece si su archivo tiene una fila de encabezado.
fuente
(field_1,field_2 , field_3);
¿se refiere a la lista de columnas en un archivo .csv o en una tabla? es decir, ¿qué son estos campos?phpMyAdmin puede manejar la importación CSV. Aquí están los pasos:
Prepare el archivo CSV para que los campos estén en el mismo orden que los campos de la tabla MySQL.
Elimine la fila del encabezado del CSV (si corresponde), de modo que solo los datos estén en el archivo.
Vaya a la interfaz phpMyAdmin.
Seleccione la tabla en el menú de la izquierda.
Haz clic en el botón Importar en la parte superior.
Busque el archivo CSV.
Seleccione la opción "CSV usando LOAD DATA".
Ingrese "," en los "campos terminados por".
Ingrese los nombres de las columnas en el mismo orden en que están en la tabla de la base de datos.
Haga clic en el botón Ir y ya está.
Esta es una nota que preparé para mi uso futuro, y compartir aquí si alguien más puede beneficiarse.
fuente
NULL
en el CSV cualquier campo / columna de incremento automático.Puede solucionar esto enumerando las columnas en su declaración LOAD DATA. Del manual :
... así que en su caso debe enumerar las 99 columnas en el orden en que aparecen en el archivo csv.
fuente
Intenta esto, funcionó para mí
IGNORE 1 ROWS aquí ignora la primera fila que contiene los nombres de campo. Tenga en cuenta que para el nombre de archivo debe escribir la ruta absoluta del archivo.
fuente
La línea de comando mysql es propensa a demasiados problemas en la importación. Así es como lo haces:
fuente
Si está utilizando MySQL Workbench (actualmente versión 6.3) puede hacer esto de la siguiente manera:
fuente
LOAD DATA INFILE
mysqlimport
INSERT
consulta masiva e intentado hacerlo todo de una vez, pero parece que hacerlo de esta manera en realidad se ejecuta una vezINSERT
por fila.Veo algo extraño Estás usando para ESCAPAR el mismo carácter que usas para ENCERRAR. Por lo tanto, el motor no sabe qué hacer cuando encuentra un '"' y creo que es por eso que nada parece estar en el lugar correcto. Creo que si elimina la línea de ESCAPE, debería funcionar muy bien.
A menos que analice (manualmente, visualmente, ...) su CSV y encuentre qué personaje usa para escapar. A veces es '\'. Pero si no lo tiene, no lo use.
fuente
Otra solución es utilizar la herramienta csvsql de la increíble suite csvkit .
Ejemplo de uso:
Esta herramienta puede inferir automáticamente los tipos de datos (comportamiento predeterminado), crear una tabla e insertar los datos en la tabla creada.
--overwrite
La opción se puede utilizar para descartar la tabla si ya existe.--insert
opción: para llenar la tabla del archivo.Para instalar la suite
Requisitos previos:
python-dev
,libmysqlclient-dev
,MySQL-python
fuente
Cómo importar archivos csv a tablas sql
Archivo de ejemplo:
Overseas_trade_index
CSV de datosPasos:
Necesito crear una tabla para
overseas_trade_index
.Necesita crear columnas relacionadas con el archivo csv.
Consulta SQL:
Necesita conectar la base de datos mysql en la terminal.
Ingrese este comando para importar los datos csv a las tablas mysql.
Encuentre estos datos del índice de comercio exterior en sqldatabase:
fuente
Si está utilizando una máquina Windows con una hoja de cálculo Excel cargada, el nuevo complemento mySql para Excel es fenomenal. La gente de Oracle realmente hizo un buen trabajo con ese software. Puede hacer la conexión de la base de datos directamente desde Excel. Ese complemento analizará sus datos y configurará las tablas para usted en un formato consistente con los datos. Tenía algunos archivos de datos csv monstruosos para convertir. Esta herramienta fue un gran ahorro de tiempo.
http://dev.mysql.com/downloads/windows/excel/
Puede realizar actualizaciones desde Excel que se completarán en la base de datos en línea. Esto funcionó extremadamente bien con los archivos mySql creados en el alojamiento compartido GoDaddy ultra económico. (Tenga en cuenta que cuando cree la tabla en GoDaddy, debe seleccionar algunas configuraciones no estándar para permitir el acceso fuera del sitio de la base de datos ...)
Con este complemento, tiene una interactividad pura entre su hoja de cálculo XL y el almacenamiento de datos mySql en línea.
fuente
Yo uso mysql workbench para hacer el mismo trabajo.
Nota: eche un vistazo al archivo de registro de mysql workbench en busca de errores utilizando "tail -f [mysqlworkbenchpath] /log/wb*.log"
fuente
Aquí hay una muestra de la captura de pantalla del archivo de Excel:
Guardar como y elegir .csv.
Y tendrá, como se muestra a continuación, la captura de pantalla de datos .csv si abre con notepad ++ o cualquier otro bloc de notas.
Asegúrese de eliminar el encabezado y tener una alineación de columna en .csv como en la tabla mysql. Reemplace folder_name por su nombre de carpeta
CARGAR DATOS LOCAL INFILE
'D: /folder_name/myfilename.csv' EN LA TABLA CAMPOS DE CORREO TERMINADOS POR ',' (fname, lname, correo electrónico, teléfono);
Si es un gran dato, ¡puede tomar café y cargarlo!
Eso es todo lo que necesitas.
fuente
En caso de que use Intellij https://www.jetbrains.com/datagrip/features/importexport.html
fuente
Consulta PHP para importar archivos csv a la base de datos mysql
** Datos de archivo CSV de muestra **
fuente
fuente