Pregunta MYSQL importa datos desde csv utilizando LOAD DATA INFILE


Estoy importando algunos datos de 20000 filas desde un archivo CSV a Mysql.

Las columnas en el archivo CSV están en un orden diferente al de las columnas de la tabla MySQL. ¿Cómo asignar automáticamente columnas correspondientes a las columnas de la tabla Mysql?

Cuando ejecuto

LOAD DATA INFILE'abc.csv' INTO TABLE abc

esta consulta agrega todos los datos a la primera columna.

Sugiera la sintaxis automática para importar datos a Mysql.


74
2018-01-02 18:55


origen


Respuestas:


Puedes usar LOAD DATA INFILE comando para importar csv archivo en la mesa.

Ver este enlace MySQL - LOAD DATA INFILE.

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);

118
2018-01-03 05:52



Probablemente necesites configurar el FIELDS TERMINATED BY ',' o lo que sea que el delimitador sea.

Para un archivo CSV, su declaración debe verse así:

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

38
2018-01-03 05:14



Antes de importar el archivo, debe preparar lo siguiente:

  • Una tabla de base de datos a la cual se importarán los datos del archivo.
  • Un archivo CSV con datos que coinciden con el número de columnas del tabla y el tipo de datos en cada columna.
  • La cuenta, que se conecta al servidor de base de datos MySQL, tiene ARCHIVO e INSERT privilegios.

Supongamos que tenemos la siguiente tabla:

enter image description here

CREAR TABLA CON LA SIGUIENTE CONSULTA:

CREATE TABLE IF NOT EXISTS `survey` (
  `projectId` bigint(20) NOT NULL,
  `surveyId` bigint(20) NOT NULL,
  `views` bigint(20) NOT NULL,
  `dateTime` datetime NOT NULL
);

SU ARCHIVO CSV DEBE ESTAR FORMATO CORRECTO PARA EJEMPLO VER SIGUIENTE   IMAGEN ADJUNTA :

enter image description here

Si todo está bien ... Ejecute la siguiente consulta para CARGAR DATOS DEL ARCHIVO CSV:

NOTA: agregue la ruta absoluta de su archivo CSV

LOAD DATA INFILE '/var/www/csv/data.csv' 
INTO TABLE survey 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

Si todo ha hecho. ha exportado datos de CSV a la tabla con éxito


37
2017-09-16 09:49



Sintaxis:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL]
INFILE 'file_name' INTO TABLE `tbl_name`
CHARACTER SET [CHARACTER SET charset_name]
FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] 
[LINES[TERMINATED BY 'string']] 
[IGNORE number {LINES | ROWS}]

Ver este ejemplo:

LOAD DATA LOCAL INFILE
'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer`
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

6
2017-10-20 13:14



Insertar más de 7000000 registros en 1 minuto en la base de datos (consulta superrápida con cálculo)

mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

RRP y RRP_nl y RRP_bl no están en csv, pero estamos calculados y luego de insertar eso.


1
2018-02-17 06:34



supongamos que está utilizando xampp y phpmyadmin

tiene nombre de archivo 'ratings.txt' nombre de tabla 'ratings' y nombre de la base de datos 'movies'

si su xampp está instalado en "C: \ xampp \"

Copie su archivo "ratings.txt" en la carpeta "C: \ xampp \ mysql \ data \ movies"

LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

Espero que esto pueda ayudarte a omitir tu error si estás haciendo esto en localhost


1
2017-10-07 18:00



Puede cargar datos desde un archivo csv o de texto. Si tiene un archivo de texto con registros de una tabla, puede cargar esos registros dentro de la tabla. Por ejemplo, si tiene un archivo de texto, donde cada fila es un registro con los valores de cada columna, puede cargar los registros de esta manera.

table.sql

id //field 1

name //field2

table.txt

1,peter

2,daniel

...

- ejemplo en windows

LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'; 

0
2017-10-06 03:09



Si estás corriendo LOAD DATA LOCAL INFILE desde el shell de Windows, y necesitas usar OPTIONALLY ENCLOSED BY '"', tendrás que hacer algo como esto para escapar de los personajes correctamente:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out

0
2017-10-06 23:13



Estaba obteniendo el código de error: 1290. El servidor MySQL se está ejecutando con --secure-file-priv opción para que no pueda ejecutar esta declaración

Esto funcionó para mí en Windows 8.1 de 64 bits usando wampserver 3.0.6 64bit.

Archivo editado my.ini de C: \ wamp64 \ bin \ mysql \ mysql5.7.14

Borre la entrada secure_file_priv c: \ wamp64 \ tmp \ (o el directorio que tenga aquí)

Dejó todo -exit wamp, etc.- y reinició todo; luego punt my cvs file en C: \ wamp64 \ bin \ mysql \ mysql5.7.14 \ data \ u242349266_recur (el último dir es el nombre de mi base de datos)

ejecutado LOAD DATA INFILE 'myfile.csv'

EN LA TABLA de los alumnos

CAMPOS TERMINADOS POR ','

ENCERRADA POR '"'

LÍNEAS TERMINADAS POR '\ r \ n'

IGNORAR 1 LÍNEAS

... ¡¡¡y voilá!!!


0
2017-08-30 02:37