ClickHouse集成Mysql表引擎跨服务器读表说明

MySQL表引擎

Clickhouse 上的MySQL引擎可以对存在远程MySQL服务器上的数据执行SELECT查询。

调用格式:

sql 复制代码
MySQL('host:port', 'database', 'table', 'user', 'password', replace_query, 'on_duplicate_clause');

调用参数

  • host:port --- MySQL 服务器地址。

  • database --- 数据库的名称。

  • table --- 表名称。

  • user --- 数据库用户。

  • password --- 用户密码。

  • replace_query --- 将 INSERT INTO 查询是否替换为 REPLACE INTO 的标志。如果 replace_query=1,则替换查询

  • 'on_duplicate_clause' --- 将 ON DUPLICATE KEY UPDATE 'on_duplicate_clause' 表达式添加到 INSERT 查询语句中。例如:impression = VALUES(impression) + impression。如果需要指定 'on_duplicate_clause',则需要设置 replace_query=0。如果同时设置 replace_query = 1'on_duplicate_clause',则会抛出异常。

此时,简单的WHERE子句(例如 =, !=, >, >=, <, <=)是在MySQL服务器上执行。

其余条件以及LIMIT采样约束语句仅在对MySQL的查询完成后才在ClickHouse中执行。

MySQL引擎不支持NULL值,因此,当从MySQL表中读取数据时,NULL将转换为指定列类型的默认值(通常为0或空字符串)。

示例:

sql 复制代码
select * from    MySQL('host:port', 'database', 'table', 'user', 'password', replace_query, 'on_duplicate_clause');

mysql 远程表映射

MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERTSELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换

MySQL数据库引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中,因此您可以执行诸如SHOW TABLESSHOW CREATE TABLE之类的操作。

但您无法对其执行以下操作:

  • RENAME
  • CREATE TABLE
  • ALTER

创建数据库

sql 复制代码
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')

引擎参数

  • host:port --- MySQL服务地址
  • database --- MySQL数据库名称
  • user --- MySQL用户名
  • password --- MySQL用户密码

支持的数据类型

MySQL ClickHouse
UNSIGNED TINYINT UInt8
TINYINT Int8
UNSIGNED SMALLINT UInt16
SMALLINT Int16
UNSIGNED INT, UNSIGNED MEDIUMINT UInt32
INT, MEDIUMINT Int32
UNSIGNED BIGINT UInt64
BIGINT Int64
FLOAT Float32
DOUBLE Float64
DATE Date
DATETIME, TIMESTAMP DateTime
BINARY FixedString

其他的MySQL数据类型将全部都转换为String.

全局变量支持

为了更好地兼容,您可以在SQL样式中设置全局变量,如@@identifier.

支持这些变量:

  • version
  • max_allowed_packet

"警告" 到目前为止,这些变量是存根,并且不对应任何内容。

示例: SELECT @@version;

MySQL操作示例:

sql 复制代码
mysql> USE test;
Database changed

mysql> CREATE TABLE `mysql_table` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `float` FLOAT NOT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
|      1 |     2 |
+------+-----+
1 row in set (0,00 sec)
相关推荐
于眠牧北1 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
Sinclair2 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
Turnip12023 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
Rockbean3 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩3 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
海天鹰4 天前
【免费】PHP主机=域名+解析+主机
服务器
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
不是二师兄的八戒4 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
芝士雪豹只抽瑞克五4 天前
Nginx 高性能Web服务器笔记
服务器·nginx