@IvanIvanichNN
Атишничаю потихоньку

Как исправить ошибку в подключении к Clickhouse из dbt?

Пытаюсь протестировать соединение dbt с Clickhouse (далее - CH). СН развернута в Я.Облаке, скачал SSL и прописал путь к нему в config.xml для СН как написано в инструкции. dbt стоит и стучится к CH на ВМ также из Я.Облака. После команды dbt debug на тесте соединения с БД вылезает ошибка следующего содержания:
Текст трэйса

Unexpected Http Driver Exception. 
Traceback (most recent call last):
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 703, in urlopen
   httplib_response = self._make_request(
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 386, in _make_request
   self._validate_conn(conn)
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 1040, in _validate_conn
   conn.connect()
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/connection.py", line 414, in connect
   self.sock = ssl_wrap_socket(
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/util/ssl_.py", line 449, in ssl_wrap_socket
   ssl_sock = _ssl_wrap_socket_impl(
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/util/ssl_.py", line 493, in _ssl_wrap_socket_impl
   return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
 File "/usr/lib/python3.8/ssl.py", line 500, in wrap_socket
   return self.sslsocket_class._create(
 File "/usr/lib/python3.8/ssl.py", line 1040, in _create
   self.do_handshake()
 File "/usr/lib/python3.8/ssl.py", line 1309, in do_handshake
   self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/requests/adapters.py", line 440, in send
   resp = conn.urlopen(
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 813, in urlopen
   return self.urlopen(
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 813, in urlopen
   return self.urlopen(
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 785, in urlopen
   retries = retries.increment(
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/urllib3/util/retry.py", line 592, in increment
   raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='c-c9q06q78m45per350pr9.rw.mdb.yandexcloud.net', port=9440): Max retries exceeded with url: /?query=SELECT+version%28%29%2C+timezone%28%29%2C+database%28%29 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/clickhouse_connect/driver/httpclient.py", line 193, in _raw_request
   response: Response = self.session.request(method, self.url,
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/requests/sessions.py", line 529, in request
   resp = self.send(prep, **send_kwargs)
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/requests/sessions.py", line 645, in send
   r = adapter.send(request, **kwargs)
 File "/home/ivan-ds/.local/lib/python3.8/site-packages/requests/adapters.py", line 517, in send
   raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='c-c9q06q78m45per350pr9.rw.mdb.yandexcloud.net', port=9440): Max retries exceeded with url: /?query=SELECT+version%28%29%2C+timezone%28%29%2C+database%28%29 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)')))


Сам dbt предлагает мне проверить креды к БД, но с консольного клиента CH и DBeaver подключение идет без проблем под тем же портом, юзером и паролем. CH и ВМ, с которой пытаюсь подключиться, развернуты в одной зоне доступа. Файлы профиля и проекта вроде описаны корректно. На всякий случай настройки прилагаю под очередным спойлером:
содержание profile.yml

clickhouse_starschema:
target: dev
outputs:
dev:
type: clickhouse
schema: 'homework_db'
port: 9440
user: dis
host: c-c9q06q78m45per350pr9.rw.mdb.yandexcloud.net
password: ***** 
verify: True
secure: True
connect_timeout: 30


Подскажите как это побороть? Настройки по разному крутил, и в кавычки значения параметров оборачивал (думал может прочитать не может), но лучшую альтернативу что dbt выдавал - ошибку со стороны CH мол, что нужно другой порт использовать для соединения http.
  • Вопрос задан
  • 683 просмотра
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы