Files
openGauss-server/src/include/optimizer/learn.h
dengxuyue 1567043064 同步source code
日期: 12-26
    revision: ee5b054c
2020-12-28 22:19:21 +08:00

229 lines
9.5 KiB
C

/*
* 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_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_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 */