Logparser输出到SQL生成空字符串和最大值整数

时间:2015-11-17 17:01:38

标签: mysql logparser

我有一个logparser查询,当运行到屏幕或CSV文件时产生正确的输出,但当我将它发送到SQL(在这种情况下是MySQL)时,数据搞砸了。时间戳是正确的,但字符串显示为空(不为空,只是空),整数列显示为最大值(在本例中为medium int = 8388607)。

这是表格:

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
;

来自命令行的工作查询(空值用于将问题提炼到故障排除的本质):

"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"

屏幕输出(正确)如下所示 - 请注意广告系列和结果列包含正确的数据):

<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>

当我执行此操作时,尝试将数据推送到数据库表,我使用此查询:

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"

查询成功运行,但表格最终看起来像这样,请注意时间戳是正确的,广告系列列为空,结果列具有mediumint的最大值:

Penetration table image

我是新的,所以我无法嵌入图像,但表格输出如下:

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)

提前感谢您提供的任何帮助。我想这个解决方案很简单,但我一直在努力解决这个问题。

1 个答案:

答案 0 :(得分:0)

整数问题已修复,正如Gabriele在评论中建议的那样,将列类型从medium int更改为整数。

字符串问题证明是MySQL ODBC 5.1驱动程序的问题。根据{{​​3}},这是一个“非bug”,但是其他几个人经历过它,当我切换到使用3.51驱动程序时,查询确实开始工作。