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中,并允许您对表进行INSERT和SELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换

MySQL数据库引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中,因此您可以执行诸如SHOW TABLES或SHOW 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)
相关推荐
广州灵眸科技有限公司4 小时前
4G 模组开机自连 systemd 服务方案:基于灵眸科技EAI1106--Core-T
运维·服务器·科技
川石课堂软件测试5 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
qq_401700416 小时前
Linux设备树详解
linux·运维·服务器
刚入门的大一新生6 小时前
Linux-信号
linux·运维·服务器
云宏信息11 小时前
超融合和存算分离怎么选?从性能、可靠性、扩展、成本四个维度讲述如何精准匹配架构选型 | 附企业降本轻量云方案
运维·服务器·架构·云计算
pjj1985412 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse
咸鱼梦想家π12 小时前
Linux开发工具(下)
linux·运维·服务器
1024奇点12 小时前
【仓颉语言入门 · 第二篇 第 12 课】
开发语言·数据库·ide·mysql·开源
冰暮流星12 小时前
mysql之insert优化
数据库·mysql
北方的银狐-Zero13 小时前
OntoL 7.0|面向工业多智能体的语义本体套件,让异构系统真正 “看懂彼此”——OntoL的本体产品矩阵
人工智能·mysql·sqlite·1024程序员节·本体论·本体产品