9997f295创建于 2024年12月24日历史提交
/*
 * Copyright (c) 2020 Huawei Technologies Co.,Ltd.
 *
 * openGauss is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *
 * http://license.coscl.org.cn/MulanPSL2
 *
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 * -------------------------------------------------------------------------
 *
 * learn.h
 *
 * IDENTIFICATION
 * src/include/optimizer/learn.h
 *
 * DESCRIPTION
 * Public resources of Code/src/backend/utils/learn/
 *
 * -------------------------------------------------------------------------
 */

#ifndef LEARN_H
#define LEARN_H

#include "postgres.h"
#include "catalog/gs_opt_model.h"
#include "stdlib.h"

#define RLSTM_TEMPLATE_NAME                     "rlstm"

#define MAX_LEN_ONE_HOT                         1024
#define MAX_LEN_ROW                             4096
#define MAX_LEN_TEXT                            100
#define DOP_MAX_LEN                             10

#define CONDITION_LEN                           8

/* information of table gs_wlm_plan_operator_info */
#define PLAN_OPT_TABLE_COL_NUM                  16
#define PLAN_OPT_TABLE_NAME                     "gs_wlm_plan_operator_info"

/* The encoding map for operator name, this should be kept in the alphabatical order */
#define LEN_ENCODE_OPTNAME                      20
#define TEXT_OPTNAME_ADAPTOR                    "ADAPTOR"
#define TEXT_OPTNAME_AGG                        "AGG"
#define TEXT_OPTNAME_APPEND                     "APPEND"
#define TEXT_OPTNAME_BITMAP                     "BITMAP"
#define TEXT_OPTNAME_EXTENSIBLE                 "EXTENSIBLE"
#define TEXT_OPTNAME_GROUP                      "GROUP"
#define TEXT_OPTNAME_HASH                       "HASH"
#define TEXT_OPTNAME_JOIN                       "JOIN"
#define TEXT_OPTNAME_LIMIT                      "LIMIT"
#define TEXT_OPTNAME_LOCKROWS                   "LOCKROWS"
#define TEXT_OPTNAME_MATERIALIZE                "MATERIALIZE"
#define TEXT_OPTNAME_MODIFY_TABLE               "MODIFY_TABLE"
#define TEXT_OPTNAME_PART_ITER                  "PART_ITER"
#define TEXT_OPTNAME_RECURSIVE_UNION            "RECURSIVE_UNION"
#define TEXT_OPTNAME_RESULT                     "RESULT"
#define TEXT_OPTNAME_SCAN                       "SCAN"
#define TEXT_OPTNAME_SET_OP                     "SET_OP"
#define TEXT_OPTNAME_SORT                       "SORT"
#define TEXT_OPTNAME_STREAM                     "STREAM"
#define TEXT_OPTNAME_UNIQUE                     "UNIQUE"

#define LEN_ENCODE_ORIENTATION                  2
#define TEXT_ORIENTATION_ROW                    "ROW"
#define TEXT_ORIENTATION_COL                    "COL"

#define LEN_ENCODE_STRATEGY                     13
#define LEN_ENCODE_STRATEGY_ADAPTOR             0
#define LEN_ENCODE_STRATEGY_AGG                 4
#define LEN_ENCODE_STRATEGY_APPEND              2
#define LEN_ENCODE_STRATEGY_BITMAP              2
#define LEN_ENCODE_STRATEGY_EXTENSIBLE          0
#define LEN_ENCODE_STRATEGY_GROUP               0
#define LEN_ENCODE_STRATEGY_HASH                0
#define LEN_ENCODE_STRATEGY_JOIN                3
#define LEN_ENCODE_STRATEGY_LIMIT               0
#define LEN_ENCODE_STRATEGY_LOCKROWS            0
#define LEN_ENCODE_STRATEGY_MATERIALIZE         0
#define LEN_ENCODE_STRATEGY_MODIFY_TABLE        4
#define LEN_ENCODE_STRATEGY_PART_ITER           0
#define LEN_ENCODE_STRATEGY_RECURSIVE_UNION     0
#define LEN_ENCODE_STRATEGY_RESULT              0
#define LEN_ENCODE_STRATEGY_SCAN                13
#define LEN_ENCODE_STRATEGY_SET_OP              2
#define LEN_ENCODE_STRATEGY_SORT                0
#define LEN_ENCODE_STRATEGY_STREAM              7
#define LEN_ENCODE_STRATEGY_UNIQUE              0
#define TEXT_STRATEGY_AGG_PLAIN                 "PLAIN"
#define TEXT_STRATEGY_AGG_SORTED                "SORTED"
#define TEXT_STRATEGY_AGG_HASHED                "HASHED"
#define TEXT_STRATEGY_AGG_WINDOW                "WINDOW"
#define TEXT_STRATEGY_APPEND_PLAIN              "PLAIN"
#define TEXT_STRATEGY_APPEND_MERGE              "MERGE"
#define TEXT_STRATEGY_BITMAP_AND                "AND"
#define TEXT_STRATEGY_BITMAP_OR                 "OR"
#define TEXT_STRATEGY_JOIN_NESTED_LOOP          "NESTED_LOOP"
#define TEXT_STRATEGY_JOIN_MERGE                "MERGE"
#define TEXT_STRATEGY_JOIN_HASH                 "HASH"
#define TEXT_STRATEGY_JOIN_ASOF                 "ASOF"
#define TEXT_STRATEGY_MODIFY_TABLE_INSERT       "INSERT"
#define TEXT_STRATEGY_MODIFY_TABLE_UPDATE       "UPDATE"
#define TEXT_STRATEGY_MODIFY_TABLE_DELETE       "DELETE"
#define TEXT_STRATEGY_MODIFY_TABLE_MERGE        "MERGE"
#define TEXT_STRATEGY_SCAN_SEQ                  "SEQ"
#define TEXT_STRATEGY_SCAN_INDEX                "INDEX"
#define TEXT_STRATEGY_SCAN_INDEX_ONLY           "INDEX_ONLY"
#define TEXT_STRATEGY_SCAN_ANN_INDEX            "ANN_INDEX"
#define TEXT_STRATEGY_SCAN_BITMAP_INDEX         "BITMAP_INDEX"
#define TEXT_STRATEGY_SCAN_BITMAP_HEAP          "BITMAP_HEAP"
#define TEXT_STRATEGY_SCAN_TID                  "TID"
#define TEXT_STRATEGY_SCAN_SUBQUERY             "SUBQUERY"
#define TEXT_STRATEGY_SCAN_FOREIGN              "FOREIGN"
#define TEXT_STRATEGY_SCAN_DATA_NODE            "DATA_NODE"
#define TEXT_STRATEGY_SCAN_FUNCTION             "FUNCTION"
#define TEXT_STRATEGY_SCAN_VALUES               "VALUES"
#define TEXT_STRATEGY_SCAN_CTE                  "CTE"
#define TEXT_STRATEGY_SCAN_WORK_TABLE           "WORK_TABLE"
#define TEXT_STRATEGY_SET_OP_SORTED             "SORTED"
#define TEXT_STRATEGY_SET_OP_HASHED             "HASHED"
#define TEXT_STRATEGY_STREAM_BROADCAST          "BROADCAST"
#define TEXT_STRATEGY_STREAM_REDISTRIBUTE       "REDISTRIBUTE"
#define TEXT_STRATEGY_STREAM_GATHER             "GATHER"
#define TEXT_STRATEGY_STREAM_ROUND_ROBIN        "ROUND_ROBIN"
#define TEXT_STRATEGY_STREAM_SCAN_GATHER        "SCAN_GATHER"
#define TEXT_STRATEGY_STREAM_PLAN_ROUTER        "PLAN_ROUTER"
#define TEXT_STRATEGY_STREAM_HYBRID             "HYBRID"


#define LEN_ENCODE_OPTION                       7
#define LEN_ENCODE_OPTION_ADAPTOR               0
#define LEN_ENCODE_OPTION_AGG                   0
#define LEN_ENCODE_OPTION_APPEND                0
#define LEN_ENCODE_OPTION_BITMAP                0
#define LEN_ENCODE_OPTION_EXTENSIBLE            0
#define LEN_ENCODE_OPTION_GROUP                 0
#define LEN_ENCODE_OPTION_HASH                  0
#define LEN_ENCODE_OPTION_JOIN                  7
#define LEN_ENCODE_OPTION_LIMIT                 0
#define LEN_ENCODE_OPTION_LOCKROWS              0
#define LEN_ENCODE_OPTION_MATERIALIZE           0
#define LEN_ENCODE_OPTION_MODIFY_TABLE          0
#define LEN_ENCODE_OPTION_PART_ITER             0
#define LEN_ENCODE_OPTION_RECURSIVE_UNION       0
#define LEN_ENCODE_OPTION_RESULT                0
#define LEN_ENCODE_OPTION_SCAN                  3
#define LEN_ENCODE_OPTION_SET_OP                0
#define LEN_ENCODE_OPTION_SORT                  0
#define LEN_ENCODE_OPTION_STREAM                2
#define LEN_ENCODE_OPTION_UNIQUE                0
#define TEXT_OPTION_JOIN_INNER                  "INNER"
#define TEXT_OPTION_JOIN_LEFT                   "LEFT"
#define TEXT_OPTION_JOIN_FULL                   "FULL"
#define TEXT_OPTION_JOIN_RIGHT                  "RIGHT"
#define TEXT_OPTION_JOIN_SEMI                   "SEMI"
#define TEXT_OPTION_JOIN_ANTI                   "ANTI"
#define TEXT_OPTION_JOIN_UNIQUE                 "UNIQUE"
#define TEXT_OPTION_SCAN_PARTITIONED            "PARTITIONED"
#define TEXT_OPTION_SCAN_DFS                    "DFS"
#define TEXT_OPTION_SCAN_SAMPLE                 "SAMPLE"
#define TEXT_OPTION_STREAM_LOCAL                "LOCAL"
#define TEXT_OPTION_STREAM_SPLIT                "SPLIT"

#define LEN_ENCODE_CONDITION                    12
#define LEN_ENCODE_PROJECTION                   12

#define TEXT_UNKNOWN                            "???"

/* For python APIs */
#define PORT_LEN                                6
#define PYTHON_SERVER_ROUTE_PRETRAIN            "/configure"
#define PYTHON_SERVER_ROUTE_TRAIN               "/train"
#define PYTHON_SERVER_ROUTE_PREPREDICT          "/model_setup"
#define PYTHON_SERVER_ROUTE_PREDICT             "/predict"
#define PYTHON_SERVER_ROUTE_POSTPREDICT         "/model_release"
#define PYTHON_SERVER_ROUTE_TRACK               "/track_process"
#define PYTHON_SERVER_HEADER_JSON               "Content-Type: application/json"
#define TRAIN_DATASET_FILEPATH                  "/tmp/gs_encoding.csv"
#define PRED_DATASET_FILEPATH                   "/tmp/gs_pred.csv"
#define MAX_LEN_JSON                            4096

typedef struct {
    int64       query_id;
    int32       plan_node_id;
    int32       parent_node_id;
    int64       startup_time;
    int64       total_time;
    int64       rows;
    int32       peak_memory;
    text        encode[1];
} TreeEncData;

typedef TreeEncData *TreeEncPtr;

typedef struct {
    char optname[MAX_LEN_TEXT];
    int len_strategy;
    char strategy[LEN_ENCODE_STRATEGY][MAX_LEN_TEXT];
    int len_option;
    char options[LEN_ENCODE_OPTION][MAX_LEN_TEXT];
} OptText;

typedef struct {
    int         length;
    int64      *startup_time;
    int64      *total_time;
    int64      *rows;
    int64      *peak_memory;
} ModelPredictInfo;

typedef struct {
    int         feature_size;
    bool        available;
    int4        max[gs_opt_model_label_length];
    float4      acc[gs_opt_model_label_length];
} ModelTrainInfo;

typedef struct {
    double       startup_time_accuracy;
    double       total_time_accuracy;
    double       rows_accuracy;
    double       peak_memory_accuracy;
} ModelAccuracy;

#endif  /* LEARN_H */