Перейти к основному содержимому

Настройка Teradata

Некоторая основная функциональность может быть ограничена. Если вы заинтересованы в участии, ознакомьтесь с исходным кодом в репозитории, указанном в следующем разделе.

Файл profiles.yml предназначен только для dbt Core и dbt Fusion

Если вы используете dbt platform, вам не нужно создавать файл profiles.yml. Этот файл требуется только в том случае, если вы используете dbt Core или dbt Fusion локально. Чтобы узнать больше о требованиях к Fusion, см. раздел Supported features. Чтобы подключить вашу платформу данных к dbt, см. раздел About data platforms.

  • Поддерживается: Teradata
  • Авторы: Teradata
  • Репозиторий GitHub: Teradata/dbt-teradata
  • Пакет PyPI: dbt-teradata
  • Канал в Slack: #db-teradata
  • Поддерживаемая версия dbt Core: v0.21.0 и новее
  • Поддержка dbt: Supported
  • Минимальная версия платформы данных: n/a

Установка dbt-teradata

Установите адаптер с помощью pip. До версии 1.8 установка адаптера автоматически устанавливала dbt-core и любые дополнительные зависимости. Начиная с 1.8 установка адаптера не устанавливает dbt-core автоматически. Это потому, что версии адаптеров и dbt Core были развязаны, и мы больше не хотим перезаписывать существующие установки dbt-core. Используйте следующую команду для установки:

python -m pip install dbt-core dbt-teradata

Настройка dbt-teradata

Конфигурацию, специфичную для Teradata, см. на странице настроек Teradata.

Совместимость с Python

Версия плагинаPython 3.9Python 3.10Python 3.11Python 3.12Python 3.13
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
1.9.x
1.10.x
Loading table...

Совместимость версий зависимых пакетов dbt

dbt-teradatadbt Coredbt-teradata-utildbt-util
1.2.x1.2.x0.1.00.9.x or below
1.6.71.6.71.1.11.1.1
1.7.x1.7.x1.1.11.1.1
1.8.x1.8.x1.1.11.1.1
1.8.x1.8.x1.2.01.2.0
1.8.x1.8.x1.3.01.3.0
1.9.x1.9.x1.3.01.3.0
1.10.x1.10.x1.3.01.3.0
Loading table...

Подключение к Teradata

Чтобы подключиться к Teradata Vantage из dbt, вам необходимо добавить профиль в файл profiles.yml. Профиль Teradata должен соответствовать следующему синтаксису:

profiles.yml
<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>

Описание полей профиля Teradata

Следующие поля являются обязательными:

ПараметрПо умолчаниюТипОписание
userстрокаУказывает имя пользователя базы данных. Эквивалентно параметру подключения USER драйвера Teradata JDBC.
passwordстрокаУказывает пароль базы данных. Эквивалентно параметру подключения PASSWORD драйвера Teradata JDBC.
schemaстрокаУказывает начальную базу данных для использования после входа, вместо базы данных по умолчанию для пользователя.
tmode"ANSI"строкаУказывает режим транзакции. В настоящее время поддерживается только режим ANSI.
Loading table...

Плагин также поддерживает следующие необязательные параметры подключения:

ПараметрПо умолчаниюТипОписание
accountstringУказывает учетную запись базы данных. Эквивалентно параметру подключения ACCOUNT драйвера Teradata JDBC.
browserstringУказывает команду для открытия браузера при Browser Authentication, когда logmech имеет значение BROWSER. Browser Authentication поддерживается в Windows и macOS. Эквивалентно параметру подключения BROWSER драйвера Teradata JDBC.
browser_tab_timeout"5"quoted integerУказывает количество секунд ожидания перед закрытием вкладки браузера после завершения Browser Authentication. Значение по умолчанию — 5 секунд. Поведение зависит от браузера, и не все браузеры поддерживают автоматическое закрытие вкладок.
browser_timeout"180"quoted integerУказывает количество секунд, в течение которых драйвер ожидает завершения Browser Authentication. Значение по умолчанию — 180 секунд (3 минуты).
column_name"false"quoted booleanУправляет поведением элементов name в последовательности .description курсора. Эквивалентно параметру подключения COLUMN_NAME драйвера Teradata JDBC. Значение false указывает, что элемент name в .description возвращает имя из AS‑клаузы, если оно доступно, либо имя столбца, либо заголовок столбца. Значение true указывает, что элемент name возвращает имя столбца, если оно доступно, но не оказывает эффекта, когда поддержка StatementInfo parcel недоступна.
connect_timeout"10000"quoted integerУказывает тайм-аут в миллисекундах для установления TCP‑соединения. Укажите 0 для отсутствия тайм-аута. Значение по умолчанию — 10 секунд (10000 миллисекунд).
cop"true"quoted booleanУказывает, выполняется ли обнаружение COP. Эквивалентно параметру подключения COP драйвера Teradata JDBC.
coplast"false"quoted booleanУказывает, каким образом обнаружение COP определяет последний hostname COP. Эквивалентно параметру подключения COPLAST драйвера Teradata JDBC. Когда coplast имеет значение false или не задан, либо обнаружение COP отключено, DNS‑запрос для hostname coplast не выполняется. Когда coplast имеет значение true и обнаружение COP включено, выполняется DNS‑запрос для hostname coplast.
port"1025"quoted integerУказывает номер порта базы данных. Эквивалентно параметру подключения DBS_PORT драйвера Teradata JDBC.
encryptdata"false"quoted booleanУправляет шифрованием данных, передаваемых между драйвером и базой данных. Эквивалентно параметру подключения ENCRYPTDATA драйвера Teradata JDBC.
fake_result_sets"false"quoted booleanУправляет тем, будет ли фиктивный набор результатов, содержащий метаданные запроса, предшествовать каждому реальному набору результатов.
field_quote"\""stringУказывает строку из одного символа, используемую для экранирования полей в CSV‑файле.
field_sep","stringУказывает строку из одного символа, используемую в качестве разделителя полей в CSV‑файле. Эквивалентно параметру подключения FIELD_SEP драйвера Teradata JDBC.
hoststringУказывает имя хоста базы данных.
https_port"443"quoted integerУказывает номер порта базы данных для HTTPS/TLS‑соединений. Эквивалентно параметру подключения HTTPS_PORT драйвера Teradata JDBC.
lob_support"true"quoted booleanУправляет поддержкой LOB. Эквивалентно параметру подключения LOB_SUPPORT драйвера Teradata JDBC.
log"0"quoted integerУправляет отладочным логированием. Частично эквивалентно параметру подключения LOG драйвера Teradata JDBC. Поведение этого параметра может измениться в будущем. В настоящее время значение параметра задается целым числом, где бит 1 отвечает за трассировку функций и методов, бит 2 — за отладочное логирование, бит 4 — за hex‑дампы передаваемых и принимаемых сообщений, а бит 8 — за тайминги. Значение формируется путем суммирования 1, 2, 4 и/или 8.
logdatastringУказывает дополнительные данные для выбранного метода аутентификации при входе. Эквивалентно параметру подключения LOGDATA драйвера Teradata JDBC.
logon_timeout"0"quoted integerУказывает тайм-аут входа в систему в секундах. Ноль означает отсутствие тайм-аута.
logmech"TD2"stringУказывает метод аутентификации при входе. Эквивалентно параметру подключения LOGMECH драйвера Teradata JDBC. Возможные значения: TD2 (по умолчанию), JWT, LDAP, BROWSER, KRB5 (Kerberos) или TDNEGO.
max_message_body"2097000"quoted integerУказывает максимальный размер Response Message в байтах. Эквивалентно параметру подключения MAX_MESSAGE_BODY драйвера Teradata JDBC.
partition"DBC/SQL"stringУказывает раздел базы данных. Эквивалентно параметру подключения PARTITION драйвера Teradata JDBC.
request_timeout"0"quoted integerУказывает тайм-аут выполнения каждого SQL‑запроса. Ноль означает отсутствие тайм-аута.
retries0integerПозволяет адаптеру автоматически повторять попытку при возникновении временной, редко возникающей ошибки при открытии нового соединения с базой данных. Этот параметр может быть задан с помощью конфигурации retries. Значение по умолчанию — 0. Период ожидания между попытками подключения по умолчанию составляет одну секунду. Параметр retry_timeout (в секундах) позволяет изменить этот интервал ожидания.
runstartup"false"quoted booleanУправляет тем, выполняется ли пользовательский SQL‑запрос STARTUP после входа в систему. Для получения дополнительной информации см. User STARTUP SQL Request. Эквивалентно параметру подключения RUNSTARTUP драйвера Teradata JDBC. Если retries установлен в 3, адаптер попытается установить новое соединение три раза при возникновении ошибки.
sessionsquoted integerУказывает количество соединений передачи данных для FastLoad или FastExport. Значение по умолчанию (рекомендуемое) позволяет базе данных выбрать подходящее количество соединений. Эквивалентно параметру подключения SESSIONS драйвера Teradata JDBC.
sip_support"true"quoted booleanУправляет использованием StatementInfo parcel. Эквивалентно параметру подключения SIP_SUPPORT драйвера Teradata JDBC.
sp_spl"true"quoted booleanУправляет тем, сохраняется ли исходный код хранимой процедуры в базе данных при создании SQL‑хранимой процедуры. Эквивалентно параметру подключения SP_SPL драйвера Teradata JDBC.
sslcastringУказывает имя файла PEM, содержащего сертификаты центра сертификации (CA), для использования со значениями sslmode VERIFY-CA или VERIFY-FULL. Эквивалентно параметру подключения SSLCA драйвера Teradata JDBC.
sslcrc"ALLOW"stringЭквивалентно параметру подключения SSLCRC драйвера Teradata JDBC. Значения не чувствительны к регистру.
ALLOW обеспечивает «мягкий отказ», при котором сбои связи игнорируются во время проверки отзыва сертификатов.
REQUIRE требует успешного выполнения проверки отзыва сертификатов.
sslcapathstringУказывает каталог с PEM‑файлами, содержащими сертификаты центра сертификации (CA), для использования со значениями sslmode VERIFY-CA или VERIFY-FULL. Используются только файлы с расширением .pem. Другие файлы в указанном каталоге не используются. Эквивалентно параметру подключения SSLCAPATH драйвера Teradata JDBC.
sslcipherstringУказывает TLS‑шифр для HTTPS/TLS‑соединений. Эквивалентно параметру подключения SSLCIPHER драйвера Teradata JDBC.
sslmode"PREFER"stringУказывает режим подключения к базе данных. Эквивалентно параметру подключения SSLMODE драйвера Teradata JDBC.
DISABLE отключает HTTPS/TLS‑соединения и использует только соединения без TLS.
ALLOW использует соединения без TLS, если база данных не требует HTTPS/TLS.
PREFER использует HTTPS/TLS‑соединения, если база данных их предлагает.
REQUIRE использует только HTTPS/TLS‑соединения.
VERIFY-CA использует только HTTPS/TLS‑соединения и проверяет, что сертификат сервера является действительным и доверенным.
VERIFY-FULL использует только HTTPS/TLS‑соединения, проверяет, что сертификат сервера является действительным и доверенным, а также что сертификат сервера соответствует hostname базы данных.
sslprotocol"TLSv1.2"stringУказывает TLS‑протокол для HTTPS/TLS‑соединений. Эквивалентно параметру подключения SSLPROTOCOL драйвера Teradata JDBC.
teradata_values"true"quoted booleanУправляет тем, используется ли тип str или более специфичный тип данных Python для некоторых типов значений столбцов в наборе результатов.
query_band"org=teradata-internal-telem;appname=dbt;"stringУказывает строку Query Band, которая будет устанавливаться для каждого SQL‑запроса.
Loading table...

Обратитесь к параметрам подключения для полного описания параметров подключения.

Поддерживаемые функции

Материализации

  • view
  • table
  • ephemeral
  • incremental

Инкрементальная материализация

Поддерживаются следующие стратегии инкрементальной материализации:

  • append (по умолчанию)

  • delete+insert

  • merge

  • valid_history — режим (или параметр), который управляет тем, как dbt учитывает и сохраняет исторические версии данных. Обычно используется в контексте инкрементальных моделей или снапшотов, когда важно корректно отслеживать изменения во времени и работать с «исторической» версией записей.

  • microbatch — подход к обработке данных небольшими порциями (батчами). В dbt используется для более частого и мелкого обновления данных по сравнению с классическими батчами, что позволяет снизить задержку обновлений и эффективнее обрабатывать большие объёмы данных.

к сведению

Команды

Все команды dbt поддерживаются.

Поддержка контрактов моделей

Контракты моделей поддерживаются с dbt-teradata версии 1.7.1 и выше. Поддержка и применение ограничений в dbt-teradata:

Тип ограниченияПоддержка ПлатформаПрименение
not_null✅ Поддерживается✅ Применяется
primary_key✅ Поддерживается✅ Применяется
foreign_key✅ Поддерживается✅ Применяется
unique✅ Поддерживается✅ Применяется
check✅ Поддерживается✅ Применяется
Loading table...

Подробнее см. Model contracts.

Поддержка пакета dbt-utils

Пакет dbt-utils поддерживается через пакет dbt teradata/teradata_utils. Пакет предоставляет слой совместимости между dbt_utils и dbt-teradata. См. пакет teradata_utils для инструкций по установке.

Кросс-базовые макросы

Начиная с версии 1.3, некоторые макросы были перенесены из пакета dbt teradata-dbt-utils в коннектор. Обратитесь к следующей таблице для макросов, поддерживаемых коннектором.

Для использования кросс-базовых макросов пространство имен макросов teradata-utils не будет использоваться, так как кросс-базовые макросы были перенесены из teradata-utils в Dbt-Teradata.

Совместимость

Группа макросовНазвание макросаСтатусКомментарий
Кросс-базовые макросыcurrent_timestampпредоставлен пользовательский макрос
Кросс-базовые макросыdateaddпредоставлен пользовательский макрос
Кросс-базовые макросыdatediffпредоставлен пользовательский макрос, см. заметку о совместимости
Кросс-базовые макросыsplit_partпредоставлен пользовательский макрос
Кросс-базовые макросыdate_truncпредоставлен пользовательский макрос
Кросс-базовые макросыhashпредоставлен пользовательский макрос, см. заметку о совместимости
Кросс-базовые макросыreplaceпредоставлен пользовательский макрос
Кросс-базовые макросыtype_stringпредоставлен пользовательский макрос
Кросс-базовые макросыlast_dayне требуется настройка, см. заметку о совместимости
Кросс-базовые макросыwidth_bucketне требуется настройка
Кросс-базовые макросыgenerate_seriesпредоставлен пользовательский макрос
Кросс-базовые макросыdate_spineне требуется настройка
Loading table...

Примеры для кросс-базовых макросов

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 в teradata поддерживает разницу между датами. Разница между временными метками не поддерживается.

hash

Макрос Hash требует реализации функции md5. Teradata не поддерживает md5 нативно. Вам необходимо установить пользовательскую функцию (User Defined Function, UDF) и при необходимости указать переменную md5_udf (variable).

Если переменная не указана, код по умолчанию использует GLOBAL_FUNCTIONS.hash_md5. Ниже приведены инструкции по установке пользовательской UDF:

  1. Скачайте реализацию md5 UDF от Teradata (требуется регистрация): https://downloads.teradata.com/download/extensibility/md5-message-digest-udf.
  2. Распакуйте архив и перейдите в каталог src.
  3. Запустите bteq и подключитесь к вашей базе данных.
  4. Создайте базу данных GLOBAL_FUNCTIONS, в которой будет размещена UDF. Вы не можете изменить имя базы данных, так как оно жестко задано в макросе:
    CREATE DATABASE GLOBAL_FUNCTIONS AS PERMANENT = 60e6, SPOOL = 120e6;
  5. Создайте UDF. Замените <CURRENT_USER> на вашего текущего пользователя базы данных:
    GRANT CREATE FUNCTION ON GLOBAL_FUNCTIONS TO <CURRENT_USER>;
    DATABASE GLOBAL_FUNCTIONS;
    .run file = hash_md5.btq
  6. Предоставьте разрешения на выполнение UDF с опцией предоставления.
    GRANT EXECUTE FUNCTION ON GLOBAL_FUNCTIONS TO PUBLIC WITH GRANT OPTION;

Инструкция о том, как добавить переменную md5_udf в dbt_project.yml для пользовательской хеш-функции:

vars:
md5_udf: Custom_database_name.hash_method_function
last_day

last_day в teradata_utils, в отличие от соответствующего макроса в dbt_utils, не поддерживает quarter в качестве части даты.

dbt-teradata версии 1.8.0 и более поздние версии поддерживают модульные тесты, позволяя вам проверять SQL-модели и логику с небольшим набором статических входных данных перед переходом в производство. Эта функция улучшает разработку, ориентированную на тестирование, и повышает эффективность разработчика и надежность кода. Узнайте больше о модульных тестах dbt здесь.

Ограничения

Browser authentication

  • При запуске задания dbt с параметром logmech, установленным в значение "browser", начальная аутентификация открывает окно браузера, в котором необходимо ввести имя пользователя и пароль.
  • После завершения аутентификации это окно остаётся открытым, и вам нужно вручную переключиться обратно в консоль dbt.
  • Для каждого последующего подключения кратковременно открывается новая вкладка браузера с сообщением "TERADATA BROWSER AUTHENTICATION COMPLETED", при этом существующая сессия используется повторно без дополнительного ввода данных.
  • Однако фокус остаётся на окне браузера, поэтому каждый раз требуется вручную возвращаться в консоль dbt.
  • Такое поведение является стандартной функциональностью драйвера teradatasql и на данный момент не может быть изменено.
  • Чтобы избежать истечения срока действия сессии и необходимости повторного ввода учётных данных, убедитесь, что окно браузера для аутентификации остаётся открытым до завершения выполнения задания.

Transaction mode

В dbt-teradata теперь поддерживаются оба режима транзакций — ANSI и TERA. Поддержка режима TERA была добавлена в dbt-teradata версии 1.7.1 и на данный момент является первоначальной реализацией.

Режим транзакции TERA

Это начальная реализация режима транзакции TERA и она может не поддерживать некоторые случаи использования. Мы настоятельно рекомендуем проверять все записи или преобразования, используя этот режим, чтобы избежать неожиданных проблем или ошибок.

Благодарности

Адаптер был изначально создан Дугом Битти. Teradata взяла на себя адаптер в январе 2022 года. Мы благодарны Дугу за создание проекта и ускорение интеграции dbt + Teradata.

Лицензия

Адаптер распространяется по лицензии Apache-2.0. Ознакомьтесь с условиями лицензии, чтобы понять такие аспекты, как создание производных работ и модель поддержки.

Нашли ошибку?

0
Loading