使用说明
为了让不熟悉SQL语言的用户能方便地从数据库中取数分析,PolarDB for AI联合达摩院推出自研的自然语言到数据库查询语言转义(Nature Language To SQL,简称NL2SQL)解决方案。PolarDB for AI会将用户输入的自然语言(中文或英文)自动转化成所需要的SQL语句,用户只需要执行生成的SQL语句,即可完成一系列查询操作。
目前,NL2SQL处于公测阶段。公测结束日期为2023年9月30日。
前提条件
已通过PolarDB MySQL版的集群地址连接数据库集群。
使用限制
SQL语句限制:
目前只支持DML语句(基本查询、聚合、分组、排序、谓词、嵌套、集合、JOIN、计算等)。
支持的SQL语法如下:
QUERY → AQUERY | AQUERY INTERSECT QUERY | AQUERY UNION QUERY | AQUERY EXCEPT QUERY AQUERY → SELECT TERM+ FROM [table_name|QUERY]+ (WHERE COND (CON COND)*)? (GROUP BY TERM+)? (HAVING COND (CON COND)*)? (ORDER BY TERM+)? (LIMIT number_value)? COND → TERM OP VALUE TERM → AGG? DISTINCT? [*|column_name] (COP column_name)? VALUE → text_value | number_value | QUERY AGG → MAX | MIN | SUM | AVG | COUNT OP → BETWEEN | = | > | < | >= | <= | != | IN | LIKE | NOT IN | NOT LIKE | EXISTS | IS COP → + | - | * | / CON → AND | OR
参数说明见下表:
参数名称
参数说明
QUERY
SQL语句。
AQUERY
原子粒度、不可再分的子查询语句(不包含嵌套、集合操作等)。
COND
查询条件。
VALUE
条件值。
AGG
聚合函数。
OP
条件操作符。
COP
列运算符。
CON
逻辑运算符。
table_name
表名。
column_name
列名。
text_value
字符串类型的值。
number_value
数值类型的值。
数据库中表的列数限制:
中文环境下,数据库中表的总列数不超过300列。
英文环境下,数据库中表的总列数不超过100列。
地域限制:仅支持在中国内地使用NL2SQL。
COMMENT限制:
中文环境下,表名和列名的COMMENT为中文。
英文环境下,表名和列名的COMMENT为英文。
注意事项
少量NL2SQL结果会不准确,且并发过高的情况下会引发NL2SQL可用性问题。
为了提高NL2SQL结果的准确性,使得查询结果达到预期效果,在使用NL2SQL前,需要针对性规范化配置表信息和问句。
配置项
为了适配不同行业的个性化需求,NL2SQL提供了一系列配置项,来帮助用户获得更好的使用体验。
配置方式
根据如下建表语句,在数据库中建立polar4ai_nl2sql_config
表,添加配置项。
CREATE TABLE `polar4ai_nl2sql_config` (
`config_type` int(11) NOT NULL,
`config_key` varchar(1024) NOT NULL,
`config_value` text NOT NULL
)
其中涉及的配置参数说明如下表:
配置参数说明
参数名称 | 参数说明 |
config_type | 配置类型。取值如下:
|
config_key | 配置项的key。取值如下:
|
config_value | 配置项的value。取值需要为JSON字符串格式。 说明 当config_key为领域术语的key值时,config_value是config_key对应的替换词,取值必须是以英文分号拼接成的字符串,具体说明见下表。 |
具体配置示例如下表:
config_type | config_key | config_value取值说明 | config_value样例 |
0 | time_format_type |
| 0 |
0 | time_format_str | 需要按Python的格式标准指定时间格式。 例如:
| %Y-%m-%d %H:%M:%S |
0 | datetime_columns | 指示分区表里的时间,默认分别为日期和时间段,date和time_period各对应一个长度为2的列表: ["描述名", “表名.列名”]。
说明
| [ "date": ["日期","table.date"], "time_period": ["时间段", null] ] |
0 | time_now | 表示当前问题中提出的时间。默认是当前时间,也可以用来指定日期。 | 2023-06-14: 00:00:00 |
0 | default_conds | 表示用户问题的默认条件,以列表形式呈现,每个值是一个条件。 例如: 店家问店铺销量,默认条件是自己的店铺,那么条件应该是"shop.shop_name = ''ABC"。 | [ "table_name.column_name = ''ABC" ] |
0 | integrated | 表示是否需要将生成的SQL进行合并。
| 0 |
1 | 进销存 | 领域术语配置。config_key列中表示专有的领域词汇,如“销冠”“进销存”等,config_value写入标准化的描述,对应的是表的相关列说明。如果在用户问题中出现了config_key的词,会替换成相应的config_value中的词。 例如:
| 进货情况; 销售情况; 存货情况 |
当具体取值在上述取值范围外时,所取值将被无视。
当config_value设置有误时,将会报出错误提示。
完整配置示例
场景一:假设用户指定日期是2023年8月1号,则可进行如下配置:
config_type
config_type
config_value
0
time_now
2023-08-01: 00:00:00
按照如上配置,那么用户问题中“今天”就是指2023年的8月1号。
场景二:假设用户问店铺销量,默认条件是自己的店铺(店铺名:shop_name="ABC"),则可进行如下配置:
config_type
config_type
config_value
0
default_conds
"shop.shop_name = ''ABC"
按照如上配置,那么用户问题的默认条件就变成自己的店铺名“ABC”。
场景三:假设用户会通过自然语言去筛选店里的销冠,则可进行如下配置:
config_type
config_type
config_value
1
销冠
销售量排名最高的店员;总销售金额排名最高的店员
按照如上配置,如果在用户问题中出现了“销冠”,会替换成“销售量排名最高的店员;总销售金额排名最高的店员”。
场景四:假设用户会通过自然语言去筛选订单的销售情况,则可进行如下配置:
config_type
config_type
config_value
1
孖单
销售量超过1的订单
按照如上配置,如果在用户问题中出现“孖单”,会替换成“销售量超过1的订单”。