Redshift коннектор#
Примечание
Ниже приведена оригинальная документация Trino. Скоро мы ее переведем на русский язык и дополним полезными примерами.
The Redshift connector allows querying and creating tables in an external Amazon Redshift cluster. This can be used to join data between different systems like Redshift and Hive, or between two different Redshift clusters.
Требования#
To connect to Redshift, you need:
Network access from the Trino coordinator and workers to Redshift. Port 5439 is the default port.
Конфигурация#
To configure the Redshift connector, create a catalog properties file in
etc/catalog
named, for example, example.properties
, to mount the
Redshift connector as the example
catalog. Create the file with the
following contents, replacing the connection properties as appropriate for your
setup:
connector.name=redshift
connection-url=jdbc:redshift://example.net:5439/database
connection-user=root
connection-password=secret
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.
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 a parameter to the JDBC connection string set in the
connection-url
catalog configuration property.
For example, on version 2.1 of the Redshift JDBC driver, TLS/SSL is enabled by
default with the SSL
parameter. You can disable or further configure TLS
by appending parameters to the connection-url
configuration property:
connection-url=jdbc:redshift://example.net:5439/database;SSL=TRUE;
For more information on TLS configuration options, see the Redshift JDBC driver documentation.
Аутентификация в источнике данных#
Вы можете предоставить имя пользователя и пароль для подключения к источнику данных несколькими способами:
INLINE
- в файле конфигурации каталога (в том числе, используя секреты, что бы не хранить значения в открытом виде).FILE
- в отдельном properties файле.KEYSTORE
- в зашифрованном keystore файле.Из extra credentials клиента CedrusData.
The following table describes configuration properties for connection credentials:
Property name |
Description |
---|---|
|
Тип credential provider. Допустимые значения: |
|
Имя пользователя для подключения к источнику. Используется при |
|
Пароль для подключения к источнику. Используется при |
|
Путь к properties файлу, содержащему параметры |
|
Путь к keystore файлу, из которого следует прочитать имя пользователя и пароль. Используется при
|
|
Тип keystore файла. Например, |
|
Пароль к keystore файлу. |
|
Имя keystore entity, содержащей имя пользователя для подключения к источнику. |
|
Пароль к keystore entity, содержащей имя пользователя для подключения к источнику |
|
Имя keystore entity, содержащей пароль для подключения к источнику. |
|
Пароль к keystore entity, содержащей пароль для подключения к источнику. |
|
Имя параметра extra credentials, значение которого следует использовать в качестве имени пользователя.
См. |
|
Имя параметра extra credentials, значение которого следует использовать в качестве пароля.
См. |
Multiple Redshift databases or clusters#
The Redshift connector can only access a single database within a Redshift cluster. Thus, if you have multiple Redshift databases, or want to connect to multiple Redshift clusters, you must configure multiple instances of the Redshift 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.
Общие параметры конфигурации#
Общие параметры конфигурации каталога приведены в таблице ниже:
Название |
Описание |
Значение по умолчанию |
---|---|---|
|
Включить поддержку case insensitive идентификаторов. |
|
|
Время жизни закэшированных метаданных о case insensitive идентификаторах. |
|
|
Путь к файлу конфигурации в формате JSON, который позволяет разрешать конфликты имен между case insensitive схемами и таблицами. |
|
|
Частота проверки обновлений файла |
|
|
Время жизни закэшированных метаданных. Положительное значение включает кэширование. |
|
|
Кэшировать ли информацию о том, что для используемых таблиц и колонок отсутствуют статистики. Включение данного
параметра может ускорить планирование некоторых запросов. Однако, если информация об отсутствии статистик для
конкретного объекта СУБД закэширована, но статистики стали доступны позднее (например, была запущена
команда |
|
|
Максимальное количество объектов, хранящихся в metadata cache. |
|
|
Максимальное количество команд в batch операциях записи данных. Изменение данного параметра не рекомендовано, так как оно может негативно сказаться на производительности. |
|
|
Использовать ли динамические фильтры при работе с JDBC источником. |
|
|
Максимальное время ожидания готовности динамических фильтров с build стороны оператора join перед запуском JDBC запроса к источнику. Увеличение таймаута может позволить CedrusData выполнить запрос к источнику с более селективными фильтрами, но в то же время может увеличить latency некоторых запросов. |
|
Domain compaction threshold#
CedrusData позволяет делегировать применение предикатов источнику данных (pushdown). Во многих случаях это существенно
уменьшает количество записей, которые возвращает источник, и улучшает производительность. Однако, pushdown сложных
предикатов (например, выражение IN
со множеством значений) может негативно сказаться на производительности.
При достижении порога сложности предиката, CedrusData автоматически преобразует предикат к более компактной форме.
Например, предикат a IN (1, 2, ..., 100)
может быть преобразован в a BETWEEN 1 AND 100
. В большинстве случаев
такое преобразование улучшает производительность запросов. Однако, в некоторых случаях может быть предпочтительнее
передать сложный предикат в неизменном виде, так как источник данных может его обработать эффективнее, чем
преобразованный предикат.
Вы можете увеличить значение порога сложности, что бы CedrusData передавал предикат в источник без изменений.
Используйте для этого параметр конфигурации каталога domain-compaction-threshold
или параметр сессии
domain_compaction_threshold
catalog session property.
Процедуры#
system.flush_metadata_cache()
Очистить кэш JDBC метаданных. Команда ниже очищает кэш метаданных всех схем в каталоге
example
.USE example.example_schema; CALL system.flush_metadata_cache();
Case insensitive идентификаторы#
Когда параметр конфигурации case-insensitive-name-matching
установлен в true
, CedrusData может обращаться к
схемам и таблицам источника, имена которых на являются lowercase. Для этого CedrusData сопоставляет lowercase название
схемы или таблицы с ее реальным названием в источнике данных. Например, если таблица в источнике данных имеет название
Customers
, CedrusData позволяет обратиться к ней по имени customers
.
В случае, если источник имеет несколько объектов, имена которых отличаются только регистром (например, Customer
и
customer
), CedrusData не может автоматически определить, к какому объекту обращаться.
В этом случае вы можете явно задать сопоставление имен в помощью файла в JSON формате, путь к которому следует указать
в параметре конфигурации каталога case-insensitive-name-matching.config-file
. Например:
{
"schemas": [
{
"remoteSchema": "CaseSensitiveName",
"mapping": "case_insensitive_1"
},
{
"remoteSchema": "cASEsENSITIVEnAME",
"mapping": "case_insensitive_2"
}],
"tables": [
{
"remoteSchema": "CaseSensitiveName",
"remoteTable": "tablex",
"mapping": "table_1"
},
{
"remoteSchema": "CaseSensitiveName",
"remoteTable": "TABLEX",
"mapping": "table_2"
}]
}
В данном случае, при обращении из CedrusData к схеме case_insensitive_1
, запрос будет переадресован к схеме
источника CaseSensitiveName
, а при обращении из CedrusData к таблице case_insensitive_1.table_1
запрос будет
переадресован к таблице источника CaseSensitiveName.tablex
.
По умолчанию если вы изменяете содержимое данного файла, экземпляр CedrusData должен быть перезапущен, что бы применить
изменения. Если вы хотите изменять содержимое файла без перезапуска CedrusData, вы можете установить параметр
конфигурации case-insensitive-name-mapping.refresh-period
, который определяет частоту повторного чтения данного
файла.
case-insensitive-name-mapping.refresh-period=30s
Нетракзакционный INSERT#
Коннектор поддерживает добавление записей в источник с помощью команды INSERT statements. По умолчанию CedrusData осуществляет запись данных, используя временную таблицу, что обеспечивает транзакционные гарантии: в источник будут записаны либо все данные, либо не будет записано ничего (в случае возникновения ошибки). Однако,
Вы можете осуществлять запись данных в таблицу источника напрямую, минуя временную таблицу. Для этого установите
параметр конфигурации каталога insert.non-transactional-insert.enabled
или параметр сессии
non_transactional_insert
в значение true
. Изменение данного параметра может улучшает производительность записи,
но так же может привести данные в источнике в неопределенное состояние при возникновении ошибки в момент записи.
Например, если при вставке 10 записей в таблицу источника в середине процесса произошла ошибка, откат вставки уже
сохраненных записей может оказаться невозможным, и после выполнения команды источник будет содержать только часть
записей.
Querying Redshift#
The Redshift connector provides a schema for every Redshift schema.
You can see the available Redshift schemas by running SHOW SCHEMAS
:
SHOW SCHEMAS FROM example;
If you have a Redshift schema named web
, you can view the tables
in this schema by running SHOW TABLES
:
SHOW TABLES FROM example.web;
You can see a list of the columns in the clicks
table in the web
database
using either of the following:
DESCRIBE example.web.clicks;
SHOW COLUMNS FROM example.web.clicks;
Finally, you can access the clicks
table in the web
schema:
SELECT * FROM example.web.clicks;
If you used a different name for your catalog properties file, use that catalog
name instead of example
in the above examples.
Type mapping#
Конфигурация приведения типов#
Следующие параметры конфигурации могут быть использованы для изменения логики приведения типов.
Название |
Описание |
Значение по умолчанию |
---|---|---|
|
Как обрабатывать колонки неподдерживаемых типов:
* |
|
|
Список типов данных источника, которые должны быть принудительно приведены к |
SQL support#
The connector provides read access and write access to data and metadata in Redshift. In addition to the globally available and read operation statements, the connector supports the following features:
SQL DELETE#
Команда DELETE
с выражением WHERE
работает только в случае, когда выполнение предиката может быть полностью
делегировано источнику.
ALTER TABLE#
Коннектор поддерживает переименование таблиц только в пределах одной схемы.
Следующая команда поддерживается коннектором, так как переименовывает таблицу в пределах одной схемы.
ALTER TABLE example.schema_one.table_one RENAME TO example.schema_one.table_two
Следующая команда не поддерживается коннектором, так как меняет схему таблицы:
ALTER TABLE example.schema_one.table_one RENAME TO example.schema_two.table_two
ALTER SCHEMA#
Коннектор поддерживает переименование схемы с помощью команды ALTER SCHEMA RENAME
. Команда
ALTER SCHEMA SET AUTHORIZATION
не поддерживается.
Table functions#
The connector provides specific table functions to access Redshift.
query(varchar) -> table
#
The query
function allows you to query the underlying database directly. It
requires syntax native to Redshift, because the full query is pushed down and
processed in Redshift. This can be useful for accessing native features which
are not implemented in Trino or for improving query performance in situations
where running a query natively may be faster.
Примечание
Полиморфные табличные функции не всегда сохраняют оригинальный порядок записей в результате запроса. Есть табличная
функция содержит запрос с ORDER BY
, результат работы функции может вернуть записи в ином порядке. Для
восстановления требуемого порядка используйте ORDER BY
в запросе CedrusData.
For example, select the top 10 nations by population:
SELECT
*
FROM
TABLE(
example.system.query(
query => 'SELECT
TOP 10 *
FROM
tpch.nation
ORDER BY
population DESC'
)
);