ClickHouse表引擎之MySQL引擎
2023-03-22 本文已影响0人
这货不是王马勺
进入clickhouse,创建测试库:
CREATE DATABASE IF NOT EXISTS testwwj;
show databases;
use testwwj;
创建链接表的语法如下,可以理解为clickhouse作为MySQL客户端:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
...
) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause'])
SETTINGS
[ connection_pool_size=16, ]
[ connection_max_tries=3, ]
[ connection_wait_timeout=5, ]
[ connection_auto_close=true, ]
[ connect_timeout=10, ]
[ read_write_timeout=300 ]
;
参数说明:
- host:port— MySQL 服务器地址。
- database— 远程数据库名称。
- table— 远程表名。
- user— MySQL 用户。
- password- 用户密码。
- replace_query— 将INSERT INTO查询转换为REPLACE INTO. 如果replace_query=1,则查询被替换。
- on_duplicate_clause—ON DUPLICATE KEY on_duplicate_clause添加到INSERT查询的表达式。
示例:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1,哪里on_duplicate_clause是UPDATE c2 = c2 + 1。请参阅MySQL 文档以查找on_duplicate_clause可以与该ON DUPLICATE KEY子句一起使用的内容。
要指定on_duplicate_clause您需要传递0给replace_query参数。如果同时传递replace_query = 1和on_duplicate_clause,ClickHouse 会生成异常。
此时,简单的 WHERE 子句(例如 =, !=, >, >=, <, <=)是在 MySQL 服务器上执行。
注:MySQL
引擎不支持 可为空 数据类型,因此,当从MySQL表中读取数据时,NULL
将转换为指定列类型的默认值(通常为0或空字符串)。
创建一张MySQL引擎测试表:
CREATE TABLE DML_COPY_175_DBTEST
(
`Id` UInt32,
`Date` Date,
`User_name` String,
`DB_IP` String,
`DB_name` String,
`SQL` String,
`Comment` String,
`rawdata` String
)ENGINE=MySQL('10.10.1.175:3306','DBTEST','DML_COPY','wenjie.wang', '123456');
show tables;
然后我们建立ClickHouse的MergeTree表:
CREATE TABLE DML_COPY_2021
(
`Id` UInt32,
`Date` Date,
`User_name` String,
`DB_IP` String,
`DB_name` String,
`SQL` String,
`Comment` String,
`rawdata` String
)engine=MergeTree
partition by (Date)
primary key (Date)
order by (Date)
;
show tables;
将MySQL所需数据导入:
INSERT INTO DML_COPY_2021
SELECT `Id` ,
`Date` ,
`User_name` ,
`DB_IP` ,
`DB_name` ,
`SQL` ,
`Comment` ,
`rawdata`
FROM DML_COPY_175_DBTEST
WHERE `Date` < '2022-01-01'
;
检查数据:
select max(Date) from DML_COPY_2021;
官网:
https://clickhouse.com/docs/zh/engines/table-engines/integrations/mysql