229 lines
9.5 KiB
C
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 */ |