本文描述了如何通过PolarDB for AI在数据库中生成含有AI模型推理列的数据表PolarDB for AI Augmented Table(下文简称AAT)。经过人工智能增强的数据表可广泛应用于Data+AI的多个场景,以协助用户进行数据洞察,并根据实际情况调整其决策。
什么是AAT
一张含有AI模型或推理数据列的表被称为AAT。示例如下:
图1中的表为原表。其中,TripID为主键,Airline、Flight、AirportFrom、AirportTo、DayOfWeek、Time和Length为一次航班飞行的相关信息。
图2中的表为图1中表的AAT,表中的result列是根据一个AI模型生成出来的结果。该表既包含了数据,又包含了AI推理生成结果。
PolarDB对图2中的数据库表进行充分利用,可以帮助用户来分析自己的航班有没有可能延误,也可以帮助航空公司来改进相关航班信息,提升它的准点率。
图1. 原表
图2. AAT
在关系型数据库中引入并使用AAT会带来很多便捷之处。比如:对用户群体的划分、销售量的预测以及基于大模型生成内容等,都可以通过AAT在数据库中进行存储、计算和使用。AAT作为数据库外表,在使用上和数据库里面其他的表没有太大的差别。
准备工作
开启冷数据归档:为了避免AI模型对数据库的频繁写入,PolarDB将AAT作为外部表存储在对象存储OSS上。因此需前往PolarDB控制台的 页面开启冷数据归档功能。
创建数据库:创建一个新的数据库
polar4ai
,系统自动生成的AAT将存储于数据库polar4ai
中。在创建数据库时,请选择字符集utf8mb4,并选择AI节点的连接数据库账号进行授权,授予该账号读写权限。
通过AAT连接AI和数据库
通过以下示例,来描述如何通过AAT来连接AI和数据库。在实际使用过程中,请根据实际情况进行操作。
创建一个AI模型。
/*polar4ai*/CREATE MODEL airlines_gbm WITH ( model_class='lightgbm', x_cols ='Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay', model_parameter=(boosting_type='gbdt', n_estimators=100, max_depth=8, num_leaves=256) ) AS (SELECT * FROM airlines_train)
查看当前集群下的模型列表。
/*polar4ai*/SHOW MODELS;
执行结果如下:
+--------------------+-------------+--------------+ | model_name | model_class | model_status | +--------------------+-------------+--------------+ | airlines_gbm | lightgbm | saved_oss | +--------------------+-------------+--------------+
使用创建好的模型进行离线推理,自动生成AAT。
/*polar4ai*/SELECT TripID,Delay FROM PREDICT (MODEL airlines_gbm, SELECT * FROM airlines_train) WITH ( s_cols='TripID,Delay', x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay', primary_key='TripID', mode='async', into_type='db' ) INTO airlines_gbm_predict;
其中,
airlines_gbm_predict
为系统即将自动构建的AAT的表名,primary_key
为表中的主键。离线推理SQL执行完成后,会返回一个任务ID。如:8c9e205a-42bc-11f0-b8ab-6300f792f4b8
。查看离线任务状态。
通过离线任务ID来检查任务状态。当任务状态为
finish
时,代表AI模型已经完成相应的推理。/*polar4ai*/SHOW TASK `8c9e205a-42bc-11f0-b8ab-6300f792f4b8`
执行结果如下:
+------------+---------------------------------------------------------------------------------------------------------------------------------------------+---------+----------------+----------------+--------+--------------+----------+ | taskStatus | filePath | results | startTime | endTime | errMsg | successBatch | allBatch | +------------+---------------------------------------------------------------------------------------------------------------------------------------------+---------+----------------+----------------+--------+--------------+----------+ | finish | http://db4ai-xxx.aliyuncs.com/xxx/polar4ai/airlines_gbm_predict-0.csv?security-token=xxx&OSSAccessKeyId=xxx&Expires=xxx&Signature=xxx | | 2025-04-21 xxx | 2025-04-21 xxx | | | | +------------+---------------------------------------------------------------------------------------------------------------------------------------------+---------+----------------+----------------+--------+--------------+----------+
查看在数据库
polar4ai
下自动生成的AAT表结构。SHOW CREATE TABLE polar4ai.airlines_gbm_predict;
执行结果如下:
+---------------------------+------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------------------------+------------------------------------------------------------------------------------------------------------+ | airlines_gbm_predict | CREATE TABLE `airlines_gbm_predict` ( `TripID` int(11) DEFAULT NULL, `Delay` tinyint(1) DEFAULT NULL, `result` text ) ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800010128 NULL_MARKER='NULL' */ CONNECTION='default_oss_server' | +---------------------------+------------------------------------------------------------------------------------------------------------+
新生成的AAT与原表相对比,
TripID
和Delay
的类型和长度均与原表一致。result
为AI模型推理出来的结果,并作为原表的增强列写入了AAT中。+----------------+--------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------------+--------------------------------------------------------------------------------------------------------------+ | airlines_train | CREATE TABLE `airlines_train` ( `TripID` int(11) NOT NULL AUTO_INCREMENT, `Airline` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `Flight` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, `AirportFrom` char(3) COLLATE utf8mb4_general_ci NOT NULL, `AirportTo` char(3) COLLATE utf8mb4_general_ci NOT NULL, `DayOfWeek` enum('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday') COLLATE utf8mb4_general_ci NOT NULL, `Time` time NOT NULL, `Length` int(11) NOT NULL, `Delay` tinyint(1) DEFAULT NULL, PRIMARY KEY (`TripID`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci | +----------------+--------------------------------------------------------------------------------------------------------------+
查看AAT中的数据。
SELECT * FROM polar4ai.airlines_gbm_predict;
执行结果如下,由查询结果可以看出,新生成的
result
列包含预测值和不同类别的概率值。+--------+-------+--------------------+ | TripID | Delay | result | +--------+-------+--------------------+ | 1 | 0 | 0;{0: 0.6, 1: 0.4} | | 2 | 1 | 0;{0: 0.6, 1: 0.4} | | 3 | 0 | 0;{0: 0.6, 1: 0.4} | | 4 | 1 | 0;{0: 0.6, 1: 0.4} | | 5 | 0 | 0;{0: 0.6, 1: 0.4} | | 6 | 0 | 0;{0: 0.6, 1: 0.4} | | 7 | 1 | 0;{0: 0.6, 1: 0.4} | | 8 | 0 | 0;{0: 0.6, 1: 0.4} | | 9 | 1 | 0;{0: 0.6, 1: 0.4} | | 10 | 0 | 0;{0: 0.6, 1: 0.4} | +--------+-------+--------------------+
通过AAT和数据库表进行连接操作。
自动生成的表
airlines_gbm_predict
与数据库中其他表在使用上并无差异,可以与数据库中的其他表进行连接操作。示例如下:SELECT * FROM airlines_train, polar4ai.airlines_gbm_predict WHERE airlines_train.TripID=polar4ai.airlines_gbm_predict.TripID AND airlines_train.Delay=1
执行结果如下:
+--------+--------------------+--------+-------------+-----------+-----------+----------+--------+-------+--------+-------+--------------------+ | TripID | Airline | Flight | AirportFrom | AirportTo | DayOfWeek | Time | Length | Delay | TripID | Delay | result | +--------+--------------------+--------+-------------+-----------+-----------+----------+--------+-------+--------+-------+--------------------+ | 2 | Delta Airlines | DL456 | LAX | ORD | Tuesday | 11:15:00 | 320 | 1 | 2 | 1 | 0;{0: 0.6, 1: 0.4} | | 4 | Southwest Airlines | SW012 | DFW | DEN | Thursday | 09:00:00 | 210 | 1 | 4 | 1 | 0;{0: 0.6, 1: 0.4} | | 7 | Qatar Airways | QR901 | DOH | JFK | Sunday | 13:45:00 | 860 | 1 | 7 | 1 | 0;{0: 0.6, 1: 0.4} | | 9 | Air France | AF567 | CDG | ORY | Tuesday | 18:30:00 | 60 | 1 | 9 | 1 | 0;{0: 0.6, 1: 0.4} | +--------+--------------------+--------+-------------+-----------+-----------+----------+--------+-------+--------+-------+--------------------+