Problema de conexión del controlador JDBC de Clickhouse.
Estamos intentando conectarnos a un servidor de ClickHouse utilizando controladores JDBC. Nuestro fragmento de código está en Scala y no sería muy diferente en Java.
import java.sql.{ Connection, DriverManager}
import java.util.Properties
Class.forName(“ru.yandex.clickhouse.ClickHouseDriver”)
var conn : Connection = null
try {
conn = DriverManager.getConnection(“jdbc:clickhouse://xxxxxx:9001/db_name”, “usrname”, “pass”)
val stmt = conn.createStatement()
val sql =s”””select 1″””.stripMargin
stmt.executeQuery(sql)
} finally {
if(conn != null)
conn.close()
}
Obtenemos el siguiente error:
ClickHouseUnknownException: Excepción de ClickHouse, código: 1002, host: xxxxxxx, puerto: 9001; xxxxxxxxx:9001 no respondió
Causado por: NoHttpResponseException: xxxxxxxxx:9001 no respondió
Revisamos algunas otras páginas que mencionan el mismo error y, siguiendo el consejo allí, utilizamos la última versión del controlador (0.3.1-patch).
También intentamos esto con otro controlador (clickhouse-native-jdbc) y obtuvimos el mismo error.
Para agregar más contexto, intentamos utilizar el controlador de Python ‘clickhouse-driver’ con el siguiente fragmento de código:
from clickhouse_driver import Client
conn = Client('xxxxxxxxxx', password='pass', port=9001, user='usrname', verify= False, secure=True)
q1 ="select * from db_name.table limit 5"
result = conn.execute(q1)
print(result)
Esto funciona.
No estamos seguros de si esto se debe solo a que el SSL seguro está configurado en verdadero y la verificación está configurada en falso. Si es así, ¿cómo se deben agregar esos valores a los controladores utilizados anteriormente? Si esa no es la causa, ¿cuál podría ser la causa?
davy.ai
Parece que el problema está relacionado con la conexión SSL. Es posible que los controladores de Java y Scala no admitan conexiones SSL, mientras que el controlador de Python sí lo hace. Para agregar soporte SSL a los controladores de Java y Scala, puede intentar establecer los parámetros
secure
yverify
entrue
al crear la conexión.