查找表(Lookup Table)
查找表可将指定查询的结果缓存在内存当中,用于快速查找索引值对应的条目。
注意: 通常情况下,查找表的字段和条目都不宜过多,否则会长期占用大量内存导致整个系统内存紧张。
查找表视频教程
查找表管理 SQL 语法
查找表的增删改查均可通过 SQL 语句进行操作。
创建查找表
CREATE LOOKUP TABLE <lookup_table_name>
WITH (KEYS='<key0>[:type0][, <key1>[:type1], ...]'
[,
SOURCE_CATEGORY='<str>',
SOURCE_FORMAT='<str>',
SOURCE_PATH='<str>'])
[AS <search_query>]
lookup_table_name
:定义查找表的名字
KEYS
:查找表中作为匹配的字段,至少需要1个字段作为索引,最多5个;同时支持设置数据匹配规则,目前支持 [HASH
,CIDR
] 两种,分别代表:等值匹配、IP 网段匹配
SOURCE_CATEGORY
:查找表数据源类型,可选值是query
和file
,默认值为query
;如果设置为query
,则需要在AS <search_query>
部分写明查询;如果设置为file
,则不需要AS <search_query>
SOURCE_FORMAT
:查找表数据源格式,当且仅当SOURCE_CATEGORY
是file
时生效;目前支持的格式是csv
SOURCE_PATH
:查找表数据源路径,当且仅当SOURCE_CATEGORY
是file
时生效;可在文件管理查看文件路径
search_query
:查找表将此查询返回的结果缓存在内存中,缓存的结果将在调用表函数
lookup
或multi_lookup
时使用
HASH
规则中:
- 可缺省
CIDR
规则中:
- 目前仅支持 IPv4
- 会检测
CIDR
和IPv4
格式是否正确 CIDR
和IPv4
元素可为空值,此时会按照空值进行 sql 规则匹配
如若未标注类型,则默认使用等值匹配规则
-- 创建查找表 code_lookup
CREATE LOOKUP TABLE code_lookup WITH(KEYS='request_method')
AS SELECT request_method, code FROM load_csv('path/to/csv/file')等价于
-- 创建查找表 code_lookup
CREATE LOOKUP TABLE code_lookup WITH(KEYS='request_method:HASH')
AS SELECT request_method, code FROM load_csv('path/to/csv/file')
示例1,创建 query 类型的 lookup table
-- 创建查找表 code_lookup
CREATE LOOKUP TABLE code_lookup WITH(KEYS='request_method')
AS SELECT request_method, code FROM load_csv('path/to/csv/file')
-- 得到内存中的缓存表内容如下
|request_method|code|
---------------------
|GET |200 |
|POST |201 |
-- 调用`lookup`表函数
SELECT * FROM lookup('code_lookup', 'GET')
-- 得到查询结果
|request_method|code|
---------------------
|GET |200 |
示例2,创建 file 类型 csv 格式的 lookup table
-- 创建查找表 code_lookup
CREATE LOOKUP TABLE code_lookup WITH(KEYS='request_method',
SOURCE_CATEGORY='file', SOURCE_FORMAT='csv', SOURCE_PATH='path/to/csv/file')
-- 得到内存中的缓存表内容如下
|request_method|code|
---------------------
|GET |200 |
|POST |201 |
-- 调用`lookup`表函数
SELECT * FROM lookup('code_lookup', 'GET')
-- 得到查询结果
|request_method|code|
---------------------
|GET |200 |
更新查找表
CREATE OR REPLACE LOOKUP TABLE <lookup_table_name>
WITH (KEYS='<key0>[:type0][, <key1>[:type1], ...]'
[,
SOURCE_CATEGORY='<str>',
SOURCE_FORMAT='<str>',
SOURCE_PATH='<str>'])
[AS <search_query>]
使用方法类似上述创建查找表
刷新查找表
REFRESH LOOKUP TABLE <lookup_table_name>
重新执行查找表定义中的查询,刷新查找表的缓存
删除查找表
DROP LOOKUP TABLE <lookup_table_name>
删除指定名称的查找表,并清空内存中对应的缓存
展示查找表
SHOW LOOKUP TABLES
SHOW FULL LOOKUP TABLES
展示所有已创建的查找表
FULL
:展示查找表的详细信息
从 UI 管理查找表
在数据目录页面下,有一个独立的标签页,用于管理查找表,如图所示。
文件查找表
点击新建可以在弹出的窗口中新建一个查找表:
默认新建查找表类型为 'CSV文件'。 填写查找表名字,上传您的CSV文件之后可以预览结果,并选择字段作为匹配字段。
点击确定按钮完成创建查找表。
高级查找表
选择查找表类型为'高级查找表'时需要您输入查询语句。
- 查询语句:查找表所执行的search query,会将结果更新到查找表。
- 匹配字段:查找表中作为索引的字段,至少需要1个字段作为索引,最多5个。
- 高级选项:针对查找表定义或匹配字段类型等进行设置
- 匹配类型:可选等值匹配或IP网段匹配。
- 延迟加载:查找表是否在第一次调用的时候才加载查询结果,选填,默认值为TRUE;如果设置为FALSE,则在定义之时就加载查询结果
- 刷新计划:查找表可以定义一个自动刷新的计划,接受一个合法的Cron表达式。查看详细
可用操作
- 刷新:立即运行查找表的查询语句,并将结果更新到查找表.
- 在查询中打开:在查询页面中打开,查询查找表中当前的内容.