【发布时间】:2013-09-03 23:52:27
【问题描述】:
我正在尝试对日志文件进行一些数据挖掘。这是一个平面文件,每行包含大量事件列表。文件本身也可以达到 500MB 以上。每行都是一个以逗号分隔的可变宽度事件列表,每个事件都包含与该事件相关的数据。
我已经经历了几次迭代,但我真的无法决定我希望数据如何结束(规范化或非规范化)?如果我想对数据进行预处理,或者可能在它进入数据库之后对其进行后处理?还是完全不同的东西?
到目前为止我用过的东西:sed + awk、C#、g(awk)、Ruby、Postgres 我考虑过的事情:可能是一个非 SQL 数据库?可能还有其他想法吗?
最终,我使用了这些工具中的每一个来对文件进行一次“传递”,并输出另一个文件,该文件的每一行都有固定的列数 (30)。之后我一直在使用 postgres,并创建了一个包含 30 列的大型 postgres 表,我可以使用简单的 COPY postgres 命令(基本上是批量复制插入)将该文件快速导入到表中。
烦恼:数据完全去规范化。我基本上已经在一张表中获得了大量数据,我当然可以查询并获取我需要的数据,但是那张 30 列的庞大表正在考验我的敏感性。
问题:您会尝试规范化数据吗?如果是这样,您对此有何看法?你会对 30 列表进行后处理吗?在将其插入数据库之前进行预处理?还有其他想法吗?
【问题讨论】:
-
我会尽快在管道中对其进行标准化。否则,您将一遍又一遍地与非规范化结构作斗争。
-
如果 Hadoop 适合您,您可以使用 Apache Hive 或 Apache Pig。这些允许您以结构化的方式访问日志文件。特别是 Hive 允许您访问日志文件,就像它们是类似 SQL 的表一样。
-
另外,我同意@KeithPayne。尽早构建您的数据,否则您将继续上坡。
标签: c# ruby postgresql logging preprocessor