All Products
Search
Document Center

:Panduan pengguna

Last Updated:Jun 21, 2026

RDS SQLFlow adalah solusi AI berbasis AliSQL yang menyediakan layanan terkelola penuh untuk menyederhanakan implementasi pembelajaran mesin. Dengan ekstensi SQL dan kemampuan pembelajaran mesin bawaan, RDS SQLFlow menghubungkan AliSQL ke mesin AI, memungkinkan Anda menggambarkan alur data dan konstruksi AI di balik aplikasi menggunakan kode SQL minimal.

Langkah 1: Siapkan layanan rds_sqlflow

  1. Buat instans RDS Custom dengan pengaturan parameter berikut. Untuk instruksi lengkap, lihat Buat instans RDS Custom.

    • Pada bagian Instance Type, atur Architecture ke AI Node.

    • Untuk Image, pilih SQLFlow di bawah Default Image.

  2. Gunakan instans ECS di Wilayah dan VPC yang sama dengan instans RDS Custom Anda untuk menghubungkannya melalui perintah ssh. Untuk instruksi lengkap, lihat Hubungkan ke instans RDS Custom.

  3. Arahkan ke direktori /home/script dan jalankan skrip start_sqlflow.sh. Skrip ini membuat proses MySQL lokal dan menjalankan kontainer RDS SQLFlow.

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

    Parameter:

    Parameter

    Deskripsi

    -P

    Port host yang dipetakan ke port dalam kontainer RDS SQLFlow. Nilai default-nya adalah 50054.

    -u

    Username untuk proses MySQL. Nilai default-nya adalah aliyun_rds.

    -p

    Password untuk user MySQL. Jika Anda tidak menentukan parameter ini, password acak akan dibuat.

    Output:

    • Sertifikat Transport Layer Security (TLS). Salin konten sertifikat tersebut dan simpan sebagai file ca.crt pada client Anda.

    • Perintah koneksi client. Anda dapat menggunakan perintah ini untuk menghubungkan ke node RDS SQLFlow dan menentukan sumber data untuk pembelajaran mesin.

    Simpan konten berikut sebagai ca.crt pada client:
    -----BEGIN CERTIFICATE-----
    xxx
    -----END CERTIFICATE-----
    Hubungkan ke SQLFlow dengan perintah berikut:
    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
    Anda juga dapat mengubah konfigurasi mysql untuk menghubungkan ke mysql Anda sendiri.

    Hasil: Jalankan perintah berikut untuk memeriksa status eksekusi skrip.

    • Jalankan perintah ps -ef | grep mysql untuk memeriksa status proses 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
    • Jalankan perintah docker ps untuk memeriksa status kontainer 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

Langkah 2: Hubungkan ke layanan rds_sqlflow

  1. Instal client RDS SQLFlow pada instans ECS di Wilayah dan VPC yang sama dengan instans RDS Custom, lalu berikan izin eksekusi kepada client tersebut.

    1. Anda dapat memperoleh client RDS SQLFlow dengan salah satu cara berikut:

      • Dari instans RDS Custom, salin file client RDS SQLFlow dari direktori /home ke instans ECS target. Tutorial ini menggunakan direktori /home sebagai contoh.

        scp /home/sqlflow root@<private_IP_address_of_the_ECS_instance>:/home
      • Pada instans ECS target, unduh client tersebut.

        wget -O sqlflow "https://forsharelogs.oss-cn-beijing.aliyuncs.com/sqlflow?Expires=1729065153&OSSAccessKeyId=TMP.3KhXUKdnV6VCQmT15btm1k2tLRdWeBh26vq78fg2zJDLLfMAmrXYP2hWJKw64Wq7VWmLQLiMuCPCDiTv5ERnhL7a9e****&Signature=mgbW6Vh5q%2FP8aGxrzz0QtglBUxQ%3D"
    2. Pada instans ECS target, jadikan file sqlflow dapat dieksekusi.

      cd /home
      chmod +x sqlflow
    3. Pada instans ECS target, buat file ca.crt dan tempel konten sertifikat TLS yang Anda hasilkan di Langkah 1.

      vim ca.crt
  2. Gunakan perintah koneksi client yang dihasilkan saat Anda menjalankan skrip start_sqlflow.sh di Langkah 1 untuk menghubungkan ke layanan rds_sqlflow. Misalnya, jika client sqlflow diinstal di direktori /home, jalankan perintah berikut:

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

    Parameter:

    Parameter

    Deskripsi

    -c

    File sertifikat yang dihasilkan di Langkah 1.

    -d

    Menentukan sumber data MySQL untuk RDS SQLFlow. Contoh: 'mysql://user:password@tcp(mysqlHost:mysqlPort)/mysql?maxAllowedPacket=0'.

    • user: Username untuk sumber data MySQL.

    • password: Password untuk user sumber data MySQL.

    • mysqlHost: Titik akhir sumber data MySQL.

    • mysqlPort: Nomor port sumber data MySQL.

    Catatan

    Secara default, perintah koneksi client yang dihasilkan di Langkah 1 menggunakan layanan MySQL yang berjalan di server RDS SQLFlow. Anda juga dapat menentukan titik akhir layanan MySQL lain sebagai sumber data.

    -s

    Menentukan titik akhir server RDS SQLFlow. Contoh: sqlflowHost:sqlflowPort.

    • sqlflowHost: Titik akhir server RDS SQLFlow, yaitu Alamat IP pribadi instans RDS Custom.

    • sqlflowPort: Nomor port server RDS SQLFlow.

    Contoh:

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

    Pesan Welcome to SQLFlow menunjukkan bahwa Anda telah berhasil terhubung dan memasuki CLI SQLFlow.

Langkah 3: Persiapkan data

RDS SQLFlow memerlukan sumber data MySQL untuk pembelajaran mesin.

Catatan

Sumber data MySQL dapat berupa database MySQL yang berjalan di server RDS SQLFlow atau database MySQL lain, seperti instans ApsaraDB RDS for MySQL.

Tutorial ini menggunakan database MySQL pada server RDS SQLFlow untuk membangun set data Iris dan melatih algoritma TensorFlow DNNClassifier. DNNClassifier cocok untuk mengklasifikasikan set data besar yang menggunakan data satu dimensi sebagai input dan memiliki pola internal kompleks yang sulit diinterpretasikan.

Set data Iris dalam tutorial ini berisi empat fitur dan satu label. Keempat fitur tersebut menggambarkan morfologi botani masing-masing bunga iris dan direpresentasikan sebagai bilangan titik mengambang. Label merepresentasikan kategori subspesies masing-masing bunga iris sebagai bilangan bulat, yaitu 0, 1, atau 2. Di TensorFlow, kolom fitur berfungsi sebagai jembatan antara kolom dalam data Anda dan fitur yang digunakan untuk melatih model. TensorFlow menyediakan berbagai jenis kolom fitur. Untuk informasi lebih lanjut, lihat dokumentasi resmi TensorFlow. Tabel berikut menjelaskan kolom-kolom dalam set data Iris.

Nama

Type

Deskripsi

sepal_length

float

Fitur. Panjang sepal. Satuan: cm.

sepal_width

float

Fitur. Lebar sepal. Satuan: cm.

petal_length

float

Fitur. Panjang petal. Satuan: cm.

petal_width

float

Fitur. Lebar petal. Satuan: cm.

class

int

Label. Kategori subspesies. Nilai valid: 0, 1, dan 2.

Di CLI SQLFlow, jalankan pernyataan SQL berikut untuk membuat set data pelatihan dan set data evaluasi untuk pembelajaran mesin.

Set data pelatihan

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);

Set data evaluasi

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);

Langkah 4: Latih model

Di CLI SQLFlow, jalankan pernyataan SQL berikut untuk melatih model DNNClassifier tiga kelas. Model ini memiliki dua lapisan tersembunyi dengan masing-masing 100 node. Tingkat pembelajaran untuk pengoptimal adalah 0,1, dan pelatihan berjalan selama 10 epoch.

CREATE DATABASE IF NOT EXISTS sqlflow_models; 
SELECT * FROM iris.train  -- Tentukan iris.train sebagai set data pelatihan.
  TO TRAIN DNNClassifier WITH
  model.n_classes = 3,  -- Atur jumlah kelas menjadi 3.
  model.hidden_units = [100, 100], -- Tentukan dua lapisan tersembunyi, masing-masing dengan 100 unit.
  optimizer.learning_rate=0.1, -- Atur tingkat pembelajaran menjadi 0.1.
  train.epoch = 10  -- Atur jumlah epoch pelatihan menjadi 10.
COLUMN sepal_length, sepal_width, petal_length, petal_width  -- Tentukan kolom fitur.
LABEL class  -- Tentukan kolom label sebagai class.
INTO sqlflow_models.my_dnn_model;  -- Simpan model yang telah dilatih ke tabel yang ditentukan. 

Langkah 5: Evaluasi model

  1. Gunakan set data iris.test untuk mengevaluasi model sqlflow_models.my_dnn_model. Hasil evaluasi disimpan ke tabel 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;
    SELECT * FROM sqlflow_models.evaluate_result_table;
  2. Setelah evaluasi selesai, jalankan pernyataan SQL berikut untuk melihat hasilnya. Anda dapat menyesuaikan parameter model berdasarkan hasil ini.

    SELECT * FROM sqlflow_models.evaluate_result_table;

    Hasil:

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

Langkah 6: Lakukan prediksi

  1. Gunakan model sqlflow_models.my_dnn_model untuk melakukan prediksi. Hasilnya ditulis ke kolom class pada tabel iris.predict. Pernyataan prediksi adalah sebagai berikut:

    SELECT * FROM iris.test 
    TO PREDICT iris.predict.class 
    USING sqlflow_models.my_dnn_model;
  2. Setelah prediksi selesai, jalankan pernyataan SQL berikut untuk melihat hasilnya.

    SELECT * FROM iris.predict LIMIT 5;

    Hasil:

    +--------------+-------------+--------------+-------------+-------+
    | 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 |
    +--------------+-------------+--------------+-------------+-------+

Dokumentasi terkait

Ikhtisar RDS Custom