SQL2Chart(旧版)

用户使用NL2SQL得到SQL语句后,通常希望得到这个SQL查询出的结果,同时能够展示一些更直观的结果,比如柱状图、饼图等。PolarDBSQL2Chart方案能够执行用户提供的SQL语句,并将查询结果转化为动态报表,帮助用户更高效地理解和分析数据。

说明

为了让您更好的体验SQL2Chart的效果,PolarDB已推出自然语言生成智能图表 NL2Chart功能。

快速上手

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会返回SQLpattern_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

语法说明

返回结果为HTML文件

执行以下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小时,过时将失效。

返回结果为PNG图片

执行以下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_id

chart_setting对应的id。

result_type

生成的图片的类型,可以为HTMLIMAGE。

sql_fetching

  • sql_fetching=0(默认值):表示直接使用传入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',sql_fetching=0)

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

  • sql_fetching=1:表示使用传入的SQL获取真正的SQL。

    示例如下:

    /*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=2SQL提取出来,然后用提取出来的SQL进行画图。

生成为饼图

语法说明

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

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

参数说明

参数名称

参数描述

labels

查询结果中对应为标签的列,用于分类或分组。

content

查询结果中对应为数据的列,用于展示具体数值或内容。

x_label

标签列的展示名称,用于图表中x轴的标签。

y_label

数据列的展示名称,用于图表中y轴的标签。

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

标签列的展示名称,用于图表中x轴的标签。

y_label

数据列的展示名称,用于图表中y轴的标签。

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

标签列的展示名称,用于图表中x轴的标签。

y_label

数据列的展示名称,用于图表中y轴的标签。

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

语法说明

返回结果为PNG文件

执行以下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')

返回结果为HTML文件

执行以下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效果。

    OSZAR »