すべてのプロダクト
Search
ドキュメントセンター

:ユーザーガイド

最終更新日:Jun 21, 2026

RDS SQLFlow は AliSQL ベースの AI ソリューションです。フルマネージドサービスを提供し、機械学習の実装を簡素化します。組み込みの機械学習サービスと SQL 拡張により、RDS SQLFlow は AliSQL を AI エンジンに接続し、最小限の SQL コードでアプリケーションの背後にあるデータフローと AI 構造を記述できます。

ステップ 1: rds_sqlflow サービスの設定

  1. 以下のパラメーター設定で RDS Custom インスタンスを作成します。詳細な手順については、「RDS Custom インスタンスの作成」をご参照ください。

    • インスタンスタイプ セクションで、アーキテクチャAI ノード に設定します。

    • イメージ には、デフォルトイメージ 配下の [SQLFlow] を選択します。

  2. RDS Custom インスタンスと同じリージョンおよび VPC 内の Elastic Compute Service (ECS) インスタンスを使用して、ssh コマンドで接続します。詳細な手順については、「RDS Custom インスタンスへの接続」をご参照ください。

  3. /home/script ディレクトリに移動し、start_sqlflow.sh スクリプトを実行します。このスクリプトは、ローカルの MySQL プロセスを作成し、RDS SQLFlow コンテナを起動します。

    cd /home/script
    ./start_sqlflow.sh -P 50054 -u aliyun_rds -p aliyun_rds

    パラメーター:

    パラメーター

    説明

    -P

    RDS SQLFlow コンテナ内のポートにマッピングされるホストポート。デフォルト値は 50054 です。

    -u

    MySQL プロセスのユーザー名。デフォルト値は aliyun_rds です。

    -p

    MySQL ユーザーのパスワード。このパラメーターを指定しない場合、ランダムなパスワードが生成されます。

    出力:

    • トランスポート層セキュリティ (TLS) 証明書。証明書の内容をコピーし、クライアント側に ca.crt ファイルとして保存します。

    • クライアント接続コマンド。このコマンドを使用して RDS SQLFlow ノードに接続し、機械学習用のデータソースを指定できます。

    クライアント側で、以下の内容を ca.crt として保存してください:
    -----BEGIN CERTIFICATE-----
    xxx
    -----END CERTIFICATE-----
    次のコマンドを使用して SQLFlow に接続してください:
    sqlflow -c ca.crt -d'mysql://aliyun_rds:aliyun_rds@tcp(172.xxx.xxx.xxx:3306)/mysql?maxAllowedPacket=0' -s172.xxx.xxx.xxx:xxx:50054
    また、MySQL の設定を変更して、独自の MySQL に接続することもできます。

    結果の確認:次のコマンドを実行して、スクリプトの実行ステータスを確認します。

    • ps -ef | grep mysql コマンドを実行して、MySQL プロセスのステータスを確認します。

      [root@rc-xxx script]# ps -ef | grep mysql
      mysql    22669     1  0 09:52 ?        00:00:02 /home/u01/mysql80_current/bin/mysqld --defaults-file=/etc/my.cnf
      root     22811 21833  0 09:57 pts/0    00:00:00 grep --color=auto mysql
    • docker ps コマンドを実行して、RDS SQLFlow コンテナのステータスを確認します。

      [root@rc-xxx script]# docker ps
      CONTAINER ID    IMAGE                COMMAND            CREATED              STATUS              PORTS
      b8af67093420    rds-sqlflow:latest   "bash /start.sh"   About a minute ago   Up About a minute   50051/tcp, 0.0.0.0:50054->50052/tcp, [::]:50054->50052/tcp

ステップ 2: rds_sqlflow サービスへの接続

  1. RDS Custom インスタンスと同じリージョンおよび VPC 内の ECS インスタンスに RDS SQLFlow クライアントをインストールし、クライアントに実行権限を付与します。

    1. 次のいずれかの方法で RDS SQLFlow クライアントを取得できます。

      • RDS Custom インスタンスから、/home ディレクトリの RDS SQLFlow クライアントファイルをターゲット ECS インスタンスにコピーします。このチュートリアルでは、/home ディレクトリを例として使用します。

        scp /home/sqlflow root@<ECS_インスタンスのプライベートIPアドレス>:/home
      • ターゲット ECS インスタンスで、クライアントをダウンロードします。

        wget -O sqlflow "https://forsharelogs.oss-cn-beijing.aliyuncs.com/sqlflow?Expires=1729065153&OSSAccessKeyId=TMP.3KhXUKdnV6VCQmT15btm1k2tLRdWeBh26vq78fg2zJDLLfMAmrXYP2hWJKw64Wq7VWmLQLiMuCPCDiTv5ERnhL7a9e****&Signature=mgbW6Vh5q%2FP8aGxrzz0QtglBUxQ%3D"
    2. ターゲット ECS インスタンスで、sqlflow ファイルを実行可能にします。

      cd /home
      chmod +x sqlflow
    3. ターゲット ECS インスタンスで ca.crt ファイルを作成し、ステップ 1 で生成した TLS 証明書の内容を貼り付けます。

      vim ca.crt
  2. ステップ 1start_sqlflow.sh スクリプトを実行したときに生成されたクライアント接続コマンドを使用して、rds_sqlflow サービスに接続します。たとえば、sqlflow クライアントが /home ディレクトリにインストールされている場合は、次のコマンドを実行します。

    /home/sqlflow -c ca.crt -d'mysql://user:password@tcp(mysqlHost:mysqlPort)/mysql?maxAllowedPacket=0' -ssqlflowHost:sqlflowPort

    パラメーター:

    パラメーター

    説明

    -c

    ステップ 1 で生成された証明書ファイル。

    -d

    RDS SQLFlow の MySQL データソースを指定します。例: 'mysql://user:password@tcp(mysqlHost:mysqlPort)/mysql?maxAllowedPacket=0'

    • user: MySQL データソースのユーザー名。

    • password: MySQL データソースユーザーのパスワード。

    • mysqlHost: MySQL データソースのエンドポイント。

    • mysqlPort: MySQL データソースのポート番号。

    説明

    デフォルトでは、ステップ 1 で生成されたクライアント接続コマンドは、RDS SQLFlow サーバーで実行されている MySQL サービスを使用します。データソースとして、別の MySQL サービスのエンドポイントを指定することも可能です。

    -s

    RDS SQLFlow サーバーのエンドポイントを指定します。例: sqlflowHost:sqlflowPort

    • sqlflowHost: RDS SQLFlow サーバーのエンドポイント。これは RDS Custom インスタンスのプライベート IP アドレスです。

    • sqlflowPort: RDS SQLFlow サーバーのポート番号。

    例:

    /home/sqlflow -c ca.crt -d'mysql://aliyun_rds:aliyun@tcp(47.XXX.XXX.153:3306)/mysql?maxAllowedPacket=0' -s172.XXX.XXX.180:50054

    Welcome to SQLFlow というメッセージは、接続に成功し、SQLFlow CLI が起動したことを示します。

ステップ 3: データの準備

RDS SQLFlow では、機械学習のために MySQL データソースが必要です。

説明

MySQL データソースは、RDS SQLFlow サーバーで実行されている MySQL データベース、または ApsaraDB RDS for MySQL インスタンスなどの別の MySQL データベースを使用できます。

このチュートリアルでは、RDS SQLFlow サーバー上の MySQL データベースを使用して Iris データセットを構築し、TensorFlow DNNClassifier アルゴリズムをトレーニングします。DNNClassifier は、1 次元のデータを入力として使用し、解釈が困難な複雑な内部パターンを持つ大規模なデータセットの分類に適しています。

このチュートリアルの Iris データセットには、4 つの特徴と 1 つのラベルが含まれています。4 つの特徴は、各アヤメの花の植物形態を記述し、浮動小数点数として表されます。ラベルは、各アヤメの花の亜種を 0、1、または 2 の整数で表します。TensorFlow では、特徴列は、データ内の列と、モデルのトレーニングに使用される特徴との間の橋渡しとして機能します。TensorFlow は、複数のタイプの特徴列を提供します。詳細については、「TensorFlow の公式ドキュメント」をご参照ください。以下の表は、Iris データセットの列を説明しています。

名前

タイプ

説明

sepal_length

FLOAT

特徴。がくの長さ。単位:cm。

sepal_width

FLOAT

特徴。がくの幅。単位:cm。

petal_length

FLOAT

特徴。花びらの長さ。単位:cm。

petal_width

FLOAT

特徴。花びらの幅。単位:cm。

class

int

ラベル。亜種のカテゴリー。有効値:0、1、2。

SQLFlow CLI で、次の SQL ステートメントを実行して、機械学習用のトレーニングデータセットと評価データセットを作成します。

トレーニングデータセット

CREATE DATABASE IF NOT EXISTS iris;
DROP TABLE IF EXISTS iris.train;
CREATE TABLE iris.train (
       sepal_length FLOAT,
       sepal_width  FLOAT,
       petal_length FLOAT,
       petal_width  FLOAT,
       class int);
INSERT INTO iris.train VALUES(6.4,2.8,5.6,2.2,2);
INSERT INTO iris.train VALUES(5.0,2.3,3.3,1.0,1);
INSERT INTO iris.train VALUES(4.9,2.5,4.5,1.7,2);
INSERT INTO iris.train VALUES(4.9,3.1,1.5,0.1,0);
INSERT INTO iris.train VALUES(5.7,3.8,1.7,0.3,0);
INSERT INTO iris.train VALUES(4.4,3.2,1.3,0.2,0);
INSERT INTO iris.train VALUES(5.4,3.4,1.5,0.4,0);
INSERT INTO iris.train VALUES(6.9,3.1,5.1,2.3,2);
INSERT INTO iris.train VALUES(6.7,3.1,4.4,1.4,1);
INSERT INTO iris.train VALUES(5.1,3.7,1.5,0.4,0);
INSERT INTO iris.train VALUES(5.2,2.7,3.9,1.4,1);
INSERT INTO iris.train VALUES(6.9,3.1,4.9,1.5,1);
INSERT INTO iris.train VALUES(5.8,4.0,1.2,0.2,0);
INSERT INTO iris.train VALUES(5.4,3.9,1.7,0.4,0);
INSERT INTO iris.train VALUES(7.7,3.8,6.7,2.2,2);
INSERT INTO iris.train VALUES(6.3,3.3,4.7,1.6,1);
INSERT INTO iris.train VALUES(6.8,3.2,5.9,2.3,2);
INSERT INTO iris.train VALUES(7.6,3.0,6.6,2.1,2);
INSERT INTO iris.train VALUES(6.4,3.2,5.3,2.3,2);
INSERT INTO iris.train VALUES(5.7,4.4,1.5,0.4,0);
INSERT INTO iris.train VALUES(6.7,3.3,5.7,2.1,2);
INSERT INTO iris.train VALUES(6.4,2.8,5.6,2.1,2);
INSERT INTO iris.train VALUES(5.4,3.9,1.3,0.4,0);
INSERT INTO iris.train VALUES(6.1,2.6,5.6,1.4,2);
INSERT INTO iris.train VALUES(7.2,3.0,5.8,1.6,2);
INSERT INTO iris.train VALUES(5.2,3.5,1.5,0.2,0);
INSERT INTO iris.train VALUES(5.8,2.6,4.0,1.2,1);
INSERT INTO iris.train VALUES(5.9,3.0,5.1,1.8,2);
INSERT INTO iris.train VALUES(5.4,3.0,4.5,1.5,1);
INSERT INTO iris.train VALUES(6.7,3.0,5.0,1.7,1);
INSERT INTO iris.train VALUES(6.3,2.3,4.4,1.3,1);
INSERT INTO iris.train VALUES(5.1,2.5,3.0,1.1,1);
INSERT INTO iris.train VALUES(6.4,3.2,4.5,1.5,1);
INSERT INTO iris.train VALUES(6.8,3.0,5.5,2.1,2);
INSERT INTO iris.train VALUES(6.2,2.8,4.8,1.8,2);
INSERT INTO iris.train VALUES(6.9,3.2,5.7,2.3,2);
INSERT INTO iris.train VALUES(6.5,3.2,5.1,2.0,2);
INSERT INTO iris.train VALUES(5.8,2.8,5.1,2.4,2);
INSERT INTO iris.train VALUES(5.1,3.8,1.5,0.3,0);
INSERT INTO iris.train VALUES(4.8,3.0,1.4,0.3,0);
INSERT INTO iris.train VALUES(7.9,3.8,6.4,2.0,2);
INSERT INTO iris.train VALUES(5.8,2.7,5.1,1.9,2);
INSERT INTO iris.train VALUES(6.7,3.0,5.2,2.3,2);
INSERT INTO iris.train VALUES(5.1,3.8,1.9,0.4,0);
INSERT INTO iris.train VALUES(4.7,3.2,1.6,0.2,0);
INSERT INTO iris.train VALUES(6.0,2.2,5.0,1.5,2);
INSERT INTO iris.train VALUES(4.8,3.4,1.6,0.2,0);
INSERT INTO iris.train VALUES(7.7,2.6,6.9,2.3,2);
INSERT INTO iris.train VALUES(4.6,3.6,1.0,0.2,0);
INSERT INTO iris.train VALUES(7.2,3.2,6.0,1.8,2);
INSERT INTO iris.train VALUES(5.0,3.3,1.4,0.2,0);
INSERT INTO iris.train VALUES(6.6,3.0,4.4,1.4,1);
INSERT INTO iris.train VALUES(6.1,2.8,4.0,1.3,1);
INSERT INTO iris.train VALUES(5.0,3.2,1.2,0.2,0);
INSERT INTO iris.train VALUES(7.0,3.2,4.7,1.4,1);
INSERT INTO iris.train VALUES(6.0,3.0,4.8,1.8,2);
INSERT INTO iris.train VALUES(7.4,2.8,6.1,1.9,2);
INSERT INTO iris.train VALUES(5.8,2.7,5.1,1.9,2);
INSERT INTO iris.train VALUES(6.2,3.4,5.4,2.3,2);
INSERT INTO iris.train VALUES(5.0,2.0,3.5,1.0,1);
INSERT INTO iris.train VALUES(5.6,2.5,3.9,1.1,1);
INSERT INTO iris.train VALUES(6.7,3.1,5.6,2.4,2);
INSERT INTO iris.train VALUES(6.3,2.5,5.0,1.9,2);
INSERT INTO iris.train VALUES(6.4,3.1,5.5,1.8,2);
INSERT INTO iris.train VALUES(6.2,2.2,4.5,1.5,1);
INSERT INTO iris.train VALUES(7.3,2.9,6.3,1.8,2);
INSERT INTO iris.train VALUES(4.4,3.0,1.3,0.2,0);
INSERT INTO iris.train VALUES(7.2,3.6,6.1,2.5,2);
INSERT INTO iris.train VALUES(6.5,3.0,5.5,1.8,2);
INSERT INTO iris.train VALUES(5.0,3.4,1.5,0.2,0);
INSERT INTO iris.train VALUES(4.7,3.2,1.3,0.2,0);
INSERT INTO iris.train VALUES(6.6,2.9,4.6,1.3,1);
INSERT INTO iris.train VALUES(5.5,3.5,1.3,0.2,0);
INSERT INTO iris.train VALUES(7.7,3.0,6.1,2.3,2);
INSERT INTO iris.train VALUES(6.1,3.0,4.9,1.8,2);
INSERT INTO iris.train VALUES(4.9,3.1,1.5,0.1,0);
INSERT INTO iris.train VALUES(5.5,2.4,3.8,1.1,1);
INSERT INTO iris.train VALUES(5.7,2.9,4.2,1.3,1);
INSERT INTO iris.train VALUES(6.0,2.9,4.5,1.5,1);
INSERT INTO iris.train VALUES(6.4,2.7,5.3,1.9,2);
INSERT INTO iris.train VALUES(5.4,3.7,1.5,0.2,0);
INSERT INTO iris.train VALUES(6.1,2.9,4.7,1.4,1);
INSERT INTO iris.train VALUES(6.5,2.8,4.6,1.5,1);
INSERT INTO iris.train VALUES(5.6,2.7,4.2,1.3,1);
INSERT INTO iris.train VALUES(6.3,3.4,5.6,2.4,2);
INSERT INTO iris.train VALUES(4.9,3.1,1.5,0.1,0);
INSERT INTO iris.train VALUES(6.8,2.8,4.8,1.4,1);
INSERT INTO iris.train VALUES(5.7,2.8,4.5,1.3,1);
INSERT INTO iris.train VALUES(6.0,2.7,5.1,1.6,1);
INSERT INTO iris.train VALUES(5.0,3.5,1.3,0.3,0);
INSERT INTO iris.train VALUES(6.5,3.0,5.2,2.0,2);
INSERT INTO iris.train VALUES(6.1,2.8,4.7,1.2,1);
INSERT INTO iris.train VALUES(5.1,3.5,1.4,0.3,0);
INSERT INTO iris.train VALUES(4.6,3.1,1.5,0.2,0);
INSERT INTO iris.train VALUES(6.5,3.0,5.8,2.2,2);
INSERT INTO iris.train VALUES(4.6,3.4,1.4,0.3,0);
INSERT INTO iris.train VALUES(4.6,3.2,1.4,0.2,0);
INSERT INTO iris.train VALUES(7.7,2.8,6.7,2.0,2);
INSERT INTO iris.train VALUES(5.9,3.2,4.8,1.8,1);
INSERT INTO iris.train VALUES(5.1,3.8,1.6,0.2,0);
INSERT INTO iris.train VALUES(4.9,3.0,1.4,0.2,0);
INSERT INTO iris.train VALUES(4.9,2.4,3.3,1.0,1);
INSERT INTO iris.train VALUES(4.5,2.3,1.3,0.3,0);
INSERT INTO iris.train VALUES(5.8,2.7,4.1,1.0,1);
INSERT INTO iris.train VALUES(5.0,3.4,1.6,0.4,0);
INSERT INTO iris.train VALUES(5.2,3.4,1.4,0.2,0);
INSERT INTO iris.train VALUES(5.3,3.7,1.5,0.2,0);
INSERT INTO iris.train VALUES(5.0,3.6,1.4,0.2,0);
INSERT INTO iris.train VALUES(5.6,2.9,3.6,1.3,1);
INSERT INTO iris.train VALUES(4.8,3.1,1.6,0.2,0);

評価データセット

DROP TABLE IF EXISTS iris.test;
CREATE TABLE iris.test (
       sepal_length FLOAT,
       sepal_width  FLOAT,
       petal_length FLOAT,
       petal_width  FLOAT,
       class int);
INSERT INTO iris.test VALUES(6.3,2.7,4.9,1.8,2);
INSERT INTO iris.test VALUES(5.7,2.8,4.1,1.3,1);
INSERT INTO iris.test VALUES(5.0,3.0,1.6,0.2,0);
INSERT INTO iris.test VALUES(6.3,3.3,6.0,2.5,2);
INSERT INTO iris.test VALUES(5.0,3.5,1.6,0.6,0);
INSERT INTO iris.test VALUES(5.5,2.6,4.4,1.2,1);
INSERT INTO iris.test VALUES(5.7,3.0,4.2,1.2,1);
INSERT INTO iris.test VALUES(4.4,2.9,1.4,0.2,0);
INSERT INTO iris.test VALUES(4.8,3.0,1.4,0.1,0);
INSERT INTO iris.test VALUES(5.5,2.4,3.7,1.0,1);

ステップ 4: モデルのトレーニング

SQLFlow CLI で、次の SQL ステートメントを実行して、3 クラスの DNNClassifier モデルをトレーニングします。このモデルには、それぞれ 100 個のノードを持つ 2 つの隠れ層があります。オプティマイザの学習率は 0.1 で、トレーニングは 10 エポック実行されます。

CREATE DATABASE IF NOT EXISTS sqlflow_models; 
SELECT * FROM iris.train  -- iris.train をトレーニングデータセットとして指定します。
  TO TRAIN DNNClassifier WITH
  model.n_classes = 3,  -- クラス数を 3 に設定します。
  model.hidden_units = [100, 100], -- それぞれ 100 ユニットを持つ 2 つの隠れ層を指定します。
  optimizer.learning_rate=0.1, -- 学習率を 0.1 に設定します。
  train.epoch = 10  -- トレーニングエポック数を 10 に設定します。
COLUMN sepal_length, sepal_width, petal_length, petal_width  -- 特徴列を指定します。
LABEL class  -- ラベル列を class として指定します。
INTO sqlflow_models.my_dnn_model;  -- 学習済みモデルを指定されたテーブルに保存します。 

ステップ 5: モデルの評価

  1. iris.test データセットを使用して sqlflow_models.my_dnn_model モデルを評価します。評価結果は sqlflow_models.evaluate_result_table テーブルに保存されます。

    SELECT * FROM iris.test 
    TO EVALUATE sqlflow_models.my_dnn_model 
    WITH validation.metrics = Accuracy 
    LABEL class  
    INTO sqlflow_models.evaluate_result_table;
  2. 評価が完了したら、次の SQL ステートメントを実行して結果を表示します。これらの結果に基づいて、モデルのパラメーターを微調整できます。

    SELECT * FROM sqlflow_models.evaluate_result_table;

    結果:

    +----------------------+----------+
    |         LOSS         | ACCURACY |
    +----------------------+----------+
    | 0.035312581807374954 |        1 |
    +----------------------+----------+

ステップ 6: 予測の実行

  1. sqlflow_models.my_dnn_model モデルを使用して予測を実行します。結果は iris.predict テーブルの class 列に書き込まれます。予測ステートメントは次のとおりです。

    SELECT * FROM iris.test 
    TO PREDICT iris.predict.class 
    USING sqlflow_models.my_dnn_model;
  2. 予測が完了したら、次の SQL ステートメントを実行して結果を表示します。

    SELECT * FROM iris.predict LIMIT 5;

    結果:

    +--------------+-------------+--------------+-------------+-------+
    | SEPAL LENGTH | SEPAL WIDTH | PETAL LENGTH | PETAL WIDTH | CLASS |
    +--------------+-------------+--------------+-------------+-------+
    |          6.3 |         2.7 |          4.9 |         1.8 |     2 |
    |          5.7 |         2.8 |          4.1 |         1.3 |     1 |
    |            5 |           3 |          1.6 |         0.2 |     0 |
    |          6.3 |         3.3 |            6 |         2.5 |     2 |
    |            5 |         3.5 |          1.6 |         0.6 |     0 |
    +--------------+-------------+--------------+-------------+-------+

関連ドキュメント

RDS Custom の概要