Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,9 @@ jobs:
- { modules: plugin/trino-snowflake }
- { modules: plugin/trino-snowflake, profile: cloud-tests }
- { modules: plugin/trino-sqlserver }
- { modules: plugin/trino-teradata }
- { modules: plugin/trino-teradata, profile: clearscape-tests }
- { modules: plugin/trino-teradata, profile: run-only-long-tests }
- { modules: plugin/trino-vertica }
- { modules: testing/trino-faulttolerant-tests, profile: default }
- { modules: testing/trino-faulttolerant-tests, profile: test-fault-tolerant-delta }
Expand Down Expand Up @@ -566,6 +569,8 @@ jobs:
&& ! (contains(matrix.modules, 'trino-filesystem-gcs') && contains(matrix.profile, 'cloud-tests'))
&& ! (contains(matrix.modules, 'trino-filesystem-s3') && contains(matrix.profile, 'cloud-tests'))
&& ! (contains(matrix.modules, 'trino-hdfs') && contains(matrix.profile, 'cloud-tests'))
&& ! (contains(matrix.modules, 'trino-teradata') && contains(matrix.profile, 'clearscape-tests'))
&& ! (contains(matrix.modules, 'trino-teradata') && contains(matrix.profile, 'run-only-long-tests'))
run: $MAVEN test ${MAVEN_TEST} -pl ${{ matrix.modules }} ${{ matrix.profile != '' && format('-P {0}', matrix.profile) || '' }}
# Additional tests for selected modules
- name: HDFS file system cache isolated JVM tests
Expand Down Expand Up @@ -791,6 +796,25 @@ jobs:
# Cancelled workflows may have left the ephemeral cluster running
if: always()
run: .github/bin/redshift/delete-aws-redshift.sh
- name: Teradata Tests
id: tests-teradata
env:
CLEARSCAPE_TOKEN: ${{ secrets.CLEARSCAPE_TOKEN }}
CLEARSCAPE_PASSWORD: ${{ secrets.CLEARSCAPE_PASSWORD }}
CLEARSCAPE_REGION: ${{ vars.CLEARSCAPE_REGION }}
if: matrix.modules == 'plugin/trino-teradata' && contains(matrix.profile, 'clearscape-tests') && env.CLEARSCAPE_TOKEN != '' && env.CLEARSCAPE_PASSWORD != '' && env.CLEARSCAPE_REGION != ''
run: |
$MAVEN test ${MAVEN_TEST} -pl :trino-teradata -Pclearscape-tests
- name: Teradata Long running Tests
id: tests-long-run-teradata
env:
CLEARSCAPE_TOKEN: ${{ secrets.CLEARSCAPE_TOKEN }}
CLEARSCAPE_PASSWORD: ${{ secrets.CLEARSCAPE_PASSWORD }}
CLEARSCAPE_REGION: ${{ vars.CLEARSCAPE_REGION }}
TERADATA_LONG_TESTS: ${{ vars.TERADATA_LONG_TESTS }}
if: matrix.modules == 'plugin/trino-teradata' && contains(matrix.profile, 'run-only-long-tests') && env.CLEARSCAPE_TOKEN != '' && env.CLEARSCAPE_PASSWORD != '' && env.CLEARSCAPE_REGION != '' && env.TERADATA_LONG_TESTS == 'true'
run: |
$MAVEN test ${MAVEN_TEST} -pl :trino-teradata -Prun-only-long-tests
- name: Sanitize artifact name
if: always()
run: |
Expand Down Expand Up @@ -818,6 +842,8 @@ jobs:
|| steps.tests-bq-smoke.outcome == 'failure'
|| steps.tests-iceberg.outcome == 'failure'
|| steps.tests-redshift.outcome == 'failure'
|| steps.tests-teradata.outcome == 'failure'
|| steps.tests-long-run-teradata.outcome == 'failure'
|| steps.tests-snowflake.outcome == 'failure'
}}
upload-heap-dump: ${{ env.SECRETS_PRESENT == '' && github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }}
Expand Down
6 changes: 6 additions & 0 deletions core/trino-server/src/main/provisio/trino.xml
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,12 @@
</artifact>
</artifactSet>

<artifactSet to="plugin/teradata">
<artifact id="${project.groupId}:trino-teradata:zip:${project.version}">
<unpack />
</artifact>
</artifactSet>

<artifactSet to="plugin/teradata-functions">
<artifact id="${project.groupId}:trino-teradata-functions:zip:${project.version}">
<unpack />
Expand Down
1 change: 1 addition & 0 deletions docs/src/main/sphinx/connector.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ SingleStore <connector/singlestore>
Snowflake <connector/snowflake>
SQL Server <connector/sqlserver>
System <connector/system>
Teradata <connector/teradata>
Thrift <connector/thrift>
TPC-DS <connector/tpcds>
TPC-H <connector/tpch>
Expand Down
192 changes: 192 additions & 0 deletions docs/src/main/sphinx/connector/teradata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# Teradata connector

```{raw} html
<img src="../_static/img/teradata.png" class="connector-logo">
```

The Teradata connector allows querying and creating tables in an
external [Teradata](https://www.teradata.com/) database. This can be used to join data between
different systems like Teradata and Hive, or between different
Teradata instances.

## Requirements

To connect to Teradata, you need:

- Teradata database.
- Network access from the Trino coordinator and workers to Teradata.
- Port 1025 is the default port.

## Configuration

The connector can query a database on a given Teradata instance. Create a catalog
properties file that specifies the Teradata connector by setting the
`connector.name` to `teradata`.

For example, to access a database as the `example` catalog, create the file
`etc/catalog/example.properties`. Replace the connection properties as
appropriate for your setup:

```properties
connector.name=teradata
connection-url=jdbc:teradata://example.teradata.com/CHARSET=UTF8,TMODE=ANSI,LOGMECH=TD2
connection-user=root
connection-password=secret
```

The `connection-url` defines the connection information and parameters to pass
to the Teradata JDBC driver. The parameters for the URL are available in the
[Teradata JDBC documentation](https://teradata-docs.s3.amazonaws.com/doc/connectivity/jdbc/reference/current/jdbcug_chapter_2.html#BABJIHBJ).

The `connection-user` and `connection-password` are typically required and
determine the user credentials for the connection, often a service user. You can
use {doc}`secrets </security/secrets>` to avoid actual values in the catalog
properties files.

### Connection security

If you have TLS configured with a globally-trusted certificate installed on
your data source, you can enable TLS between your cluster and the data
source by appending parameters to the JDBC connection string set in the
connection-url catalog configuration property.

For example, to specify `SSLMODE`:

```properties
connection-url=jdbc:teradata://example.teradata.com/SSLMODE=REQUIRED
```

For more information on TLS configuration options, see the
Teradata [JDBC documentation](https://teradata-docs.s3.amazonaws.com/doc/connectivity/jdbc/reference/current/jdbcug_chapter_2.html#URL_SSLMODE).

```{include} jdbc-authentication.fragment
```

### Multiple Teradata databases

The Teradata connector can only access a single Teradata database within
a single catalog. Thus, if you have multiple Teradata databases,
or want to connect to multiple Teradata instances, you must configure
multiple instances of the Teradata connector.

To add another catalog, simply add another properties file to `etc/catalog`
with a different name, making sure it ends in `.properties`. For example,
if you name the property file `sales.properties`, Trino creates a
catalog named `sales` using the configured connector.

## Type mapping

Because Trino and Teradata each support types that the other does not, this
connector {ref}`modifies some types <type-mapping-overview>` when reading data.
Refer to the following sections for type mapping when reading data from
Teradata to Trino.

### Teradata type to Trino type mapping

The connector maps Teradata types to the corresponding Trino types following
this table:

:::{list-table} Teradata type to Trino type mapping
:widths: 40, 40, 20
:header-rows: 1

* - Teradata type
- Trino type
- Notes
* - `TINYINT`
- `TINYINT`
-
* - `SMALLINT`
- `SMALLINT`
-
* - `INTEGER`
- `INTEGER`
-
* - `BIGINT`
- `BIGINT`
-
* - `REAL`
- `DOUBLE`
-
* - `DOUBLE`
- `DOUBLE`
-
* - `FLOAT`
- `DOUBLE`
-
* - `NUMBER(p, s)`
- `DECIMAL(p, s)`
-
* - `NUMERIC(p, s)`
- `DECIMAL(p, s)`
-
* - `DECIMAL(p, s)`
- `DECIMAL(p, s)`
-
* - `CHAR(n)`
- `CHAR(n)`
-
* - `CHARACTER(n)`
- `CHAR(n)`
-
* - `VARCHAR(n)`
- `VARCHAR(n)`
-
* - `DATE`
- `DATE`
-
:::

No other types are supported.

### Trino type to Teradata type mapping

The connector maps Trino types to the corresponding Teradata types following
this table:

:::{list-table} Trino type to Teradata type mapping
:widths: 40, 40, 20
:header-rows: 1

* - Trino type
- Teradata type
- Notes
* - `TINYINT`
- `SMALLINT`
-
* - `SMALLINT`
- `SMALLINT`
-
* - `INTEGER`
- `INTEGER`
-
* - `BIGINT`
- `BIGINT`
-
* - `REAL`
- `FLOAT`
-
* - `DOUBLE`
- `DOUBLE`
-
* - `DATE`
- `DATE`
-
::::

No other types are supported.

```{include} jdbc-type-mapping.fragment
```

## SQL support

The connector provides read and limited write access to data and metadata in
a Teradata database. In addition to the [globally available](sql-globally-available) and
[read operation](sql-read-operations) statements, the connector supports the
following features:

- [](/sql/create-schema),
- [](/sql/drop-schema),
- [](/sql/create-table),
- [](/sql/drop-table)
42 changes: 42 additions & 0 deletions plugin/trino-teradata/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Teradata Connector Developer Notes

The Teradata connector module has both unit tests and integration tests.
The integration tests require access to a [Teradata ClearScape Analytics™ Experience](https://clearscape.teradata.com/sign-in).
You can follow the steps below to run the integration tests locally.

## Prerequisites

#### 1. Create a new ClearScape Analytics™ Experience account

If you don't already have one, sign up at:

[Teradata ClearScape Analytics™ Experience](https://www.teradata.com/getting-started/demos/clearscape-analytics)

#### 2. Login

Sign in with your new account at:

[ClearScape Analytics™ Experience Login](https://clearscape.teradata.com/sign-in)

#### 3. Collect the API Token

Use the **Copy API Token** button in the UI to retrieve your token.

#### 4. Define the following environment variables

⚠️ **Note:** The Teradata database password must be **at least 8 characters long**.

```
export CLEARSCAPE_TOKEN=<API Token>
export CLEARSCAPE_PASSWORD=<Password for Teradata database (min 8 chars)>
```

## Running Integration Tests

Once the environment variables are set, run the integration tests with:

⚠️ **Note:** Run the following command from the Trino parent directory.

```
./mvnw clean install -pl :trino-teradata
```
Loading
Loading