MySQL LOAD DATA INFILE: fonctionne, mais le terminateur de ligne imprévisible
MySQL a une belle CSV, une fonction d'importation LOAD DATA INFILE
.
J'ai un grand jeu de données qui doit être importé à partir de CSV sur une base régulière, si cette fonctionnalité est exactement ce dont j'ai besoin. J'ai un travail script qui importe mes données parfaitement.
.....sauf.... Je ne connais pas à l'avance ce que la fin de terminaison de ligne sera.
Mon code SQL actuellement ressemble à quelque chose comme ceci:
LOAD DATA INFILE '{fileName}'
INTO TABLE {importTable}
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
( {fieldList} );
Cela fonctionne très bien pour certains d'importer des fichiers.
Toutefois, l'importation de données provenant de sources multiples. Certains d'entre eux ont la \n
terminator; d'autres ont \r\n
. Je ne peux pas prédire que je vais avoir.
Est-il un moyen à l'aide de LOAD DATA INFILE
à préciser que mes lignes peuvent être résiliés avec soit \n
ou \r\n
? Comment puis-je gérer cela?
source d'informationauteur SDC
Vous devez vous connecter pour publier un commentaire.
Je venais de pré-traiter. Un mondial de la recherche/remplacer pour modifier \r\n \n fait à partir d'un outil de ligne de commande dans le cadre du processus d'importation doit être simple et performant.
Vous pouvez spécifier le séparateur de ligne '\n' et retirer caractère nul '\r' séparateurs si nécessaire à partir du dernier champ en cours de chargement.
Par exemple -
Supposons que nous avons le 'entries.txt". Le séparateur de ligne "\r\n', et seulement après la ligne
ITEM2 | CLASS3 | DATE2
le séparateur est le caractère '\n':Instruction CREATE TABLE:
Notre LOAD DATA INFILE requête:
Résultats de l'exposition:
J'en supposant que le vous avez besoin de renseignements par l'intermédiaire de mysql pas par n'importe quel langage de programmation.
Avant l'utilisation de charger des données à convertir le format de format windows \r\n ( CR LF ) si u ont notepad++. Et puis traiter la Charge de requêtes de données. Assurez-vous que le LINES TERMINATED BY '\r\n'
Edit:
Car les éditeurs sont souvent inappropriés pour la conversion des fichiers plus volumineux. Pour les gros fichiers, la commande suivante est souvent utilisée à la fois windows et linux
1) Pour convertir en format windows dans windows
2) Pour les convertir en format windows dans linux
Les autres commandes disponibles
Un windows format de fichier peut être converti en format Unix simplement en enlevant tous ASCII CR \r caractères par
tr -d '\r' < inputfile > outputfile
Dans linux/unix le fichier de commande détecte le type de Fin De Ligne (EOL) utilisé. Pour le type de fichier peut être vérifiée à l'aide de cette commande
Vous pouvez aussi rechercher dans l'une de l'intégration de données en paquets. Talend Open Studio est très souple, l'entrée des données de routines. Par exemple, vous pouvez traiter le fichier avec un ensemble de séparateurs et attraper les rejette et les traiter d'une autre manière.
Si la première charge a 0 lignes, faire le même constat avec l'autre terminaison de ligne. Cela devrait être possible avec certains de comptage de base de la logique.
Au moins, il reste tous les dans SQL, et si ça marche la première fois que vous gagnez. Et pourrait causer moins de maux de tête que la ré-analyse de toutes les lignes et la suppression d'un caractère particulier.
Pourquoi ne pas d'abord il suffit de prendre un coup d'oeil à la façon dont les lignes de fin?
Vous pouvez utiliser des LIGNES à PARTIR de séparer l'habitude des fins de ligne dans le texte et une nouvelle ligne:
Pour habitude de fichiers CSV avec " les entourant de caractères, il sera: