单机版使用流程#

准备#

本文基于 OpenMLDB CLI 进行开发和部署,首先需要下载样例数据并且启动 OpenMLDB CLI。推荐使用准备好的 Docker 镜像来快速体验。

  • Docker(最低版本:18.03)

拉取镜像#

执行以下命令拉取 OpenMLDB 镜像,并启动 Docker 容器:

docker run -it 4pdosc/openmldb:0.7.3 bash

成功启动容器以后,本教程中的后续命令默认均在容器内执行。

如果你需要从容器外访问容器内的 OpenMLDB 服务端,请参考 CLI/SDK-容器 onebox

下载样例数据#

执行以下命令下载后续流程中使用的样例数据:

curl https://openmldb.ai/demo/data.csv --output /work/taxi-trip/data/data.csv

启动服务端和客户端#

  • 启动单机版 OpenMLDB 服务端

./init.sh standalone
  • 启动单机版 OpenMLDB CLI 客户端

cd taxi-trip
/work/openmldb/bin/openmldb --host 127.0.0.1 --port 6527

下图显示了以上 docker 内命令正确执行以及 OpenMLDB CLI 成功启动以后的画面:

image-20220111142406534

使用流程#

单机版 OpenMLDB 的工作流程一般包含:建立数据库和表、数据准备、离线特征计算、SQL 方案上线、在线实时特征计算五个阶段。

以下演示的命令如无特别说明,默认均集群版 OpenMLDB CLI 下执行)。

1. 创建数据库和表#

CREATE DATABASE demo_db;
USE demo_db;
CREATE TABLE demo_table1(c1 string, c2 int, c3 bigint, c4 float, c5 double, c6 timestamp, c7 date);

2. 数据准备#

导入之前下载的样例数据作为训练数据,用于离线和在线特征计算。

注意,单机版中一张表的数据没有离线在线隔离,所以该表将同时用于离线和在线特征计算。你也可以手动为离线和在线导入不同的数据,即导入两张表。为简化起见,本教程的单机版使用了同一份数据做离线和在线计算。

执行以下命令导入数据:

LOAD DATA INFILE 'data/data.csv' INTO TABLE demo_table1;

预览数据:

SELECT * FROM demo_table1 LIMIT 10;

 ----- ---- ---- ---------- ----------- --------------- ------------

  c1    c2   c3   c4         c5          c6              c7

 ----- ---- ---- ---------- ----------- --------------- ------------

  aaa   12   22   2.200000   12.300000   1636097390000   2021-08-19

  aaa   11   22   1.200000   11.300000   1636097290000   2021-07-20

  dd    18   22   8.200000   18.300000   1636097990000   2021-06-20

  aa    13   22   3.200000   13.300000   1636097490000   2021-05-20

  cc    17   22   7.200000   17.300000   1636097890000   2021-05-26

  ff    20   22   9.200000   19.300000   1636098000000   2021-01-10

  bb    16   22   6.200000   16.300000   1636097790000   2021-05-20

  bb    15   22   5.200000   15.300000   1636097690000   2021-03-21

  bb    14   22   4.200000   14.300000   1636097590000   2021-09-23

  ee    19   22   9.200000   19.300000   1636097000000   2021-01-10

 ----- ---- ---- ---------- ----------- --------------- ------------

3. 离线特征计算#

执行 SQL进行特征抽取,并且将生成的特征存储在一个文件中,供后续的模型训练使用。

SELECT c1, c2, sum(c3) OVER w1 AS w1_c3_sum FROM demo_table1 WINDOW w1 AS (PARTITION BY demo_table1.c1 ORDER BY demo_table1.c6 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) INTO OUTFILE '/tmp/feature.csv';

4. SQL 方案上线#

将探索好的 SQL 方案部署到线上,注意部署上线的 SQL 方案需要与对应的离线特征计算的 SQL 方案保持一致。

DEPLOY demo_data_service SELECT c1, c2, sum(c3) OVER w1 AS w1_c3_sum FROM demo_table1 WINDOW w1 AS (PARTITION BY demo_table1.c1 ORDER BY demo_table1.c6 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW);

上线后可以通过命令 SHOW DEPLOYMENTS 查看已部署的 SQL 方案;

SHOW DEPLOYMENTS;

 --------- -------------------

  DB        Deployment

 --------- -------------------

  demo_db   demo_data_service

 --------- -------------------

1 row in set

Note

本教程的单机版使用了同一份数据做离线和在线特征计算。如果用户希望使用另一份数据集,需要在部署之前导入新的数据集,并在部署中使用新数据集的表。

5. 退出 CLI#

quit;

至此已经完成了全部基于 OpenMLDB CLI 的开发部署工作,并且已经回到了操作系统命令行下。

6. 实时特征计算#

实时线上服务可以通过如下 Web API 提供服务:

http://127.0.0.1:8080/dbs/demo_db/deployments/demo_data_service

​        ___________/      ____/              _____________/

​              |               |                        |        APIServer地址     Database名字            Deployment名字

实时请求接受 JSON 格式的输入数据。以下将给出一个例子:把一行数据放到请求的 input 域中。

curl http://127.0.0.1:8080/dbs/demo_db/deployments/demo_data_service -X POST -d'{"input": [["aaa", 11, 22, 1.2, 1.3, 1635247427000, "2021-05-20"]]}'

如下为该查询预期的返回结果(计算得到的特征被存放在 data 域):

{"code":0,"msg":"ok","data":{"data":[["aaa",11,22]]}}

说明:

  • api server 执行请求,可以支持批请求,通过 input 字段支持数组。每行 input 单独进行 request 计算。详细参数格式请参考 REST API

  • request 结果说明请参考实时特征计算的结果说明