# Starburst Vertica connector#

The Starburst Vertica connector allows querying a Vertica database as an external data source.

## Requirements#

To connect to Vertica, you need:

• Vertica 9.1.x or higher.

• Network access from the coordinator and workers to the Vertica server. Port 5433 is the default port.

• A valid Starburst Enterprise license.

## Configuration#

Create a catalog properties file in etc/catalog named, for example, myvertica.properties to access the configured Vertica database in the myvertica catalog. Configure the usage of the connector by specifying the name vertica and replace the connection properties as appropriate for your setup.

connector.name=vertica
connection-url=jdbc:vertica://example.net:5433/test_db
connection-user=root


The connection-user and connection-password are typically required and determine the user credentials for the connection, often a service user. You can use secrets to avoid actual values in the catalog properties files.

### General configuration properties#

The following table describes general catalog configuration properties for the connector:

Property name

Description

Default value

case-insensitive-name-matching

Support case insensitive schema and table names.

false

case-insensitive-name-matching.cache-ttl

1m

case-insensitive-name-matching.config-file

Path to a name mapping configuration file in JSON format that allows Trino to disambiguate between schemas and tables with similar names in different cases.

null

case-insensitive-name-matching.refresh-period

Frequency with which Trino checks the name matching configuration file for changes.

0 (refresh disabled)

metadata.cache-ttl

Duration for which metadata, including table and column statistics, is cached.

0 (caching disabled)

metadata.cache-missing

Cache the fact that metadata, including table and column statistics, is not available

false

metadata.cache-maximum-size

Maximum number of objects stored in the metadata cache

10000

write.batch-size

Maximum number of statements in a batched execution. Do not change this setting from the default. Non-default values may negatively impact performance.

1000

join-pushdown.enabled

Enable join pushdown. Equivalent catalog session property is join_pushdown_enabled. Enabling this may negatively impact performance for some queries.

false

## Type mapping#

SEP and Vertica each support types that the other does not, so the connector modifies some types when reading or writing data. The following table shows how supported types are mapped from Vertica when read by SEP.

Vertica to SEP read type mapping#

Vertica type

SEP type

Notes

BOOLEAN

BOOLEAN

BIGINT

BIGINT

Vertica treats TINYINT, SMALLINT, INTEGER, and BIGINT as synonyms for the same 64-bit BIGINT data type

DOUBLE PRECISION (FLOAT)

DOUBLE

Vertica treats FLOAT and REAL as the same 64-bit IEEE FLOAT

DECIMAL(p, s)

DECIMAL(p, s)

CHAR, CHAR(n)

CHAR, CHAR(n)

VARCHAR, LONG VARCHAR, VARCHAR(n), LONG VARCHAR(n)

VARCHAR(n)

VARBINARY,LONG VARBINARY, VARBINARY(n), LONG VARBINARY(n)

VARBINARY(n)

DATE

DATE

No other type is supported.

Unsupported Vertica types can be converted to VARCHAR with the vertica.unsupported_type_handling session property. The default value for this property is IGNORE.

SET SESSION vertica.unsupported_type_handling = 'CONVERT_TO_VARCHAR'


### SEP to Vertica type mapping#

The following write type mapping applies when tables are created in Vertica from SEP.

SEP to Vertica write type mapping#

SEP type

Vertica type

BOOLEAN

BOOLEAN

TINYINT

BIGINT

SMALLINT

BIGINT

INTEGER

BIGINT

BIGINT

BIGINT

REAL

DOUBLE PRECISION

DOUBLE

DOUBLE PRECISION

DECIMAL(p, s)

DECIMAL(p, s)

CHAR

CHAR

VARCHAR

VARCHAR

VARBINARY

VARBINARY

DATE

DATE

No other type is supported.

### General configuration properties#

The following properties can be used to configure how data types from the connected data source are mapped to Trino data types and how the metadata is cached in Trino.

Property name

Description

Default value

unsupported-type-handling

Configure how unsupported column data types are handled:

• IGNORE, column is not accessible.

• CONVERT_TO_VARCHAR, column is converted to unbounded VARCHAR.

The respective catalog session property is unsupported_type_handling.

IGNORE

jdbc-types-mapped-to-varchar

Allow forced mapping of comma separated lists of data types to convert to unbounded VARCHAR

## SQL support#

### ALTER TABLE#

The connector does not support renaming tables across multiple schemas. For example, the following statement is supported:

ALTER TABLE catalog.schema_one.table_one RENAME TO catalog.schema_one.table_two


The following statement attempts to rename a table across schemas, and therefore is not supported:

ALTER TABLE catalog.schema_one.table_one RENAME TO catalog.schema_two.table_two


## Performance#

The connector includes a number of performance improvements, detailed in the following sections.

### Pushdown#

The connector supports pushdown for a number of operations:

### Dynamic filtering#

Dynamic filtering is enabled by default. It causes the connector to wait for dynamic filtering to complete before starting a JDBC query.

You can disable dynamic filtering by setting the dynamic-filtering.enabled property in the catalog properties file to false.

### JDBC connection pooling#

You can improve performance by enabling JDBC connection pooling, which is disabled by default.

### Caching table projections#

The connector supports table scan redirection to improve performance and reduce load on the data source.

## Security#

The connector includes a number of security-related features, detailed in the following sections.

### User impersonation#

The connector supports user impersonation. Enable user impersonation by setting the vertica.impersonation.enabled property in the catalog properties file to true:

vertica.impersonation.enabled=true


User impersonation in the connector is based on the SET ROLE command supported in Vertica. Prior to setting the impersonated role, SET ROLE NONE is executed to clear any roles that have been already set, so only the impersonated role is used.

vertica.authentication.type=PASSWORD_PASS_THROUGH