Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mySQL - alternatives à LOAD DATA INFILE

2 réponses
Avatar
Denis Beauregard
Bonjour,

L'hébergeur de mon client a désactivé la fonction LOAD DATA INFILE
que je prévoyais utiliser pour lire un fichier de 2,5 millions de
lignes dans une application en PHP.

Quelles sont les alternatives ?

J'ai pensé utiliser les utilitaires de mySQL mais je vois que
mysqlimport, qui a la même syntaxe que LOAD DATA INFILE, doit
utiliser cette commande (c'est même indiqué dans la doc).
Mais, est-il possible que le code soit compilé de façon indépendante
et qu'il soit possible que je puisse faire un LOAD avec cette
commande ?


Pour le moment, j'ai essayé ce code sans succès (aucune ligne
ajoutée à la table), mais aussi sans message d'erreur :

*** cache les informations critiques...

<pre>
<?php

system ("mysqlimport --fields-terminated-by='\\t'
--fields-optionally-enclosed-by='\"' --lines-terminated-by='\\n'
-p*** --replace -u*** --verbose ma_base ma_table.txt");

?>
</pre>


Avec seulement system ("mysqlimport"); j'obtiens le message
de l'utilitaire avec la liste des commandes.

J'ai aussi essayé en ajoutant --local et --debug mais sans succès.


Denis

2 réponses

Avatar
Patrick Texier
Le Mon, 23 Nov 2009 16:02:30 -0500, Denis Beauregard a écrit :

L'hébergeur de mon client a désactivé la fonction LOAD DATA INFILE
que je prévoyais utiliser pour lire un fichier de 2,5 millions de
lignes dans une application en PHP.



C'est assez fréquent.

Quelles sont les alternatives ?



Un insert "imbriqué" :

INSERT INTO table VALUES
(champ1, champ2),
(champ1, champ2),
(champ1, champ2),
...
(champ1, champ2);

Il ne doit pas y avoir une grosse diférence de temps avec LOAD DATA.
--
Patrick Texier

vim:syntax=mail:ai:ts=4:et:twr
Avatar
Denis Beauregard
Le Tue, 24 Nov 2009 08:07:28 +0100, Patrick Texier
écrivait dans fr.comp.applications.sgbd:

Le Mon, 23 Nov 2009 16:02:30 -0500, Denis Beauregard a écrit :

L'hébergeur de mon client a désactivé la fonction LOAD DATA INFILE
que je prévoyais utiliser pour lire un fichier de 2,5 millions de
lignes dans une application en PHP.



C'est assez fréquent.

Quelles sont les alternatives ?



Un insert "imbriqué" :

INSERT INTO table VALUES
(champ1, champ2),
(champ1, champ2),
(champ1, champ2),
...
(champ1, champ2);

Il ne doit pas y avoir une grosse diférence de temps avec LOAD DATA.



Supposons que je transforme mon fichier de texte tabulé en énoncés
SQL. C'est déjà trié, donc pas de manipulation supplémentaire de
ce côté.

Mais il reste une question importante. Comment je fais pour faire
une série d'INSERT en SQL quand il y a 2,5 millions de lignes. La
base a réellement ce nombre de lignes et fait 600 Mo en texte tabulé
seulement. En moyenne, donc, 240 caractères par ligne et une
dizaine de champs.

Est-ce que je peux avoir un fichier php enchaîné à un autre, par
exemple

mysql_query("insert ...

?>
<img src="page412.php">



Denis