blob: 34e8920d4d8f3fe67ab437b62c986150a6fa91b3 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
Build HAWQ Vectorized Executor steps
-------------------------------------
1. Make sure HAWQ compilation and installation success.
2. execute "make ;make install" in vexecutor directory
3. add library name "vexector" to "shared_preload_libraries"
in postgresql.conf which has to copies allocated in master
and segment data directories respectively. Make sure both
of them is assigned.
4. restart HAWQ cluster
5. execute "set vectorized_executor_enable to on" in psql
to activate vectorized execution
How to add the default vectorized data types and aggregate
functions
----------------------------------------------------------
1. Follow "Build HAWQ Vectorized Executor steps" to start HAWQ.
2. execute "create_udv.sql" in psql. then some vectorized
data types and vectorized aggregate functions will be
add to HAWQ.
3. If the default vectorized is no use, you can delete them by
executing "clean_udv.sql" in psql.
How to add an new vectorized data types and operators
------------------------------------------------------
Vectorized data types is an new type like an array to storage a
series data, it must have a BASE types, For example, the base
type of vint2 is int2. If you want to create an new vectorized
data type, you can follow these steps:
1. Define the new struct and implement the IN/OUT functions
for the vectorized datatypes.
2. Create data types by SQL:
a) Create an shell data types by CREATE TYPE;
b) Register the IN/OUT functions to the PG_PROC by CREATE
FUNCTION;
c) Create the actrual vectorized data types by CREATE TYPE,
NOTE: Now we use typelem and typstorage of PG_TYPE to
mark the vectorized types.
3. Create the new operators for the new vectorized data types.
For example, If the base type is 'XXX', we want to create the
vectorized data types for it:
1) You can add the vectorized data types struct
(e.g. Add to vtype.h)
typedef struct vtype {
int _vl_len;
Oid elemtype;
int dim;
bool *isnull;
bool *skipref;
Datum values[0];
}vtype;
typedef struct vtype vXXX;
Implement the new IN/OUT functions for this data type:
Datum vXXXin(PG_FUNCTION_ARGS);
Datum vXXXout(PG_FUNCTION_ARGS);
2) Create data types by SQL:
CREATE TYPE vXXX;
CREATE FUNCTION vXXXin(cstring)......;
CREATE FUNCTION vXXXout(vXXX)......;
CREATE TYPE vXXX ( INPUT = vXXXin,
OUTPUT = vXXXout,
element = XXX,
storage=external );
3) Add new operators for the vectorized data types:
CREATE FUNCTION vXXXvXXXgt(vXXX, vXXX) ......;
CREATE OPERATOR > ( leftarg = vXXX,
rightarg = vXXX,
procedure = vXXXvXXXgt,
commutator = <= );