在用户使用NL2SQL得到SQL语句后,通常希望得到这个SQL查询出的结果,同时能够展示一些更直观的结果,比如柱状图、饼图等。PolarDB的SQL2Chart方案可以执行用户的SQL,最后返回报表。

快速上手

PolarDB集群中,添加了AI节点后,可以使用SQL2Chart功能,把一条可以在PolarDB中执行的SQL转换为一张图片或者一段HTML片段。

假设在数据库中有张表为employee_salary,里面的内容为:

id

name

month

salary

1

张三

4月

2000.00

2

张三

5月

1500.00

3

李四

5月

1500.00

同时,我们创建了pattern表(该表用于PolarDB NL2SQL也用于PolarDB SQL2Chart):

DROP TABLE IF EXISTS `polar4ai_nl2sql_pattern`;
CREATE TABLE `polar4ai_nl2sql_pattern` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `pattern_question` text COMMENT '模板问题',
  `pattern_description` text COMMENT '模板描述',
  `pattern_sql` text COMMENT '模板SQL',
  `pattern_params` text COMMENT '模板参数',
  `chart_setting` text COMMENT '图表配置',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

pattern表中插入一条记录:

INSERT INTO `auto_test`.`polar4ai_nl2sql_pattern` (`id`, `pattern_question`, `pattern_description`, `pattern_sql`, `pattern_params`, `chart_setting`) VALUES (5, '#{name}4月份和5月份的工资分别是多少?', '【姓名】4月份和5月份的工资分别是多少?', 'select month,salary from employee_salary where name=#{name}', '[{\'table_name\':\'employee_salary\'}]','{\'chart_type\':\'bar\',\'x_axis\':\'month\',\'y_axis\':\'salary\',\'x_label\':\'月份\',\'y_label\':\'工资\',\'title\':\'月份工资图\'}');

那么,通过一条SQL就可以得到对应SQL的图片链接:

/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `month`,salary from employee_salary where name='张三') WITH (setting_table_name='polar4ai_nl2sql_pattern', setting_id='3', result_type='IMAGE')
说明

在这条SQL中,setting_id可以从NL2SQL的返回结果中得到。

示例:

/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_nl2sql, 
 SELECT '张三的工资是多少?') WITH (basic_index_name='schema_index',pattern_index_name='pattern_index',
 pattern_index_threshold=0.1,with_pattern_id=1);

执行以上SQL会返回SQL和pattern_id,返回的pattern_id可以用于SQL2Chart里的setting_id

返回对应SQL的图片链接:

http://db4ai-aiengine-cn-hangzhou-dataset-pre.oss-cn-hangzhou.aliyuncs.com/pc-2ze47ma2c515087l6/OSSAccessKeyId=xxxxxxx&Expires=1716130199&Signature=KvPFzfMebIEmqxPIXURurwwbsXM%3D

打开对应的链接就可以看到下面的图片:

image.png

PolarDB SQL2Chart支持两种模式:

  • 在线SQL2Chart:根据指定的SQL和指定的chart_setting,在线生成图片或者HTML,来展示指定SQL在数据库上的执行结果。

  • 离线SQL2Chart:根据指定的SQL,离线推理图片的类型和参数,生成图片或者HTML,展示指定SQL在数据库上的执行结果。

在线SQL2Chart

语法说明

  • 执行以下SQL,返回结果为HTML文件:

    /*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `month`,salary from employee_salary where name='张三') WITH (setting_table_name='polar4ai_nl2sql_pattern', setting_id='5', result_type='HTML')
    说明

    返回的链接不存在权限限制,仅存在时效限制,有效时间为1小时,过时将失效。

  • 执行以下SQL,返回结果为PNG图片:

    /*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `month`,salary from employee_salary where name='张三') WITH (setting_table_name='polar4ai_nl2sql_pattern', setting_id='5', result_type='IMAGE')

参数说明

  • setting_table_name为对应的chart_setting所在的pattern表;

  • setting_idchart_setting对应的id;

  • result_type为生成的图片的类型,可以为HTML或者IMAGE。

说明

sql_fetching=0表示直接使用传入的SQL,sql_fetching=1表示使用传入的SQL获取真正的SQL。

  • 示例1:

    /*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `month`,salary from employee_salary where name='张三') WITH (setting_table_name='polar4ai_nl2sql_pattern', setting_id='5', result_type='IMAGE',sql_fetching=0)

    该SQL代表直接使用select `month`,salary from employee_salary where name='张三'来画图。

  • 示例2:

    /*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select sql_text from msg_log where id=2) WITH (setting_table_name='polar4ai_nl2sql_pattern', setting_id='5', result_type='IMAGE',sql_fetching=1)

    该SQL代表从select sql_text from msg_log where id=2把SQL提取出来,然后用提取出来的SQL进行画图。

生成的图片支持饼图、折线图和柱状图。

生成饼图

语法说明

如果生成的是饼图,polar4ai_nl2sql_patternchart_setting样例参数如下所示:

{'chart_type':'pie','labels':'month','content':'salary','x_label':'月份','y_label':'工资','title':'月份工资图'}

参数说明

  • labels为查询结果中的对应为标签的列;

  • content为查询结果中对应为数据的列;

  • x_label为标签列的展示名称;

  • y_label为数据列的展示名称;

  • title为图片的标题。

针对样例数据和样例参数,执行如下SQL:

/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `month`,salary from employee_salary where name='张三') WITH (setting_table_name='polar4ai_nl2sql_pattern', setting_id='5', result_type='IMAGE')

执行后可生成下面的图片对应的链接:

image.png

生成折线图

语法说明

如果生成的是折线图,polar4ai_nl2sql_patternchart_setting样例参数如下所示:

{'chart_type':'line','x_axis':'month','y_axis':'salary','x_label':'月份','y_label':'工资','title':'月份工资图'}

参数说明

  • labels为查询结果中的对应为标签的列;

  • content为查询结果中对应为数据的列;

  • x_label为标签列的展示名称;

  • y_label为数据列的展示名称;

  • title为图片的标题。

针对样例数据和样例参数,执行如下SQL:

/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `month`,salary from employee_salary where name='张三') WITH (setting_table_name='polar4ai_nl2sql_pattern', setting_id='5', result_type='IMAGE')

执行后可生成下面的图片对应的链接:

image.png

生成柱状图

语法说明

如果生成的是柱状图,polar4ai_nl2sql_patternchart_setting样例参数如下所示:

{'chart_type':'bar','x_axis':'month','y_axis':'salary','x_label':'月份','y_label':'工资','title':'月份工资图'}

参数说明

  • labels为查询结果中的对应为标签的列;

  • content为查询结果中对应为数据的列;

  • x_label为标签列的展示名称;

  • y_label为数据列的展示名称;

  • title为图片的标题。

针对样例数据和样例参数,执行如下SQL:

/*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `month`,salary from employee_salary where name='张三') WITH (setting_table_name='polar4ai_nl2sql_pattern', setting_id='5', result_type='IMAGE')

执行后可生成下面的图片对应的链接:

image.png

离线SQL2Chart

语法说明

  • 执行以下SQL,返回结果为PNG文件:

    /*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `name` as `姓名`,salary as `薪水` from employee_salary where `month`='5月') WITH (mode='async', result_type='IMAGE')
  • 执行以下SQL,返回结果为HTML文件:

    /*polar4ai*/SELECT * FROM PREDICT (MODEL _polar4ai_data2chart, select `name` as `姓名`,salary as `薪水` from employee_salary where `month`='5月') WITH (mode='async', result_type='HTML')
    说明

    返回的链接不存在权限限制,仅存在时效限制,有效时间为1小时,过时将失效。

执行以上SQL会根据 select `name` as `姓名`,salary as `薪水` from employee_salary where `month`='5月' 选取需要转图表的数据,并开始数据转图表的离线任务。

说明

选取的数据量不能超过50列和10000行。

SQL执行完毕后会得到task_id,如bce632ea-97e9-11ee-bdd2-492f4dfe0918,之后执行以下SQL查看任务是否完成:

/*polar4ai*/show task `bce632ea-97e9-11ee-bdd2-492f4dfe0918`

当查询到taskStatusfinish时,可以通过filePath下载生成的图片。

参数说明

SQL_DATA2CHARTwith条件中,除了必须带有mode='async'外,还支持参数:

result_type:表示返回的图表类型,可选值范围为['IMAGE', 'HTML']。

  • 不填写时默认为'HTML',即返回的filePath链接为网页链接,在网页链接中可以进行图表格式的编辑;

  • 显示指定为'IMAGE'时,即result_type='IMAGE'时,返回的filePath链接为图片下载链接。

对于本例子中的结果为PNG图片的SQL,对应任务生成的图片样式如下所示:

image.png

扩展使用

SQL2Chart功能和NL2SQL功能联合使用,可以实现NL2Chart效果。