日志查询
本文档详细介绍如何利用 GreptimeDB 的查询语言对日志数据进行高效搜索和分析。
概述
GreptimeDB 支持通过 SQL 语句灵活查询数据。本节将介绍特定的搜索功能和查询语句,帮助您提升日志查询效率。
使用 matches_term
函数进行精确匹配
在 SQL 查询中,您可以使用 matches_term
函数执行精确的词语/短语匹配,这在日志分析中尤其实用。matches_term
函数支持对 String
类型列进行精确匹配。您也可以使用 @@
操作符作为 matches_term
的简写形式。下面是一个典型示例:
-- 使用 matches_term 函数
SELECT * FROM logs WHERE matches_term(message, 'error') OR matches_term(message, 'fail');
-- 使用 @@ 操作符(matches_term 的简写形式)
SELECT * FROM logs WHERE message @@ 'error' OR message @@ 'fail';
matches_term
函数专门用于精确匹配,使用方式如下:
text
:需要进行匹配的文本列,该列应包含String
类型的文本数据。term
:要匹配的词语或短语,遵循以下规则:- 区分大小写
- 匹配项必须由非字母数字字符(包括空格、标点符号等)或文本开头/结尾界定
- 支持完整词语匹配和短语匹配
查询语句示例
简单词语匹配
matches_term
函数执行精确词语匹配,这意味着它只会匹配由非字母数字字符或文本开头/ 结尾界定的完整词语。这对于在日志中查找特定的错误消息或状态码特别有用。
-- 使用 matches_term 函数
SELECT * FROM logs WHERE matches_term(message, 'error');
-- 使用 @@ 操作符
SELECT * FROM logs WHERE message @@ 'error';
此查询将返回所有 message
列中包含完整词语 "error" 的记录。该函数确保您不会得到部分匹配或词语内的匹配。
匹配和不匹配的示例:
- ✅ "An error occurred!" - 匹配,因为 "error" 是一个完整词语
- ✅ "Critical error: system failure" - 匹配,因为 "error" 由空格和冒号界定
- ✅ "error-prone" - 匹配,因为 "error" 由连字符界定
- ❌ "errors" - 不匹配,因为 "error" 是更大词语的一部分
- ❌ "error123" - 不匹配,因为 "error" 后面跟着数字
- ❌ "errorLogs" - 不匹配,因为 "error" 是驼峰命名词语的一部分