目录
JDBC
允许CH通过JDBC连接到外部数据库。
要实现JDBC连接,CH需要使用以后台进程运行的程序 clickhouse-jdbc-bridge。
该引擎支持Nullable数据类型。
建表
- CREATE TABLE [IF NOT EXISTS] [db.]table_name
- (
- columns list...
- )
- ENGINE = JDBC(datasource_uri, external_database, external_table)
复制代码 引擎参数
- datasource_uri — 外部DBMS的URI或名字.
URI格式: jdbc:://:/?user=&password=.
MySQL示例: jdbc:mysql://localhost:3306/?user=root&password=root.
- external_database — 外部DBMS的数据库名.
- external_table — external_database中的外部表名或类似select * from table1 where column1=1的查询语句.
用法示例
通过mysql控制台客户端来创建表
Creating a table in MySQL server by connecting directly with it’s console client:- mysql> CREATE TABLE `test`.`test` (
- -> `int_id` INT NOT NULL AUTO_INCREMENT,
- -> `int_nullable` INT NULL DEFAULT NULL,
- -> `float` FLOAT NOT NULL,
- -> `float_nullable` FLOAT NULL DEFAULT NULL,
- -> PRIMARY KEY (`int_id`));
- Query OK, 0 rows affected (0,09 sec)
- mysql> insert into test (`int_id`, `float`) VALUES (1,2);
- Query OK, 1 row affected (0,00 sec)
- mysql> select * from test;
- +------+----------+-----+----------+
- | int_id | int_nullable | float | float_nullable |
- +------+----------+-----+----------+
- | 1 | NULL | 2 | NULL |
- +------+----------+-----+----------+
- 1 row in set (0,00 sec)
复制代码 在CH服务端创建表,并从中查询数据:- CREATE TABLE jdbc_table
- (
- `int_id` Int32,
- `int_nullable` Nullable(Int32),
- `float` Float32,
- `float_nullable` Nullable(Float32)
- )
- ENGINE JDBC('jdbc:mysql://localhost:3306/?user=root&password=root', 'test', 'test')
复制代码- ┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐
- │ 1 │ ᴺᵁᴸᴸ │ 2 │ ᴺᵁᴸᴸ │
- └────────┴──────────────┴───────┴────────────────┘
复制代码- INSERT INTO jdbc_table(`int_id`, `float`)
- SELECT toInt32(number), toFloat32(number * 1.0)
- FROM system.numbers
复制代码 JDBC表函数
clickhouse除了支持建表集成jdbc数据源之外,还支持通过表函数,也就是返回一个表的函数,来临时集成查询一张表的数据。它与建表集成一样,需要clickhouse-jdbc-bridge程序才能运行。它支持可空类型(基于查询的远程表的DDL)。
示例- SELECT * FROM jdbc('jdbc:mysql://localhost:3306/?user=root&password=root', 'schema', 'table')
复制代码- SELECT * FROM jdbc('mysql://localhost:3306/?user=root&password=root', 'select * from schema.table')
复制代码- SELECT * FROM jdbc('mysql-dev?p1=233', 'num Int32', 'select toInt32OrZero(''{{p1}}'') as num')
复制代码- SELECT *
- FROM jdbc('mysql-dev?p1=233', 'num Int32', 'select toInt32OrZero(''{{p1}}'') as num')
复制代码- SELECT a.datasource AS server1, b.datasource AS server2, b.name AS db
- FROM jdbc('mysql-dev?datasource_column', 'show databases') a
- INNER JOIN jdbc('self?datasource_column', 'show databases') b ON a.Database = b.name
复制代码 资料分享
ClickHouse经典中文文档分享
参考文章
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |