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)
相关推荐
你好,赵志伟6 分钟前
Socket 编程 TCP
linux·服务器·tcp/ip
Liang_GaRy1 小时前
心路历程-三个了解敲开linux的大门
linux·运维·服务器
poemyang7 小时前
十年大厂员工终明白:MySQL性能优化的尽头,是对B+树的极致理解
mysql·pagecache·顺序i/o·局部性原理·b tree·b+ tree
玩转以太网8 小时前
基于W55MH32Q-EVB 实现 HTTP 服务器配置 OLED 滚动显示信息
服务器·网络协议·http
天宇_任8 小时前
Mysql数据库迁移到GaussDB注意事项
数据库·mysql·gaussdb
小晶晶京京9 小时前
day34-LNMP详解
linux·运维·服务器
画个太阳作晴天9 小时前
A12预装app
linux·服务器·前端
碎像11 小时前
Linux上配置环境变量
linux·运维·服务器
sunflower_w12 小时前
linux I2C核心、总线与设备驱动
linux·运维·服务器
Ronin30513 小时前
【Linux系统】进程间通信:System V IPC——共享内存
linux·服务器·system v 共享内存