Teradata setup
Some core functionality may be limited. If you're interested in contributing, check out the source code in the repository listed in the next section.
- Maintained by: Teradata
- Authors: Teradata
- GitHub repo: Teradata/dbt-teradata   
- PyPI package: dbt-teradata
- Slack channel: #db-teradata
- Supported dbt Core version: v0.21.0 and newer
- dbt Cloud support: Not Supported
- Minimum data platform version: n/a
Installing dbt-teradata
Use pip to install the adapter. Before 1.8, installing the adapter would automatically install dbt-core and any additional dependencies. Beginning in 1.8, installing an adapter does not automatically install dbt-core. This is because adapters and dbt Core versions have been decoupled from each other so we no longer want to overwrite existing dbt-core installations.
Use the following command for installation:
Configuring dbt-teradata
For Teradata-specific configuration, please refer to Teradata configs.
Python compatibility
| Plugin version | Python 3.6 | Python 3.7 | Python 3.8 | Python 3.9 | Python 3.10 | Python 3.11 | 
|---|---|---|---|---|---|---|
| 0.19.0.x | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | 
| 0.20.0.x | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | 
| 0.21.1.x | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | 
| 1.0.0.x | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | 
| 1.1.x.x | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | 
| 1.2.x.x | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | 
| 1.3.x.x | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | 
| 1.4.x.x | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| 1.5.x | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| 1.6.x | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | 
| 1.7.x | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | 
| 1.8.x | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | 
dbt dependent packages version compatibility
| dbt-teradata | dbt-core | dbt-teradata-util | dbt-util | 
|---|---|---|---|
| 1.2.x | 1.2.x | 0.1.0 | 0.9.x or below | 
| 1.6.7 | 1.6.7 | 1.1.1 | 1.1.1 | 
| 1.7.x | 1.7.x | 1.1.1 | 1.1.1 | 
| 1.8.x | 1.8.x | 1.1.1 | 1.1.1 | 
Connecting to Teradata
To connect to Teradata Vantage from dbt, you'll need to add a profile to your profiles.yml file. A Teradata profile conforms to the following syntax:
<profile-name>:
  target: <target-name>
  outputs:
    <target-name>:
      type: teradata
      user: <username>
      password: <password>
      schema: <database-name>
      tmode: ANSI
      threads: [optional, 1 or more]
      #optional fields
      <field-name: <field-value>
Description of Teradata Profile Fields
The following fields are required:
| Parameter | Default | Type | Description | 
|---|---|---|---|
| user | string | Specifies the database username. Equivalent to the Teradata JDBC Driver USERconnection parameter. | |
| password | string | Specifies the database password. Equivalent to the Teradata JDBC Driver PASSWORDconnection parameter. | |
| schema | string | Specifies the initial database to use after logon, instead of the user's default database. | |
| tmode | "ANSI" | string | Specifies the transaction mode. Only ANSImode is currently supported. | 
The plugin also supports the following optional connection parameters:
| Parameter | Default | Type | Description | 
|---|---|---|---|
| account | string | Specifies the database account. Equivalent to the Teradata JDBC Driver ACCOUNTconnection parameter. | |
| browser | string | Specifies the command to open the browser for Browser Authentication, when logmech is BROWSER. Browser Authentication is supported for Windows and macOS. Equivalent to the Teradata JDBC Driver BROWSER connection parameter. | |
| browser_tab_timeout | "5" | quoted integer | Specifies the number of seconds to wait before closing the browser tab after Browser Authentication is completed. The default is 5 seconds. The behavior is under the browser's control, and not all browsers support automatic closing of browser tabs. | 
| browser_timeout | "180" | quoted integer | Specifies the number of seconds that the driver will wait for Browser Authentication to complete. The default is 180 seconds (3 minutes). | 
| column_name | "false" | quoted boolean | Controls the behavior of cursor .descriptionsequencenameitems. Equivalent to the Teradata JDBC DriverCOLUMN_NAMEconnection parameter. False specifies that a cursor.descriptionsequencenameitem provides the AS-clause name if available, or the column name if available, or the column title. True specifies that a cursor.descriptionsequencenameitem provides the column name if available, but has no effect when StatementInfo parcel support is unavailable. | 
| connect_failure_ttl | "0" | quoted integer | Specifies the time-to-live in seconds to remember the most recent connection failure for each IP address/port combination. The driver subsequently skips connection attempts to that IP address/port for the duration of the time-to-live. The default value of zero disables this feature. The recommended value is half the database restart time. Equivalent to the Teradata JDBC Driver CONNECT_FAILURE_TTLconnection parameter. | 
| connect_timeout | "10000" | quoted integer | Specifies the timeout in milliseconds for establishing a TCP socket connection. Specify 0 for no timeout. The default is 10 seconds (10000 milliseconds). | 
| cop | "true" | quoted boolean | Specifies whether COP Discovery is performed. Equivalent to the Teradata JDBC Driver COPconnection parameter. | 
| coplast | "false" | quoted boolean | Specifies how COP Discovery determines the last COP hostname. Equivalent to the Teradata JDBC Driver COPLASTconnection parameter. Whencoplastisfalseor omitted, or COP Discovery is turned off, then no DNS lookup occurs for the coplast hostname. Whencoplastistrue, and COP Discovery is turned on, then a DNS lookup occurs for a coplast hostname. | 
| port | "1025" | quoted integer | Specifies the database port number. Equivalent to the Teradata JDBC Driver DBS_PORTconnection parameter. | 
| encryptdata | "false" | quoted boolean | Controls encryption of data exchanged between the driver and the database. Equivalent to the Teradata JDBC Driver ENCRYPTDATAconnection parameter. | 
| fake_result_sets | "false" | quoted boolean | Controls whether a fake result set containing statement metadata precedes each real result set. | 
| field_quote | "\"" | string | Specifies a single character string used to quote fields in a CSV file. | 
| field_sep | "," | string | Specifies a single character string used to separate fields in a CSV file. Equivalent to the Teradata JDBC Driver FIELD_SEPconnection parameter. | 
| host | string | Specifies the database hostname. | |
| https_port | "443" | quoted integer | Specifies the database port number for HTTPS/TLS connections. Equivalent to the Teradata JDBC Driver HTTPS_PORTconnection parameter. | 
| lob_support | "true" | quoted boolean | Controls LOB support. Equivalent to the Teradata JDBC Driver LOB_SUPPORTconnection parameter. | 
| log | "0" | quoted integer | Controls debug logging. Somewhat equivalent to the Teradata JDBC Driver LOGconnection parameter. This parameter's behavior is subject to change in the future. This parameter's value is currently defined as an integer in which the 1-bit governs function and method tracing, the 2-bit governs debug logging, the 4-bit governs transmit and receive message hex dumps, and the 8-bit governs timing. Compose the value by adding together 1, 2, 4, and/or 8. | 
| logdata | string | Specifies extra data for the chosen logon authentication method. Equivalent to the Teradata JDBC Driver LOGDATAconnection parameter. | |
| logon_timeout | "0" | quoted integer | Specifies the logon timeout in seconds. Zero means no timeout. | 
| logmech | "TD2" | string | Specifies the logon authentication method. Equivalent to the Teradata JDBC Driver LOGMECHconnection parameter. Possible values areTD2(the default),JWT,LDAP,KRB5for Kerberos, orTDNEGO. | 
| max_message_body | "2097000" | quoted integer | Specifies the maximum Response Message size in bytes. Equivalent to the Teradata JDBC Driver MAX_MESSAGE_BODYconnection parameter. | 
| partition | "DBC/SQL" | string | Specifies the database partition. Equivalent to the Teradata JDBC Driver PARTITIONconnection parameter. | 
| request_timeout | "0" | quoted integer | Specifies the timeout for executing each SQL request. Zero means no timeout. | 
| retries | 0 | integer | Allows an adapter to automatically try again when the attempt to open a new connection on the database has a transient, infrequent error. This option can be set using the retries configuration. Default value is 0. The default wait period between connection attempts is one second. retry_timeout (seconds) option allows us to adjust this waiting period. | 
| runstartup | "false" | quoted boolean | Controls whether the user's STARTUP SQL request is executed after logon. For more information, refer to User STARTUP SQL Request. Equivalent to the Teradata JDBC Driver RUNSTARTUP connection parameter. If retries is set to 3, the adapter will try to establish a new connection three times if an error occurs. | 
| sessions | quoted integer | Specifies the number of data transfer connections for FastLoad or FastExport. The default (recommended) lets the database choose the appropriate number of connections. Equivalent to the Teradata JDBC Driver SESSIONS connection parameter. | |
| sip_support | "true" | quoted boolean | Controls whether StatementInfo parcel is used. Equivalent to the Teradata JDBC Driver SIP_SUPPORTconnection parameter. | 
| sp_spl | "true" | quoted boolean | Controls whether stored procedure source code is saved in the database when a SQL stored procedure is created. Equivalent to the Teradata JDBC Driver SP_SPL connection parameter. | 
| sslca | string | Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with sslmodevaluesVERIFY-CAorVERIFY-FULL. Equivalent to the Teradata JDBC DriverSSLCAconnection parameter. | |
| sslcrc | "ALLOW" | string | Equivalent to the Teradata JDBC Driver SSLCRC connection parameter. Values are case-insensitive. • ALLOW provides "soft fail" behavior such that communication failures are ignored during certificate revocation checking. • REQUIRE mandates that certificate revocation checking must succeed. | 
| sslcapath | string | Specifies a directory of PEM files that contain Certificate Authority (CA) certificates for use with sslmodevaluesVERIFY-CAorVERIFY-FULL. Only files with an extension of.pemare used. Other files in the specified directory are not used. Equivalent to the Teradata JDBC DriverSSLCAPATHconnection parameter. | |
| sslcipher | string | Specifies the TLS cipher for HTTPS/TLS connections. Equivalent to the Teradata JDBC Driver SSLCIPHERconnection parameter. | |
| sslmode | "PREFER" | string | Specifies the mode for connections to the database. Equivalent to the Teradata JDBC Driver SSLMODEconnection parameter.• DISABLEdisables HTTPS/TLS connections and uses only non-TLS connections.• ALLOWuses non-TLS connections unless the database requires HTTPS/TLS connections.• PREFERuses HTTPS/TLS connections unless the database does not offer HTTPS/TLS connections.• REQUIREuses only HTTPS/TLS connections.• VERIFY-CAuses only HTTPS/TLS connections and verifies that the server certificate is valid and trusted.• VERIFY-FULLuses only HTTPS/TLS connections, verifies that the server certificate is valid and trusted, and verifies that the server certificate matches the database hostname. | 
| sslprotocol | "TLSv1.2" | string | Specifies the TLS protocol for HTTPS/TLS connections. Equivalent to the Teradata JDBC Driver SSLPROTOCOLconnection parameter. | 
| teradata_values | "true" | quoted boolean | Controls whether stror a more specific Python data type is used for certain result set column value types. | 
| query_band | "org=teradata-internal-telem;appname=dbt;" | string | Specifies the Query Band string to be set for each SQL request. | 
Refer to connection parameters for the full description of the connection parameters.
Supported features
Materializations
- view
- table
- ephemeral
- incremental
Incremental Materialization
The following incremental materialization strategies are supported:
- append(default)
- delete+insert
- merge
- valid_history(early access)
- To learn more about dbt incremental strategies, refer to the dbt incremental strategy documentation.
- To learn more about valid_historyincremental strategy, refer to Teradata configs.
Commands
All dbt commands are supported.
Support for model contracts
Model contracts are supported with dbt-teradata v1.7.1 and onwards. Constraint support and enforcement in dbt-teradata:
| Constraint type | Support Platform | enforcement | 
|---|---|---|
| not_null | ✅ Supported | ✅ Enforced | 
| primary_key | ✅ Supported | ✅ Enforced | 
| foreign_key | ✅ Supported | ✅ Enforced | 
| unique | ✅ Supported | ✅ Enforced | 
| check | ✅ Supported | ✅ Enforced | 
Refer to Model contracts for more info.
Support for dbt-utils package
dbt-utils package is supported through teradata/teradata_utils dbt package. The package provides a compatibility layer between dbt_utils and dbt-teradata. See teradata_utils package for install instructions.
Cross DB macros
Starting with release 1.3, some macros were migrated from teradata-dbt-utils dbt package to the connector. Refer the following table for the macros supported by the connector.
For using cross-DB macros, teradata-utils as a macro namespace will not be used, as cross-DB macros have been migrated from teradata-utils to Dbt-Teradata.
Compatibility
| Macro Group | Macro Name | Status | Comment | 
|---|---|---|---|
| Cross-database macros | current_timestamp | ✅ | custom macro provided | 
| Cross-database macros | dateadd | ✅ | custom macro provided | 
| Cross-database macros | datediff | ✅ | custom macro provided, see compatibility note | 
| Cross-database macros | split_part | ✅ | custom macro provided | 
| Cross-database macros | date_trunc | ✅ | custom macro provided | 
| Cross-database macros | hash | ✅ | custom macro provided, see compatibility note | 
| Cross-database macros | replace | ✅ | custom macro provided | 
| Cross-database macros | type_string | ✅ | custom macro provided | 
| Cross-database macros | last_day | ✅ | no customization needed, see compatibility note | 
| Cross-database macros | width_bucket | ✅ | no customization | 
| Cross-database macros | generate_series | ✅ | custom macro provided | 
| Cross-database macros | date_spine | ✅ | no customization | 
examples for cross DB macros
replace
{{ dbt.replace("string_text_column", "old_chars", "new_chars") }} {{ replace('abcgef', 'g', 'd') }}
date_trunc
{{ dbt.date_trunc("date_part", "date") }} {{ dbt.date_trunc("DD", "'2018-01-05 12:00:00'") }}
datediff
datediff macro in teradata supports difference between dates. Differece between timestamps is not supported.
hash
Hash macro needs an md5 function implementation. Teradata doesn't support md5 natively. You need to install a User Defined Function (UDF):
- Download the md5 UDF implementation from Teradata (registration required): https://downloads.teradata.com/download/extensibility/md5-message-digest-udf.
- Unzip the package and go to srcdirectory.
- Start up bteqand connect to your database.
- Create database GLOBAL_FUNCTIONSthat will host the UDF. You can't change the database name as it's hardcoded in the macro:CREATE DATABASE GLOBAL_FUNCTIONS AS PERMANENT = 60e6, SPOOL = 120e6;
- Create the UDF. Replace <CURRENT_USER>with your current database user:GRANT CREATE FUNCTION ON GLOBAL_FUNCTIONS TO <CURRENT_USER>;
 DATABASE GLOBAL_FUNCTIONS;
 .run file = hash_md5.btq
- Grant permissions to run the UDF with grant option.
GRANT EXECUTE FUNCTION ON GLOBAL_FUNCTIONS TO PUBLIC WITH GRANT OPTION;
last_day
last_day in teradata_utils, unlike the corresponding macro in dbt_utils, doesn't support quarter datepart.
Limitations
Transaction mode
Both ANSI and TERA modes are now supported in dbt-teradata. TERA mode's support is introduced with dbt-teradata 1.7.1, it is an initial implementation.
This is an initial implementation of the TERA transaction mode and may not support some use cases. We highly recommend validating all records or transformations using this mode to avoid unexpected issues or errors.