本文描述了如何通過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作為外部表格儲存在Object Storage Service上。因此需前往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} | +--------+--------------------+--------+-------------+-----------+-----------+----------+--------+-------+--------+-------+--------------------+