Bonjour à tous,
Mon contexte est le suivant :
- Mysql 5.5 sur Linux RedHat 5 64bit
- Une table partitionnée à charger
- Procédure réalisée sur shell Bash
Le script SQL de création de cette table est le suivant :
Ma procédure de chargement est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE `maTable` ( `idkey` MEDIUMINT(8) UNSIGNED NOT NULL, `info1` TINYINT(3) UNSIGNED NOT NULL, `info2` TINYINT(3) UNSIGNED NOT NULL, ) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci PACK_KEYS=1 /*!50100 PARTITION BY RANGE (idKey) (PARTITION P1 VALUES LESS THAN (3798460) ENGINE = MyISAM, PARTITION P2 VALUES LESS THAN (3798700) ENGINE = MyISAM, PARTITION P3 VALUES LESS THAN (3798940) ENGINE = MyISAM, ...)
Mes constats/problèmes sont les suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 echo "LOAD DATA LOCAL INFILE '/tmp/monFichier.txt' INTO TABLE matable FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n' (idKey, info1, info2);SHOW WARNINGS; SHOW ERRORS;" | mysql -bsN maBase [ $? -ne 0 ] && echo "Je pleure" && exit 1
- 1er cas : Lorsque la partition n'existe pas, les données ne sont pas chargées (juste que là tout va bien
). Par contre, le code d'erreur de retour $? n'est pas différent de zéro
.. Même pas un seul petit warning n'est émis...
- 2ème cas :J'ai fait une tentative de chargement uniquement sur le champ idKey (je vous rappèle que les champs de ma table sont NOT NULL) avec des valeurs cohérentes par rapport aux partitions disponibles, les lignes sont chargées avec les champs info1 et info2 à zéro !!!
... Je m'attendais à une sortie en erreur me signalant que ces deux champs sont obligatoires ... et ben non... Le code d'erreur est tjs zéro. Les warnings sont les suivants (cela devrait être des erreurs !)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Level Code Message Warning 1364 Field 'info1' doesn't have a default value Warning 1364 Field 'info2' doesn't have a default value- 3ème cas (plus une remarque) : en équivalent INSERT, l'erreur de partition est bien détectée... malheureusement, j'ai des millions de lignes qui m'attendent... cela serait un peu long...
Mes questions sont les suivantes :
- Est-il possible de demander explicitement (par un paramètre de la cmd 'mysql' par exemple) un code retour sensible à tout incident ?
- non... ne me dites pas qu'il faut que j'analyse le contenu de mes données à charger pour identifier la (ou les partitions) que je dois contrôler après chargement (pour les comparer avec la photo avant chargement)... Non ne me dites pas cela
- non... ne me dites pas qu'il faut charger dans une temporary table (non partitionnée) puis faire un INSERT SELECT dans la table cible... Pitié, ne me le dites pas ...
Merci d'avance de votre retour
Partager