用于对 SQL 表进行自动异常检测的工具?

数据挖掘 sql 异常检测 离群值
2021-09-19 05:47:17

我有一个大型 SQL 表,它本质上是一个日志。数据非常复杂,我正试图在我不了解所有数据的情况下找到一些方法来识别异常。我找到了很多异常检测工具,但其中大多数都需要某种“中间人”,即 Elastic Search、Splunk 等。

有谁知道可以针对 SQL 表运行的工具,该工具可以自动构建基线和异常警报?

这听起来可能很懒惰,但我已经花了几十个小时编写单独的报告脚本,因为我了解了每种事件类型的含义以及每个事件对应的其他字段,而且我觉得离能够在实际问题上发出警报还差得远。有意义的方式。该表有 41 列,只有 5 亿行(3 年的数据)。

2个回答

如果您需要针对任意表运行各种异常值检测方法的 SQL 代码,请查看我的系列文章和代码示例面向 SQL Server。我为 Grubb 检验、Z 分数和修正 Z 分数、四分位间距、Dixon Q 检验、GESD、Tietjen-Moore 检验、Pierce 标准、Chauvenet 标准、修正 Thompson Tau 检验、Cook 距离、Mahalanobis 提供了一些初步代码距离、本福德定律和各种视觉图。请注意,我是这方面的业余爱好者,这是我的一些旧代码,所以我确信需要更正;这至少提供了一个起点,以便您可以针对您有权访问的任何数据库表运行这些测试。它也在 T-SQL 中,因此如果您碰巧在 Oracle 或 MySql 等其他平台上,您需要调整 PL/SQL 或您可能使用的任何其他品牌的 SQL 的代码。不过,这应该可以帮助您入门。只需解决问题并将存储过程设置为按计划定期运行,您就可以开始了。如果您对例程有任何反馈,请告诉我,我一直在寻求改进我的 SQL 写作。

如果你想从 SQL 的角度来处理这个问题,那么我会广泛地识别任何导致不同行为的分类变量。然后对一些分析变量执行类似以下的操作。

SELECT ClassificationVar1, 
    ClassificationVar2, 
    MIN(AnalysisVar1) as Min_AnalysisVar1, 
    MAX(AnalysisVar1) as Max_AnalysisVar1, 
    MEAN(AnalysisVar1) as Mean_AnalysiVar1, 
    STDEV(AnalysisVar1) as Std_AnalysisVar1,
    MIN(AnalysisVar2) as Min_AnalysisVar2, 
    MAX(AnalysisVar2) as Max_AnalysisVar2, 
    MEAN(AnalysisVar2) as Mean_AnalysiVar2, 
    STDEV(AnalysisVar2) as Std_AnalysisVar2,
    etc.
    FROM YourDataFile
GROUP BY ClassificationVar1, ClassificationVar2
ORDER BY ClassificationVar1, ClassificationVar2

我会在最近一年的数据上一次性执行此操作,然后从速度的角度来看,我会根据需要定期运行此操作,以标记异常数据。

也许,一种更好的方法,即学习新技术是 HDFS/Spark,然后是 PIG/Python/R 解决方案。但是 HDFS/Spark 有一些开箱即用的解决方案来进行日志分析。5 亿条记录可能会遇到 SQL 的性能问题,即使是表分区和列索引也是如此。