全部产品
Search
文档中心

云原生数据库 PolarDB:将AI模型推理结果写回数据库

更新时间:Apr 03, 2024

本文描述了如何通过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 原表

image.png

图2 AAT

image.png

在关系型数据库中引入并使用AAT会带来很多便捷之处。比如:对用户群体的划分、销售量的预测以及基于大模型生成内容等,都可以通过AAT在数据库中进行存储、计算和使用。AAT作为数据库外表,在使用上和数据库里面其他的表没有太大的差别。

通过AAT连接AI和数据库

通过以下示例,来描述如何通过AAT来连接AI和数据库。在实际使用过程中,请根据实际情况进行操作。

  1. 开启冷数据归档功能。

    为了避免AI模型对数据库的频繁写入,PolarDB将AAT作为外部表存储在OSS上。故需要先开启冷数据归档功能。

  2. 创建数据库

    创建一个新的数据库polar4ai,系统自动生成的AAT默认存储在数据库polar4ai中。创建数据库时,字符集选择utf8mb4,授权账号需要和PolarDB for AI使用的账号保持一致,并授予该账号读写权限。

  3. 通过以下SQL语句训练一个AI模型。

    	/*polar4ai*/
      CREATE MODEL airlines_gbm_copy1 
      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)
  4. 查看当前集群下的模型列表。

    /*polar4ai*/SHOW MODELS;

    查询结果如下:

    image.png

  5. 使用训练好的模型进行离线预测,自动生成AAT。

    /*polar4ai*/SELECT TripID,Delay
    FROM
      PREDICT (
        MODEL airlines_gbm_copy1,
          SELECT * FROM airlines_train_1000_copy1)
    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 lightgbm_v2_predict82201;

    其中,lightgbm_v2_predict82201为系统即将自动构建的AAT的表名,primary_key为表中的主键。离线预测SQL执行完成后,会返回一个任务ID。如:babc6d66-xxxx-yyyy-a4b8-1b1426ce8614

  6. 查看离线任务状态。

    通过离线任务ID来检查任务状态。当任务状态为finish时,代表AI模型已经完成相应的推理。

    /*polar4ai*/SHOW TASK `babc6d66-xxxx-yyyy-a4b8-1b1426ce8614`	

    执行结果如下:

    image.png

  7. 查看在polar4ai数据库下自动生成的AAT表结构。

    SHOW CREATE TABLE polar4ai.lightgbm_v2_predict82201;

    执行结果如下:

    CREATE TABLE `lightgbm_v2_predict82201` (
     `TripID` bigint(20) NOT NULL,
     `Delay` bigint(20) DEFAULT NULL,
     `result` text,
     PRIMARY KEY (`TripID`)
    ) ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ CONNECTION='default_oss_server'

    新生成的AAT与原表相对比,TripID和Delay的类型和长度均与原表一致。result为AI模型推理出来的结果,并作为原表的增强列写入了AAT中。

    image.png

  8. 查看AAT中的1000行数据。

    SELECT * FROM polar4ai.lightgbm_v2_predict82201 LIMIT 1000;

    执行结果如下:

    image.png

    由查询结果可以看出,新生成的result列包含预测值和不同类别的概率值。

  9. 通过AAT和数据库表进行连接操作。

    自动生成的表lightgbm_v2_predict82201与数据库中其他表在使用上并无差异,可以与数据库中的其他表进行连接操作。示例如下:

    SELECT * FROM 
    airlines_train_1000_copy1, polar4ai.lightgbm_v2_predict82204 
    WHERE 
    airlines_train_1000_copy1.TripID=polar4ai.lightgbm_v2_predict82204.TripID 
    AND 
    airlines_train_1000_copy1.Delay=1

    执行结果如下:

    image.png