Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo importar datos de un .tsv muuy grande a mysql (https://www.clubdelphi.com/foros/showthread.php?t=95733)

JoAnCa 20-06-2022 22:38:47

Cómo importar datos de un .tsv muuy grande a mysql
 
Hola a todos
Pues necesito importar los datos de un archivo .tsv de 974MB para mysql
Probé abrirlo con excel para guardarlo como csv, pero supera las filas admitidas por Excel y no lo carga completo
Traté de importarlo directamente a mysql pero me da error cuando va por 193'200 registros, y se queda "dormido" sin avanzar mas

[ERR] 2013 - Lost connection to MySQL server during query

Como podría importar todos los datos a mysql?

dec 20-06-2022 23:26:06

Hola a todos,

Tal vez no es la solución ideal, pero, ¿has pensado en partir el archivo en varios más pequeños? Dices que MySQL se "queja" cuando llevas unos 150.000 registros importados, pues bien, tal vez sea esa una forma de conseguirlo: partir el archivo grande en archivos que contengan como mucho ese número de registros.

JoAnCa 21-06-2022 14:10:52

Cita:

Empezado por dec (Mensaje 547233)
Hola a todos,

Tal vez no es la solución ideal, pero, ¿has pensado en partir el archivo en varios más pequeños? Dices que MySQL se "queja" cuando llevas unos 150.000 registros importados, pues bien, tal vez sea esa una forma de conseguirlo: partir el archivo grande en archivos que contengan como mucho ese número de registros.


Pensé en esa posibilidad, pero no se con "quien" partir el archivo, no se que aplicación me serviría para abrirlo y dividirlo en partes

bucanero 21-06-2022 16:55:52

Hola,

Alguna vez que he necesitado abrir/tratar ficheros de backups de MySQL de tamaño descomunal (incluso de varios TB), lo he conseguido con el editor SublimeText que si no ha cambiado su licencia es libre.

Este es el enlace de descarga https://clockworkpcblog.tech/#/store/text

Con este editor podrás ir dividiendo el fichero al menos de forma manual.


Por otra parte con respecto a la pregunta original,

* ¿el fichero que estas intentando subir es de tipo CSV? ¿Y como estas importando el fichero?
Si es este tu caso, puede importar los datos con LOAD DATA

Código SQL [-]
LOAD DATA
    [LOW_PRIORITY | CONCURRENT] [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT}
        [, col_name={expr | DEFAULT}] ...]

Este comando te permite configurar el numero de líneas a ignorar desde el principio del fichero. Lo que no se es en caso de error si los datos que ya se han procesado se quedan almacenados, o es de tipo transición donde es todo o nada, prueba si te puede servir. Y puedes ir importandolo en sucesivas veces, omitiendo cada vez el numero de líneas/registros que ya tienes insertados.

* Y si es un fichero de tipo script de SQL:
importando a través de su aplicación no deberías de tener problemas, o al menos a mi no me ha dado nunca problemas, por muy grande que haya sido el tamaño del fichero o numero de registros que contiene, (salvo que la estructura del script contenga errores de SQL)

Código SQL [-]
mysql -u [user] -p [database_name] < [filename].sql

JoAnCa 22-06-2022 03:45:11

Cita:

* ¿el fichero que estas intentando subir es de tipo CSV? ¿Y como estas importando el fichero?

El fichero es un TSV, un archivo de texto parecido a CSV, pero separado por tabulaciones.
Y lo trato de importar desde el navicat con su asistente de importacion


Al principio me daba el error "[ERR] 2013 - Lost connection to MySQL server during query",

le cambie la configuracion a MySQL, aumentando el max_allowed_packet, y dejo de dar el error, pero ahora se estanca en el 8% con 331'400 registros, una vez en 1 h y 37 min. y otra vez en 42 min no se ha movido de ahi.


Probare con LOAD DATA, a ver si me resulta, y si no hare la prueba con SublimeTextpara hacer lo que me recomendo dec

JoAnCa 22-06-2022 04:42:35

Resuelto
 
Pues fue muy facil y rapido con LOAD DATA, en 250 seg cargó los 4'519'612 registros.

Al parecer esos eran todos, pues terminó sin dar error.


No sabia que ese comando existia


Muchas gracias por la ayuda


La franja horaria es GMT +2. Ahora son las 16:00:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi