Todos os produtos
Search
Central de documentação

:User guide

Última atualização: Jun 26, 2026

O RDS SQLFlow é uma solução de IA baseada no AliSQL. Ele oferece um serviço totalmente gerenciado para simplificar a implementação de machine learning. Com serviços integrados de machine learning e extensões SQL, o RDS SQLFlow conecta o AliSQL a um mecanismo de IA, permitindo descrever o fluxo de dados e as estruturas de IA das suas aplicações com código SQL mínimo.

Etapa 1: Configurar o serviço rds_sqlflow

  1. Crie uma instância RDS Custom com as seguintes configurações de parâmetros. Para obter instruções detalhadas, consulte Criar uma instância RDS Custom.

    • Na seção Instance Type, defina Architecture como AI Node.

    • Em Image, selecione SQLFlow em Default Image.

  2. Use uma instância ECS na mesma região e VPC da instância RDS Custom para conectar-se a ela pelo comando ssh. Para obter instruções detalhadas, consulte Conectar-se a uma instância RDS Custom.

  3. Acesse o diretório /home/script e execute o script start_sqlflow.sh. Esse script cria um processo MySQL local e inicia o contêiner do RDS SQLFlow.

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

    Parâmetros:

    Parâmetro

    Descrição

    -P

    Porta do host mapeada para a porta no contêiner do RDS SQLFlow. O valor padrão é 50054.

    -u

    Nome de usuário do processo MySQL. O valor padrão é aliyun_rds.

    -p

    Senha do usuário MySQL. Se você não especificar este parâmetro, o sistema gerará uma senha aleatória.

    Saída:

    • Um certificado Transport Layer Security (TLS). Copie o conteúdo do certificado e salve-o como um arquivo ca.crt no seu cliente.

    • Um comando de conexão do cliente. Use esse comando para conectar-se ao nó do RDS SQLFlow e especifique a fonte de dados para machine learning.

    Save the following content as ca.crt on the client:
    -----BEGIN CERTIFICATE-----
    xxx
    -----END CERTIFICATE-----
    Connect to SQLFlow with the following command:
    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
    Also, you can change the mysql config to connect with your own mysql.

    Resultado: Execute os comandos abaixo para verificar o status da execução do script.

    • Execute o comando ps -ef | grep mysql para verificar o status do processo 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
    • Execute o comando docker ps para verificar o status do contêiner do 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

Etapa 2: Conectar-se ao serviço rds_sqlflow

  1. Instale o cliente RDS SQLFlow em uma instância ECS na mesma região e VPC da instância RDS Custom e conceda permissões de execução ao cliente.

    1. Obtenha o cliente RDS SQLFlow de uma das seguintes formas:

      • Copie o arquivo do cliente RDS SQLFlow do diretório /home da instância RDS Custom para a instância ECS de destino. Este tutorial usa o diretório /home como exemplo.

        scp /home/sqlflow root@<private_IP_address_of_the_ECS_instance>:/home
      • Baixe o cliente na instância ECS de destino.

        wget -O sqlflow "https://forsharelogs.oss-cn-beijing.aliyuncs.com/sqlflow?Expires=1729065153&OSSAccessKeyId=TMP.3KhXUKdnV6VCQmT15btm1k2tLRdWeBh26vq78fg2zJDLLfMAmrXYP2hWJKw64Wq7VWmLQLiMuCPCDiTv5ERnhL7a9e****&Signature=mgbW6Vh5q%2FP8aGxrzz0QtglBUxQ%3D"
    2. Torne o arquivo sqlflow executável na instância ECS de destino.

      cd /home
      chmod +x sqlflow
    3. Crie um arquivo ca.crt na instância ECS de destino e cole o conteúdo do certificado TLS gerado na Etapa 1.

      vim ca.crt
  2. Use o comando de conexão do cliente gerado durante a execução do script start_sqlflow.sh na Etapa 1 para conectar-se ao serviço rds_sqlflow. Por exemplo, se o cliente sqlflow estiver instalado no diretório /home, execute o seguinte comando:

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

    Parâmetros:

    Parâmetro

    Descrição

    -c

    Arquivo de certificado gerado na Etapa 1.

    -d

    Especifica a fonte de dados MySQL para o RDS SQLFlow. Exemplo: 'mysql://user:password@tcp(mysqlHost:mysqlPort)/mysql?maxAllowedPacket=0'.

    • user: Nome de usuário da fonte de dados MySQL.

    • password: Senha do usuário da fonte de dados MySQL.

    • mysqlHost: Endpoint da fonte de dados MySQL.

    • mysqlPort: Número da porta da fonte de dados MySQL.

    Nota

    Por padrão, o comando de conexão do cliente gerado na Etapa 1 usa o serviço MySQL em execução no servidor do RDS SQLFlow. Você também pode especificar o endpoint de outro serviço MySQL para usar como fonte de dados.

    -s

    Especifica o endpoint do servidor do RDS SQLFlow. Exemplo: sqlflowHost:sqlflowPort.

    • sqlflowHost: Endpoint do servidor do RDS SQLFlow, correspondente ao endereço IP privado da instância RDS Custom.

    • sqlflowPort: Número da porta do servidor do RDS SQLFlow.

    Exemplo:

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

    A mensagem Welcome to SQLFlow indica que a conexão foi estabelecida com sucesso e que você acessou o SQLFlow CLI.

Etapa 3: Preparar dados

O RDS SQLFlow requer uma fonte de dados MySQL para machine learning.

Nota

A fonte de dados MySQL pode ser o banco de dados MySQL em execução no servidor do RDS SQLFlow ou outro banco de dados MySQL, como uma instância do ApsaraDB RDS for MySQL.

Este tutorial usa o banco de dados MySQL no servidor do RDS SQLFlow para construir o conjunto de dados Iris e treinar um algoritmo TensorFlow DNNClassifier. O DNNClassifier é adequado para classificar grandes conjuntos de dados que usam dados unidimensionais como entrada e possuem padrões internos complexos de difícil interpretação.

O conjunto de dados Iris deste tutorial contém quatro recursos e um rótulo. Os quatro recursos descrevem a morfologia botânica de cada flor de íris e são representados como números de ponto flutuante. O rótulo representa a subespécie de cada flor de íris como um número inteiro, que pode ser 0, 1 ou 2. No TensorFlow, uma coluna de recurso atua como uma ponte entre uma coluna nos seus dados e um recurso usado para treinar o modelo. O TensorFlow fornece vários tipos de colunas de recurso. Para obter mais informações, consulte a documentação oficial do TensorFlow. A tabela abaixo descreve as colunas no conjunto de dados Iris.

Nome

Tipo

Descrição

sepal_length

float

Recurso. Comprimento da sépala. Unidade: cm.

sepal_width

float

Recurso. Largura da sépala. Unidade: cm.

petal_length

float

Recurso. Comprimento da pétala. Unidade: cm.

petal_width

float

Recurso. Largura da pétala. Unidade: cm.

class

int

Rótulo. Categoria da subespécie. Valores válidos: 0, 1 e 2.

No SQLFlow CLI, execute as seguintes instruções SQL para criar o conjunto de dados de treinamento e o conjunto de dados de avaliação para machine learning.

Conjunto de dados de treinamento

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

Conjunto de dados de avaliação

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

Etapa 4: Treinar o modelo

No SQLFlow CLI, execute a seguinte instrução SQL para treinar um modelo DNNClassifier de três classes. O modelo possui duas camadas ocultas com 100 nós cada. A taxa de aprendizado do otimizador é 0,1 e o treinamento executa por 10 épocas.

CREATE DATABASE IF NOT EXISTS sqlflow_models; 
SELECT * FROM iris.train  -- Specify iris.train as the training dataset.
  TO TRAIN DNNClassifier WITH
  model.n_classes = 3,  -- Set the number of classes to 3.
  model.hidden_units = [100, 100], -- Specify two hidden layers, each with 100 units.
  optimizer.learning_rate=0.1, -- Set the learning rate to 0.1.
  train.epoch = 10  -- Set the number of training epochs to 10.
COLUMN sepal_length, sepal_width, petal_length, petal_width  -- Specify the feature columns.
LABEL class  -- Specify the label column as class.
INTO sqlflow_models.my_dnn_model;  -- Save the trained model to the specified table. 

Etapa 5: Avaliar o modelo

  1. Use o conjunto de dados iris.test para avaliar o modelo sqlflow_models.my_dnn_model. Os resultados da avaliação são salvos na tabela 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. Após a conclusão da avaliação, execute a seguinte instrução SQL para visualizar os resultados. Você pode ajustar os parâmetros do modelo com base nesses resultados.

    SELECT * FROM sqlflow_models.evaluate_result_table;

    Resultado:

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

Etapa 6: Fazer previsões

  1. Use o modelo sqlflow_models.my_dnn_model para fazer previsões. Os resultados são gravados na coluna class da tabela iris.predict. A instrução de previsão é a seguinte:

    SELECT * FROM iris.test 
    TO PREDICT iris.predict.class 
    USING sqlflow_models.my_dnn_model;
  2. Após a conclusão da previsão, execute a seguinte instrução SQL para visualizar os resultados.

    SELECT * FROM iris.predict LIMIT 5;

    Resultado:

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

Documentação relacionada

Visão geral do RDS Custom