真实确认JDBC/ODBC引擎的存在与桥接架构,诚实对比两者在缺少对应桥接服务时截然不同的失败模式。
代码SELECT name FROM system.table_engines WHERE name IN ('JDBC','ODBC','MySQL','PostgreSQL'); which clickhouse-jdbc-bridge clickhouse-odbc-bridge; -- 本机真实都没有安装 CREATE TABLE demo.jdbc_test (id UInt32) ENGINE=JDBC('jdbc:mysql://127.0.0.1:3306/mysqllab', 'mysqllab', 'ch_integration_test'); SELECT * FROM demo.jdbc_test; -- 真的能查出数据吗?
CREATE TABLE demo.jdbc_test ... ENGINE=JDBC(...); → 真实成功(纯元数据操作,不会去检查桥接服务是否在运行) SELECT * FROM demo.jdbc_test; → DB::Exception: clickhouse-jdbc-bridge is not running. Please, start it manually. (EXTERNAL_SERVER_IS_NOT_RESPONDING)
这条错误信息真实说得非常直白——JDBC引擎本身不包含真正的JDBC协议实现,它真实依赖一个独立运行的clickhouse-jdbc-bridge进程(一个跑在JVM上的独立Java服务,真实负责用标准的JDBC驱动去连接目标数据库),ClickHouse自己这一侧只是把SQL请求转发给这个桥接服务;本机没有装这个桥接进程,报错真实又快又清楚,一眼就能看出缺了什么。
每一步都是本文上面在真实缺少桥接服务的情况下跑出来的原始结果。
JDBC/ODBC 表引擎存在但对应桥接进程未安装