Работа с базами данных ClickHouse
В этом разделе описана основная информация про работу с внешней базой данных ClickHouse.
Для работы с внешней базой данных ClickHouse необходимо выполнить следующие шаги:
-
Создать секрет, содержащий пароль для подключения к базе данных.
CREATE OBJECT clickhouse_datasource_user_password (TYPE SECRET) WITH (value = "<password>");
-
Создать внешний источник данных, описывающий целевую базу данных внутри кластера ClickHouse. Для соединения с ClickHouse можно использовать либо нативный TCP-протокол (
PROTOCOL="NATIVE"
), либо протокол HTTP (PROTOCOL="HTTP"
). Включить шифрование соединений к внешней базе данных можно с помощью параметраUSE_TLS="TRUE"
.CREATE EXTERNAL DATA SOURCE clickhouse_datasource WITH ( SOURCE_TYPE="ClickHouse", LOCATION="<host>:<port>", DATABASE_NAME="<database>", AUTH_METHOD="BASIC", LOGIN="<login>", PASSWORD_SECRET_NAME="clickhouse_datasource_user_password", PROTOCOL="NATIVE", USE_TLS="TRUE" );
-
Развернуть коннектор и настроить динамические узлы YDB на взаимодействие с ним. Также необходимо обеспечить сетевой доступ с динамических узлов YDB к внешнему источнику данных (по адресу, указанному в параметре
LOCATION
запросаCREATE EXTERNAL DATA SOURCE
). В случае, если на предыдущем шаге было включено шифрование сетевых соединений к внешнему источнику, коннектор будет использовать системные корневые сертификаты (более подробно о настройке TLS можно узнать в инструкции по разворачиванию коннектора). -
Выполнить запрос к базе данных.
Синтаксис запросов
Для работы с ClickHouse используется следующая форма SQL-запроса:
SELECT * FROM clickhouse_datasource.<table_name>
где:
clickhouse_datasource
- идентификатор внешнего источника данных;<table_name>
- имя таблицы внутри внешнего источника данных.
Ограничения
При работе с кластерами ClickHouse существует ряд ограничений:
-
Внешние источники доступны только для чтения данных через запросы
SELECT
. Запросы, модифицирующие таблицы во внешних источниках, движком обработки федеративных запросов в настоящее время не поддерживаются. -
Если значение даты, хранящейся во внешнем источнике данных, находится вне допустимого для YDB диапазона (все используемые даты должны быть позднее 1970-01-01, но ранее 2105-12-31), в YDB такое значение будет преобразовано в
NULL
. -
Система обработки федеративных запросов YDB умеет передавать исполнение некоторых частей запроса системе, выступающей в качестве источника данных. Фрагменты запроса передаются сквозь YDB непосредственно во внешнюю систему и обрабатываются внутри неё. С помощью этой оптимизации, которая носит название «пушдауна предикатов» (predicate pushdown), удаётся значительно снизить объём данных, передаваемых от источника к движку обработки федеративных запросов. Благодаря этому снижается нагрузка на сеть и экономятся вычислительные ресурсы YDB.
Частный случай пушдауна предикатов, при котором выполняется передача фильтрующих выражений, указанных после ключевого слова
WHERE
, называется «пушдауном фильтров» (filter pushdown). Пушдаун фильтров возможен при использовании:Описание Пример Фильтров вида IS NULL
/IS NOT NULL
WHERE column1 IS NULL
илиWHERE column1 IS NOT NULL
Логических условий OR
,NOT
,AND
.WHERE column IS NULL OR column2 is NOT NULL
.Условий сравнения =
,<>
,<
,<=
,>
,>=
c другими колонками или константами.WHERE column3 > column4 OR column5 <= 10
.Поддерживаемые типы данных для пушдауна фильтров:
Тип данных YDB Bool
Int8
Uint8
Int16
Uint16
Int32
Uint32
Int64
Uint64
Float
Double
Поддерживаемые типы данных
По умолчанию в ClickHouse колонки физически не могут содержать значение NULL
, однако пользователь имеет возможность создать таблицу с колонками опциональных, или nullable типов. Типы колонок, отображаемые YDB при извлечении данных из внешней базы данных ClickHouse, будут зависеть от того, используются ли в таблице ClickHouse примитивные или опциональные типы. При этом в связи с рассмотренными выше ограничениями типов YDB, использующихся для хранения дат и времени, все аналогичные типы ClickHouse отображаются в YDB как опциональные.
Ниже приведены таблицы соответствия типов ClickHouse и YDB. Все остальные типы данных, за исключением перечисленных, не поддерживаются.
Примитивные типы данных
Тип данных ClickHouse | Тип данных YDB | Примечания |
---|---|---|
Bool |
Bool |
|
Int8 |
Int8 |
|
UInt8 |
Uint8 |
|
Int16 |
Int16 |
|
UInt16 |
Uint16 |
|
Int32 |
Int32 |
|
UInt32 |
Uint32 |
|
Int64 |
Int64 |
|
UInt64 |
Uint64 |
|
Float32 |
Float |
|
Float64 |
Double |
|
Date |
Date |
|
Date32 |
Optional<Date> |
Допустимый диапазон дат с 1970-01-01 и до 2105-12-31. При выходе значения за границы диапазона возвращается NULL . |
DateTime |
Optional<DateTime> |
Допустимый диапазон значений времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL . |
DateTime64 |
Optional<Timestamp> |
Допустимый диапазон значений времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL . |
String |
String |
|
FixedString |
String |
Нулевые байты FixedString переносятся в String без изменений. |
Опциональные типы данных
Тип данных ClickHouse | Тип данных YDB | Примечания |
---|---|---|
Nullable(Bool) |
Optional<Bool> |
|
Nullable(Int8) |
Optional<Int8> |
|
Nullable(UInt8) |
Optional<Uint8> |
|
Nullable(Int16) |
Optional<Int16> |
|
Nullable(UInt16) |
Optional<Uint16> |
|
Nullable(Int32) |
Optional<Int32> |
|
Nullable(UInt32) |
Optional<Uint32> |
|
Nullable(Int64) |
Optional<Int64> |
|
Nullable(UInt64) |
Optional<Uint64> |
|
Nullable(Float32) |
Optional<Float> |
|
Nullable(Float64) |
Optional<Double> |
|
Nullable(Date) |
Optional<Date> |
|
Nullable(Date32) |
Optional<Date> |
Допустимый диапазон дат с 1970-01-01 и до 2105-12-31. При выходе значения за границы диапазона возвращается NULL . |
Nullable(DateTime) |
Optional<DateTime> |
Допустимый диапазон значений времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL . |
Nullable(DateTime64) |
Optional<Timestamp> |
Допустимый диапазон значений времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL . |
Nullable(String) |
Optional<String> |
|
Nullable(FixedString) |
Optional<String> |
Нулевые байты FixedString переносятся в String без изменений. |