2015-11-17 2 views
0

J'ai une requête logparser qui produit une sortie correcte lors de l'exécution sur l'écran ou le fichier CSV, mais quand je l'envoie à SQL (MySQL dans ce cas), les données sont foirées en haut les horodatages ont raison, mais les chaînes sont vides (non nulles, simplement vides), et les colonnes entières affichent leur valeur maximale (dans ce cas, medium int = 8388607).Sortie logparser vers SQL produisant des chaînes vides et des entiers valeur maximale

Voici le tableau:

CREATE TABLE `penetration` 
(
    `id` INT(10) NOT NULL AUTO_INCREMENT, 
    `timestamp` DATETIME NULL DEFAULT NULL, 
    `campaign` VARCHAR(10) NULL DEFAULT NULL, 
    `build_date` DATE NULL DEFAULT NULL, 
    `results` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p1` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p2` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p3` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p4` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p5` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p6` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p7` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p8` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p9` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p10` MEDIUMINT(8) NULL DEFAULT NULL, 
    `p26` MEDIUMINT(8) NULL DEFAULT NULL, 
    `accounts` MEDIUMINT(8) NULL DEFAULT NULL, 
    `logon` VARCHAR(10) NULL DEFAULT NULL, 
    `client` VARCHAR(2) NULL DEFAULT NULL, 
    `facility` VARCHAR(3) NULL DEFAULT NULL, 
    `type` VARCHAR(2) NULL DEFAULT NULL, 
    INDEX `id` (`id`) 
) 
COLLATE='utf8_general_ci' 
ENGINE=MyISAM 
AUTO_INCREMENT=1668 
; 

La requête de travail à partir de la ligne de commande (les valeurs nulles sont là pour distiller le problème à son essence pour le dépannage):

"SELECT NULL, timestamp, TRIM(campaign) AS campaign, TO_DATE(timestamp) AS build_date, TO_INT(results) AS results, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM penetration.tsv" 

La sortie de l'écran (ce qui est correct) ressemble à ceci - notez que les colonnes campagne et résultat ont des données correctes):

<NULL> 2015-11-16 23:30:14 BLUCCHM1 2015-11-16 219  <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 
<NULL> 2015-11-16 23:30:14 BLUCUCH1 2015-11-16 1330 <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> 

Quand j'exécute ce, en essayant de pousser les données à une table de base de données, j'utilise cette requête:

logparser -i:TSV -o:SQL -dsn:directorDSN32 -database:[dbname] -username:[username] -password:[password] -driver:"MySQL ODBC 5.1 Driver" -server:[ip address] "SELECT NULL, timestamp, TRIM(campaign) AS campaign, TO_DATE(timestamp) AS build_date, TO_INT(results) AS results, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM penetration.tsv TO penetration" 

La requête est exécutée avec succès, mais la table finit par ressembler à cela, remarquez les horodateurs sont justes, la campagne colonne est vide, et la colonne des résultats a la valeur maximale pour MEDIUMINT:

Penetration table image

Je suis nouveau, je ne peux pas intégrer une image, mais la sortie de la table ressemble à ceci:

id  timestamp   campaign  build_date  results   ... 
1  2015-09-16 17:06:09     2015-09-16  8,338,607  (NULL) 
2  2015-09-16 17:06:09     2015-09-16  8,338,607  (NULL) 

Merci d'avance pour toute aide qui peut être offerte. J'imagine que la solution est quelque chose de simple, mais je deviens fou en essayant de le comprendre.

+0

Eh bien, la prise en charge de non-MS SQL pourrait être moins qu'idéale. Pourriez-vous par hasard essayer ceci avec les colonnes entières déclarées comme un type entier de 32 bits, et avec la colonne de campagne déclarée comme un varchar 255-char? –

Répondre

0

Le problème des entiers a été corrigé, comme Gabriele l'a suggéré dans les commentaires, en changeant le type de colonne de medium int à integer.

Le problème de chaîne se révèle être un problème avec le pilote MySQL ODBC 5.1. C'est un "non-bug" selon le official report, mais plusieurs autres l'expérimentent, et en effet la requête a commencé à fonctionner quand je suis passé à l'aide du pilote 3.51.