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

Подключение ClickHouse к внешним источникам данных с помощью JDBC

примечание

Использование JDBC требует наличия моста ClickHouse JDBC, поэтому вам нужно использовать clickhouse-local на локальной машине для передачи данных из вашей базы данных в ClickHouse Cloud. Посетите страницу Использование clickhouse-local в разделе Миграция документации для получения деталей.

Обзор: ClickHouse JDBC Bridge в сочетании с табличной функцией jdbc или JDBC движком таблицы позволяет ClickHouse получать доступ к данным из любого внешнего источника данных, для которого доступен JDBC драйвер:

Схема архитектуры ClickHouse JDBC Bridge

Это удобно, когда для внешнего источника данных нет встроенного движка интеграции, табличной функции или внешнего словаря, но существует JDBC драйвер для источника данных.

Вы можете использовать ClickHouse JDBC Bridge как для чтения, так и для записи. И параллельно для нескольких внешних источников данных, например, вы можете запускать распределенные запросы в ClickHouse по нескольким внешним и внутренним источникам данных в реальном времени.

В этом уроке мы покажем, насколько легко установить, настроить и запустить ClickHouse JDBC Bridge, чтобы подключить ClickHouse к внешнему источнику данных. В качестве внешнего источника данных мы используем MySQL.

Давайте начнем!

Предварительные условия

У вас есть доступ к машине, на которой:

  1. имеется Unix shell и доступ в интернет
  2. установлен wget
  3. установлена текущая версия Java (например, OpenJDK версии >= 17)
  4. установлена и запущена текущая версия MySQL (например, MySQL версии >= 8)
  5. установлена и запущена текущая версия ClickHouse установлена

Установка ClickHouse JDBC Bridge локально

Самый простой способ использовать ClickHouse JDBC Bridge — установить и запустить его на том же хосте, где работает ClickHouse:

Схема локального развертывания ClickHouse JDBC Bridge

Давайте начнем с подключения к Unix shell на машине, где работает ClickHouse, и создадим локальную папку, в которую мы позже установим ClickHouse JDBC Bridge (вы можете назвать папку как угодно и разместить её в любом месте):

mkdir ~/clickhouse-jdbc-bridge

Теперь мы загрузим текущую версию ClickHouse JDBC Bridge в эту папку:

cd ~/clickhouse-jdbc-bridge
wget https://github.com/ClickHouse/clickhouse-jdbc-bridge/releases/download/v2.0.7/clickhouse-jdbc-bridge-2.0.7-shaded.jar

Чтобы иметь возможность подключиться к MySQL, мы создаем именованный источник данных:

cd ~/clickhouse-jdbc-bridge
mkdir -p config/datasources
touch config/datasources/mysql8.json

Теперь вы можете скопировать и вставить следующую конфигурацию в файл ~/clickhouse-jdbc-bridge/config/datasources/mysql8.json:

{
  "mysql8": {
  "driverUrls": [
    "https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar"
  ],
  "jdbcUrl": "jdbc:mysql://<host>:<port>",
  "username": "<username>",
  "password": "<password>"
  }
}
примечание

в конфигурационном файле выше

  • вы можете использовать любое имя для источника данных, мы использовали mysql8
  • в значении для jdbcUrl вам нужно заменить <host> и <port> на соответствующие значения в соответствии с вашей работающей инстанцией MySQL, например "jdbc:mysql://localhost:3306"
  • вам нужно заменить <username> и <password> на ваши учетные данные MySQL, если вы не используете пароль, вы можете удалить строку "password": "<password>" в конфигурационном файле выше
  • в значении для driverUrls мы просто указали URL, по которому можно загрузить текущую версию MySQL JDBC драйвера. Это всё, что нам нужно сделать, и ClickHouse JDBC Bridge автоматически загрузит этот JDBC драйвер (в ОС-специфический каталог).

Теперь мы готовы запустить ClickHouse JDBC Bridge:

cd ~/clickhouse-jdbc-bridge
java -jar clickhouse-jdbc-bridge-2.0.7-shaded.jar
примечание

Мы запустили ClickHouse JDBC Bridge в режиме foreground. Чтобы остановить Bridge, вы можете вернуть приложение Unix shell из выше и нажать CTRL+C.

Использование JDBC соединения из ClickHouse

Теперь ClickHouse может получить доступ к данным MySQL, используя либо табличную функцию jdbc, либо JDBC движок таблицы.

Самый простой способ выполнить следующие примеры — скопировать и вставить их в clickhouse-client или в Play UI.

  • jdbc Табличная функция:
SELECT * FROM jdbc('mysql8', 'mydatabase', 'mytable');
примечание

В качестве первого параметра для jdbc табличной функции мы используем имя именованного источника данных, который мы настроили выше.

  • JDBC Движок таблицы:
CREATE TABLE mytable (
     <column> <column_type>,
     ...
)
ENGINE = JDBC('mysql8', 'mydatabase', 'mytable');

SELECT * FROM mytable;
примечание

В качестве первого параметра для клаузи jdbc engine мы используем имя именованного источника данных, который мы настроили выше.

Схема таблицы ClickHouse JDBC engine и схема подключенной таблицы MySQL должны совпадать, например, имена и порядок столбцов должны быть одинаковыми, а типы данных столбцов должны быть совместимыми.

Установка ClickHouse JDBC Bridge снаружи

Для распределенного кластера ClickHouse (кластера с более чем одной хостом ClickHouse) имеет смысл установить и запустить ClickHouse JDBC Bridge на отдельном хосте:

Схема внешнего развертывания ClickHouse JDBC Bridge

Это имеет преимущество, что каждый хост ClickHouse может получить доступ к JDBC Bridge. В противном случае JDBC Bridge нужно было бы устанавливать локально для каждой инстанции ClickHouse, которая должна получать доступ к внешним источникам данных через Bridge.

Чтобы установить ClickHouse JDBC Bridge снаружи, мы выполняем следующие шаги:

  1. Мы устанавливаем, настраиваем и запускаем ClickHouse JDBC Bridge на выделенном хосте, следуя шагам, описанным в разделе 1 этого руководства.

  2. На каждом хосте ClickHouse мы добавляем следующий блок конфигурации в конфигурацию сервера ClickHouse (в зависимости от выбранного вами формата конфигурации используйте версию XML или YAML):

<jdbc_bridge>
   <host>JDBC-Bridge-Host</host>
   <port>9019</port>
</jdbc_bridge>
примечание
  • вам нужно заменить JDBC-Bridge-Host на имя хоста или IP-адрес выделенного хоста ClickHouse JDBC Bridge
  • мы указали порт по умолчанию для ClickHouse JDBC Bridge 9019, если вы используете другой порт для JDBC Bridge, вам необходимо адаптировать конфигурацию выше соответствующим образом