全部產品
Search
文件中心

PolarDB:模型使用流程及說明

更新時間:Nov 08, 2024

本文介紹了建立模型、上傳模型、模型評估以及模型推理等功能的文法、參數說明及其樣本內容。

PolarDB for AI模型簡介

使用內建模型

PolarDB for AI內建了兩大機器學習模型:NL2SQL大模型和通義千問大模型。您無需進行額外的模型配置,即可使用這個兩大機器學習模型提供的PolarDB for AI功能。

具體請參見:

構建自訂模型

在客戶的實際業務情境中,模型經過演算法調優後,模型結構可能會根據業務效果進行調整,內建的機器學習模型可能無法滿足使用者的實際業務需求。因此,PolarDB for AI還支援構建自訂模型的功能,並支援將模型運行在機密容器中,進一步保障了客戶模型中資料的安全。

您可按照如下流程構建並使用自訂模型:

載入外部模型

此外,基於PolarDB for AI的MLOps能力,您也可以直接將外部訓練好的模型上傳和部署在PolarDB中,並使用外部模型,如如基於Sklearn架構的LightGBM、GBDT,或者基於TensorFlow/PyTorch架構下的深度學習演算法等。

您可按照如下流程載入外部模型:

建立模型

建立一個機器學習模型。機器學習模型的訓練過程是非同步,需要通過查詢模型狀態來判斷該模型是否訓練完成。

文法說明

CREATE MODEL model_name WITH ( model_class = '', x_cols = '', y_cols='',model_parameter=()) AS (SELECT select_expr [, select_expr] ... FROM table_reference)

參數說明

參數

說明

model_name

模型名稱。

model_class

模型的類型。取值如下:

x_cols

模型訓練輸入列。

說明

多個列名之間使用英文逗號(,)分隔。

y_cols

模型訓練輸出資料行。

model_parameter

模型訓練參數。

  • model_class值為lightgbm時,model_parameter取值請參見參數說明

  • model_class值為deepfm時,model_parameter取值請參見參數說明

  • model_class值為kmeans時,model_parameter取值請參見參數說明

  • model_class值為randomforestreg時,model_parameter取值請參見參數說明

  • model_class值為gbrt時,model_parameter取值請參見參數說明

  • model_class值為linearreg時,model_parameter取值請參見參數說明

  • model_class值為svr時,model_parameter取值請參見參數說明

  • model_class值為bst時,model_parameter取值請參見參數說明

select_expr

列名。

table_reference

表名。

樣本

建立airlines_gbm模型。

/*polar4ai*/CREATE MODEL airlines_gbm 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 db4ai.airlines_train)

執行結果如下:

Query OK, 0 rows affected (0.79 sec)

上傳模型

PolarDB for AI支援上傳自訂機器學習模型,您可以將離線訓練好的模型上傳至PolarDB for AI,後續可以藉助該平台來管理上傳的模型。PolarDB for AI支援的模型格式有PMML、ONNX、Checkpoint(適用於Tensorflow、PyTorch平台)。

文法說明

UPLOAD MODEL model_name WITH (model_location = '', req_location = '') 

參數說明

參數

說明

model_name

模型名稱。

model_location

模型檔案地址。

req_location

模型運行依賴的檔案地址。

樣本

將建立好的模型my_model上傳至PolarDB for AI平台。

/*polar4ai*/UPLOAD MODEL my_model WITH (model_location='https://xxxx.oss-cn-hangzhou.aliyuncs.com/xxxx/model.pkl?Expires=xxxx&OSSAccessKeyId=xxxx&Signature=xxxx', req_location='https://xxxx.oss-cn-hangzhou.aliyuncs.com/xxxx/requirements.txt?Expires=xxxx&OSSAccessKeyId=xxxx&Signature=xxxx');

返回結果如下:

Query OK, 0 rows affected (0.29 sec)

執行以下命令,查看模型狀態。

/*polar4ai*/ SHOW MODEL my_model;

返回結果如下:

+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| modelStatus | modelPath                                                                                                                   |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| saved       | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx  |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.23 sec)

modelStatus顯示為saved,即表示模型上傳成功。

部署模型

您可以將上傳後的模型部署在PolarDB for AI平台上,部署成功後,模型為線上狀態,後續調用模型進行模型推理時,速度會更快。

文法說明

DEPLOY MODEL model_name

參數說明

參數

說明

model_name

模型名稱。

樣本

將模型my_model部署在PolarDB for AI平台。

/*polar4ai*/ DEPLOY MODEL my_model;

返回結果如下:

Query OK, 0 rows affected (0.29 sec)

執行如下命令,查看模型狀態:

/*polar4ai*/ SHOW MODEL my_model;

返回結果如下:

+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| modelStatus | modelPath                                                                                                                   |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| serving     | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx  |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.23 sec)

modelStatus顯示為serving,表示模型部署成功。

查看模型

查看模型列表

查看當前叢集下的所有模型。

文法說明

SHOW MODELS

樣本

/*polar4ai*/SHOW MODELS

執行結果如下:

+-----------------------+-----------------+--------------+
| model_name            | model_class     | model_status |
+-----------------------+-----------------+--------------+
| airline_rfr           | randomforestreg | saved        |
| gbrt1                 | gbrt            | saved        |
| airline_deepfm        | deepfm          | saved        |
| airlines_gbm          | lightgbm        | saved        |
| lgbm1                 | lightgbm        | saved        |
| blackfriday_linearreg | linearreg       | saved        |
+-----------------------+-----------------+--------------+
6 rows in set (0.24 sec)

查看模型狀態

查看模型的目前狀態。建立模型之後使用該文法來查看模型是否訓練完成。模型狀態主要有以下幾種:

  • training:模型訓練中。

  • loading_data:模型在載入資料中。

  • trained:模型已經完成訓練。

  • saved:模型已經被儲存。

  • serving:模型正在服務中。

  • deleted:模型已經被刪除。

文法說明

SHOW MODEL model_name 

參數說明

參數

說明

model_name

模型名稱。

樣本

查看airlines_gbm模型的目前狀態。

/*polar4ai*/SHOW MODEL airlines_gbm;

執行結果如下:

+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| modelStatus | modelPath                                                                                                                   |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
| saved       | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx  |
+-------------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.23 sec)
說明

modelPath的有效時間為100分鐘,您可以通過modelPath中的Expires參數查看連結是否在有效期間內。如果您需要訪問該連結,請在有效期間內進行訪問。

查看模型詳情

文法說明

DESCRIBE MODEL model_name

參數說明

參數

說明

model_name

模型名稱。

樣本

查看airlines_gbm模型的詳細資料。

/*polar4ai*/DESCRIBE MODEL airlines_gbm;

執行結果如下:

+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| model_name        | model_description                                                                                                                                                                                                                                                                 |
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| airlines_gbm      | basic information:model_name:airlines_gbm model_class:lightgbm feature important:features,imp_gain,imp_splitAirline,0.3327,0.0376 AirportFrom,0.2178,0.1842 Time,0.1893,0.1999 AirportTo,0.1668,0.187 DayOfWeek,0.0384,0.1236 Length,0.0307,0.1269 Flight,0.0242,0.1408           |
+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.65 sec)

模型評估

評估已經訓練好的模型的效果。

文法說明

SELECT select_expr [, select_expr] ... FROM EVALUATE (MODEL model_name, SELECT select_expr_for_prediction [, select_expr_for_prediction] ... FROM table_reference ) WITH (x_cols = '', y_cols='', metrics='')

參數說明

參數

說明

select_expr

模型評估結果中展示的列名。

model_name

模型名稱。

select_expr_for_prediction

用於進行模型評估的列名。

table_reference

表名。

x_cols

模型訓練輸入列。多個列名之間使用英文逗號(,)分隔。

y_cols

模型訓練輸出資料行。

metrics

模型評估指標。取值如下:

  • acc:準確率,適用於分類任務。

  • r2_score:決定係數,適用於迴歸任務。

  • ks:ks值,表示模型能將正負樣本區分出來的程度,適用於分類任務。

  • auc:auc值,表示ROC曲線與座標軸圍成的面積,適用於分類任務。

  • Fscore:F-score,精確率和召回率的調和平均數,適用於分類任務。

樣本

  1. 使用已經訓練完成的airlines_gbm模型進行模型評估。

    /*polar4ai*/SELECT Delay FROM evaluate(MODEL airlines_gbm, SELECT * FROM db4ai.airlines_test) WITH (x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay', metrics='acc');

    執行結果如下:

    +--------------------------------------+
    | task_id                              |
    +--------------------------------------+
    | df05244e-21f7-11ed-be66-xxxxxxxxxxxx |
    +--------------------------------------+
    1 row in set (0.95 sec)
  2. 執行如下命令,查看任務狀態。

    /*polar4ai*/SHOW TASK `df05244e-21f7-11ed-be66-xxxxxxxxxxxx`;

    執行結果如下:

    +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
    | taskStatus | filePath                                                                                                                                           | results         | startTime                  | endTime                    |
    +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
    | finish     | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/pc-xxxxxxx/airlines_gbm/xxxxx.csv?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx | {"acc": 0.6694} | 2022-08-22 17:22:21.122101 | 2022-08-22 17:22:39.428811 |
    +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
    1 row in set (0.24 sec)
    說明

    filePath的有效時間為100分鐘,您可以通過filePath中的Expires參數查看連結是否在有效期間內。如果您需要訪問該連結,請在有效期間內進行訪問。

模型推理

使用已經訓練好的模型進行線上推理或離線推理。

文法說明

SELECT select_expr [, select_expr] ... FROM PREDICT (MODEL model_name, SELECT select_expr_for_prediction [, select_expr_for_prediction] ... FROM table_reference LIMIT row_count) WITH (x_cols= '')

參數說明

參數

說明

select_expr

模型推理結果中展示的列名。

model_name

模型名稱。

select_expr_for_prediction

模型推理時使用的列名。

table_reference

表名。

mode

模式。填寫async時,表示離線推理;不填時表示線上推理。

row_count

推理的樣本數量。

x_cols

模型訓練輸入列。多個列名之間使用英文逗號(,)分隔。

樣本

  • 線上推理。

    使用已經建立好的模型airlines_gbm進行線上推理。

    /*polar4ai*/SELECT Delay FROM PREDICT(MODEL airlines_gbm, SELECT * FROM db4ai.airlines_test LIMIT 10) WITH (x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay');

    執行結果如下:

    +-------+-------------------+
    | Delay | predicted_results |
    +-------+-------------------+
    |     1 | 0                 |
    |     0 | 0                 |
    |     0 | 0                 |
    |     0 | 0                 |
    |     0 | 0                 |
    |     0 | 0                 |
    |     1 | 0                 |
    |     0 | 0                 |
    |     0 | 0                 |
    |     1 | 0                 |
    +-------+-------------------+
    10 rows in set (0.74 sec)
  • 離線推理。

    當推理樣本數量大於1000時,PolarDB for AI會提示您採用離線任務:

    ERROR 9050 (HY000): Please limit the SQL selected data length to less than '1000' or convert to offline prediction

    建立離線任務如下:

    /*polar4ai*/SELECT Delay FROM predict(MODEL airlines_gbm, SELECT * FROM db4ai.airlines_test) WITH (x_cols = 'Airline,Flight,AirportFrom,AirportTo,DayOfWeek,Time,Length', y_cols='Delay', mode='async');

    執行結果如下:

    +--------------------------------------+
    | task_id                              |
    +--------------------------------------+
    | bd0c1722-21e7-11ed-94a8-xxxxxxxxxxxx |
    +--------------------------------------+
    1 row in set (0.75 sec)

    以上查詢結果返回該任務的task_id,您可以通過該任務ID查詢任務狀態以及對應結果的下載地址。

    /*polar4ai*/SHOW TASK `bd0c1722-21e7-11ed-94a8-xxxxxxxxxxxx`

    執行結果如下:

    +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
    | taskStatus | filePath                                                                                                                                           | results         | startTime                  | endTime                    |
    +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
    | finish     | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/pc-xxxxxxx/airlines_gbm/xxxxx.csv?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx |                 | 2022-08-22 14:57:51.355240 | 2022-08-22 14:58:18.316818 |
    +------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
    1 row in set (0.24 sec)
    說明

    filePath的有效時間為100分鐘,您可以通過filePath中的Expires參數查看連結是否在有效期間內。如果您需要訪問該連結,請在有效期間內進行訪問。

離線評估與離線推理任務

查看離線工作清單

查看當前叢集下的所有離線任務。

說明

離線任務是指已耗用時間長,且無法即時擷取結果的批處理任務,任務類型包括離線評估和離線推理兩種類型。

文法說明

SHOW TASKS

樣本

執行以下命令,查看當前叢集下的所有離線任務。

/*polar4ai*/SHOW TASKS;

執行結果如下:

+--------------------------------------+------------+-------------+----------------------------+----------------------------+
| task_id                              | task_type  | task_status | start_timestr              | end_timestr                |
+--------------------------------------+------------+-------------+----------------------------+----------------------------+
| 2cba0c74-1f8f-11ed-934a-xxxxxxxxxxxx | prediction | finish      | 2022-08-19 15:18:51.206829 |                            |
| 77b3a186-1f94-11ed-8eaa-xxxxxxxxxxxx | evaluation | finish      | 2022-08-19 15:56:44.465594 |                            |
| 972547a4-1fa3-11ed-9c6b-xxxxxxxxxxxx | evaluation | finish      | 2022-08-19 17:44:59.790353 | 2022-08-19 17:45:23.750100 |
| bd0c1722-21e7-11ed-94a8-xxxxxxxxxxxx | prediction | finish      | 2022-08-22 14:57:51.355240 | 2022-08-22 14:58:18.316818 |
| df05244e-21f7-11ed-be66-xxxxxxxxxxxx | evaluation | finish      | 2022-08-22 16:53:20.381577 | 2022-08-22 16:53:37.189953 |
| ec956db8-21fb-11ed-8400-xxxxxxxxxxxx | evaluation | finish      | 2022-08-22 17:22:21.122101 | 2022-08-22 17:22:39.428811 |
+--------------------------------------+------------+-------------+----------------------------+----------------------------+
9 rows in set (0.18 sec)

查看離線任務狀態

查看離線任務的目前狀態。任務狀態主要有以下幾種:

  • init:任務初始化。

  • running:任務執行中。

  • finish:任務完成。

  • fail:任務失敗。

文法說明

SHOW TASK `task_id` 

參數說明

參數

說明

task_id

任務ID。

樣本

查看任務ID為df05244e-21f7-11ed-be66-xxxxxxxxxxxx的任務狀態。

/*polar4ai*/SHOW TASK `df05244e-21f7-11ed-be66-xxxxxxxxxxxx`

執行結果如下:

+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
| taskStatus | filePath                                                                                                                                           | results         | startTime                  | endTime                    |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
| finish     | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/pc-xxxxxxx/airlines_gbm/xxxxx.csv?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx | {"acc": 0.6694} | 2022-08-22 17:22:21.122101 | 2022-08-22 17:22:39.428811 |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+----------------------------+----------------------------+
1 row in set (0.24 sec)
說明

filePath的有效時間為100分鐘,您可以通過filePath中的Expires參數查看連結是否在有效期間內。如果您需要訪問該連結,請在有效期間內進行訪問。

刪除模型

當模型不再使用時,使用該文法刪除已經建立的模型。

文法說明

DROP MODEL model_name 

參數說明

參數

說明

model_name

模型名稱。

樣本

刪除airlines_gbm模型。

/*polar4ai*/DROP MODEL airlines_gbm 

執行結果顯示類似如下內容,表示已成功刪除airlines_gbm模型:

Query OK, 0 rows affected (0.57 sec)

自訂模型最佳實務

接下來,我們將通過一個樣本,帶您瞭解自訂模型管理的完整鏈路。本最佳實務以模型的離線訓練和線上推理為例進行介紹。

  1. 離線訓練模型

    以LightGBM演算法為例,離線訓練指令碼如下:

    # coding: utf-8
    from pathlib import Path
    
    import pandas as pd
    from sklearn.metrics import mean_squared_error
    
    import lightgbm as lgb
    import joblib
    
    def train_model():
        print('Loading data...')
        # load or create your dataset
        df_train = pd.read_csv('regression.train', header=None, sep='\t')
        df_test = pd.read_csv('regression.test', header=None, sep='\t')
    
        y_train = df_train[0]
        y_test = df_test[0]
        X_train = df_train.drop(0, axis=1)
        X_test = df_test.drop(0, axis=1)
    
        # create dataset for lightgbm
        lgb_train = lgb.Dataset(X_train, y_train)
        lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
    
    
        # specify your configurations as a dict
        params = {
            'boosting_type': 'gbdt',
            'objective': 'regression',
            'metric': {'l2', 'l1'},
            'num_leaves': 31,
            'learning_rate': 0.05,
            'feature_fraction': 0.9,
            'bagging_fraction': 0.8,
            'bagging_freq': 5,
            'verbose': 0
        }
    
        print('Starting training...')
        # train
        gbm = lgb.train(params,
                        lgb_train,
                        num_boost_round=20,
                        valid_sets=lgb_eval,
                        callbacks=[lgb.early_stopping(stopping_rounds=5)])
    
    
        print('Saving model...')
        # save model to file
        # gbm.save_model('model.txt')
        joblib.dump(gbm, 'lgb.pkl')
    
        print('Starting predicting...')
        # predict
        y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)
        # eval
        rmse_test = mean_squared_error(y_test, y_pred) ** 0.5
        print(f'The RMSE of prediction is: {rmse_test}')
    

    其中,模型檔案匯出為pkl格式,並且調用predict方法返回推理結果,同時還需要提供模型運行依賴的python檔案。

    檔案requirements.txt內容樣本如下:

    lightgbm==3.3.3
  2. 上傳模型

    1. 執行以下命令,將模型上傳至PolarDB for AI

      /*polar4ai*/UPLOAD MODEL my_model WITH (model_location='https://xxxx.oss-cn-hangzhou.aliyuncs.com/xxxx/model.pkl?Expires=xxxx&OSSAccessKeyId=xxxx&Signature=xxxx', req_location='https://xxxx.oss-cn-hangzhou.aliyuncs.com/xxxx/requirements.txt?Expires=xxxx&OSSAccessKeyId=xxxx&Signature=xxxx')

      其中,model_locationreq_location分別表示模型檔案地址以及模型運行時所依賴的檔案地址,您可以將這兩個檔案提前準備好,並上傳至自己的私人oss bucket,再通過以上命令上傳至PolarDB for AI平台。

      返回結果如下:

      Query OK, 0 rows affected (0.29 sec)
    2. 執行以下命令,查看模型狀態。

      /*polar4ai*/ SHOW my_model;

      返回結果如下:

      +-------------+-----------------------------------------------------------------------------------------------------------------------------+
      | modelStatus | modelPath                                                                                                                   |
      +-------------+-----------------------------------------------------------------------------------------------------------------------------+
      | saved       | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx  |
      +-------------+-----------------------------------------------------------------------------------------------------------------------------+
      1 row in set (0.23 sec)

      modelStatus顯示為saved,表示模型上傳成功。

  3. 部署模型

    1. 執行以下命令,將模型部署在PolarDB for AI上。

      /*polar4ai*/ DEPLOY MODEL my_model;

      返回結果如下:

      Query OK, 0 rows affected (0.29 sec)
    2. 執行以下命令,查看模型狀態。

      /*polar4ai*/ SHOW MODEL my_model;

      返回結果如下:

      +-------------+-----------------------------------------------------------------------------------------------------------------------------+
      | modelStatus | modelPath                                                                                                                   |
      +-------------+-----------------------------------------------------------------------------------------------------------------------------+
      | serving     | http://db4ai-collie-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/xxxxx.pkl?OSSAccessKeyId=xxxxxx&Expires=xxxx&Signature=xxxxxx  |
      +-------------+-----------------------------------------------------------------------------------------------------------------------------+
      1 row in set (0.23 sec)

      modelStatus顯示為serving,表示模型部署成功。

  4. 模型線上推理

    執行以下命令,執行模型線上推理任務。

    /*polar4ai*/ SELECT Y FROM PREDICT(MODEL my_model, SELECT * FROM db4ai.regression_test LIMIT 10) WITH (x_cols = 'x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28', y_cols='');

    返回結果如下:

    +------+---------------------+
    | Y    | predicted_results   |
    +------+---------------------+
    |  1.0 | 0.6262147669037363  |
    |  0.0 | 0.5082804008241021  |
    |  0.0 | 0.37533158372209957 |
    |  1.0 | 0.461974928099089   |
    |  0.0 | 0.3777339456553666  |
    |  0.0 | 0.35045096227525735 |
    |  0.0 | 0.4178165504012342  |
    |  1.0 | 0.40869795422774036 |
    |  1.0 | 0.6826481286570045  |
    |  0.0 | 0.47021259543154736 |
    +------+---------------------+
    10 rows in set (0.95 sec)