跳到主要内容
版本:2.14.0

查找表(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:查找表数据源类型,可选值是queryfile,默认值为query;如果设置为query,则需要在AS <search_query>部分写明查询;如果设置为file,则不需要AS <search_query>
SOURCE_FORMAT:查找表数据源格式,当且仅当SOURCE_CATEGORYfile时生效;目前支持的格式是csv
SOURCE_PATH:查找表数据源路径,当且仅当SOURCE_CATEGORYfile时生效;可在文件管理查看文件路径
search_query:查找表将此查询返回的结果缓存在内存中,缓存的结果将在调用表函数
lookupmulti_lookup时使用

提示

HASH 规则中:

  • 可缺省

CIDR 规则中:

  • 目前仅支持 IPv4
  • 会检测 CIDRIPv4 格式是否正确
  • CIDRIPv4 元素可为空值,此时会按照空值进行 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 管理查找表

在数据目录页面下,有一个独立的标签页,用于管理查找表,如图所示。

lookup_table_mgmt

文件查找表

点击新建可以在弹出的窗口中新建一个查找表:

lookup_table_create

默认新建查找表类型为 'CSV文件'。您可以选择添加文件直接上传本地文件或直接在下方表格在线编辑填写CSV文件。

提示

在线编辑CSV文件

  • 文件默认名称为 default.csv,上传本地CSV文件后,将会自动回显本地CSV文件名称,您也可以对该CSV名称进行修改。
  • 点击全屏编辑按钮,可以进入全屏模式
    • 全屏模式下,每页条数修改为40条/页
    • 全屏模式下,将无法修改文件名称
    • 按ESC或点击右上角退出全屏即可退出全屏,退出全屏后,每页条数修改为10条/页
  • 可在右上角的搜索框内,输入任意字符,搜索对应的csv内容。当移动行、插入行、删除行时,都会重置搜索框
  • 表头、单元格拥有右键功能,可以实现列/行的删除/插入以及列的升/降序

lookup_table_create_csv

点击确定按钮完成创建查找表。

高级查找表

选择查找表类型为'高级查找表'时需要您输入查询语句。

lookup_table_create_query

  • 查询语句:查找表所执行的search query,会将结果更新到查找表。
  • 匹配字段:查找表中作为索引的字段,至少需要1个字段作为索引,最多5个。
  • 高级选项:针对查找表定义或匹配字段类型等进行设置
    • 匹配类型:可选等值匹配或IP网段匹配。
  • 延迟加载:查找表是否在第一次调用的时候才加载查询结果,选填,默认值为TRUE;如果设置为FALSE,则在定义之时就加载查询结果
  • 刷新计划:查找表可以定义一个自动刷新的计划,接受一个合法的Cron表达式。查看详细

可用操作

  • 刷新:立即运行查找表的查询语句,并将结果更新到查找表.
  • 在查询中打开:在查询页面中打开,查询查找表中当前的内容.

查找表使用场景简介

使用CSV文件创建查找表,富化字段

使用高级查找表优化查询