データベース外部に存在するデータに対して AI 推論を実行する場合、データを外部に移動し、スコアリングして結果を再び読み込むための別途パイプラインを構築・維持する必要があります。PolarDB for AI では、PolarDB for MySQL 内部で推論を実行し、その出力をクエリ可能なテーブルとして永続化することで、この課題を解消します。
出力は AI 拡張テーブル (AAT) に格納されます。これは、1 つ以上の列に AI モデルが生成した推論結果を含むテーブルです。AAT は主要なストレージエンジンではなく Object Storage Service (OSS) をバックエンドとして使用するため、AI モデルによるデータの頻繁な書き込みがデータベースに影響を与えることがありません。生成後は、他の外部テーブルと同様に動作します: SELECT でクエリ可能であり、既存のテーブルとの結合、および列のフィルタリングや集計も可能です。たとえば、AAT に格納されたデータを活用して、ユーザーグループの分類、売上金額の予測、AI 生成コンテンツの取得などを容易に行えます。
例:以下の表には、航空会社、ルート、出発時刻などの属性を含むフライト記録が含まれています。
図 1.元のテーブル

AAT では、モデルの予測結果を格納する result 列が追加されます。本例では、フライトが遅延する可能性があるかどうかを示す予測値です。
図 2.AI 推論結果を含む AAT

開始前の準備
開始する前に、以下の項目を確認してください。
ご利用の PolarDB for MySQL クラスターでコールドデータアーカイブが有効化されていること。AAT は OSS 外部テーブルとして保存されるため、この機能が必要です。「コールドデータアーカイブの有効化」をご参照ください。
polar4aiという名前のデータベースが、utf8mb4文字セットで存在すること。AAT はこのデータベースに自動的に書き込まれます。データベースアカウントは PolarDB for AI で使用されるアカウントと一致し、読み取りおよび書き込み権限を有している必要があります。「データベースの作成」をご参照ください。
AI モデルから AAT を生成する
以下の手順では、フライトデータを用いた LightGBM モデルのトレーニング、オフライン予測タスクの実行、および結果のクエリまでの一連の操作を説明します。
ステップ 1:モデルの作成
以下の文を実行して、airlines_gbm_copy1 という名前の LightGBM モデルを airlines_train テーブル上でトレーニングします。
/*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)ステップ 2:モデルの登録確認
/*polar4ai*/SHOW MODELS;出力には、データベースに登録済みのすべてのモデルが一覧表示されます。

ステップ 3: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;この文における主なパラメーターは以下のとおりです。
| パラメーター | 値 | 説明 |
|---|---|---|
mode | async | タスクを非同期で実行します。大規模な推論には長い時間がかかる場合があり、同期実行では接続がその間ブロックされます。 |
into_type | db | 出力をデータベースアクセス可能なテーブルに書き込みます。db を指定すると、SQL を用いたクエリや結合が可能になります。 |
primary_key | TripID | 生成される AAT のプライマリキーを設定します。 |
実行後、タスク ID が返されます。例: babc6d66-xxxx-yyyy-a4b8-1b1426ce8614。
lightgbm_v2_predict82201 は、自動的に作成される AAT の名前です。
ステップ 4:タスクのステータス確認
タスク ID を使用して進捗をモニターします。ステータスが finish になった時点で、モデルによる推論が完了し、AAT がクエリ可能になります。
/*polar4ai*/SHOW TASK `babc6d66-xxxx-yyyy-a4b8-1b1426ce8614`
ステップ 5: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'TripID および Delay 列のデータ型および長さは、元のテーブルと一致します。result 列にはモデルの推論出力が格納されます。ENGINE=CSV および CONNECTION='default_oss_server' は、このテーブルが OSS バックエンドの外部テーブルであることを示しています。
ステップ 6:AAT のクエリ
SELECT * FROM polar4ai.lightgbm_v2_predict82201 LIMIT 1000;
result 列には、予測結果およびその確率値が含まれます。
ステップ 7:AAT と他のテーブルの結合
AAT は通常のテーブルと同様に動作します。元のデータセットと結合して、結果のフィルタリングおよび分析を行います。
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
制限事項
AAT は主要なストレージエンジンではなく、OSS 外部テーブルとして保存されます。
polar4aiデータベースはutf8mb4文字セットを使用する必要があります。AAT の保存には、他の文字セットはサポートされていません。AAT の作成およびクエリに使用するデータベースアカウントは、PolarDB for AI で設定されたアカウントと一致し、明示的な読み取りおよび書き込み権限を有している必要があります。