专业的编程技术博客社区

网站首页 > 博客文章 正文

ClickHouse MySQL引擎(clickhouse mysql引擎表配置)

baijin 2024-10-17 07:46:51 博客文章 8 ℃ 0 评论

将 MySQL 与 ClickHouse 集成有两种方式

  • 使用 MySQL 表引擎,从 MySQL 表中读取
  • 使用 MaterializedMySQL 数据库引擎,将 MySQL 中的数据库与 ClickHouse 中的数据库同步

MySQL 引擎允许对存储在远程 MySQL 服务器上的数据执行 SELECT 和 INSERT 操作。

语法如下:

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] | named_collection[, option=value [,..]]})
SETTINGS
    [ connection_pool_size=16, ]
    [ connection_max_tries=3, ]
    [ connection_wait_timeout=5, ]
    [ connection_auto_close=true, ]
    [ connect_timeout=10, ]
    [ read_write_timeout=300 ]
;

表结构可以与原始MySQL表结构不同:

  • 列名应与原始MySQL表中的列名相同,但可以仅使用这些列中的一部分,并且可以以任何顺序使用。
  • 列类型可能与原始MySQL表中的不同。ClickHouse会尝试将值转换为ClickHouse数据类型。
  • external_table_functions_use_nulls设置定义如何处理Nullable列。默认值为1。如果为0,则表函数不会创建Nullable列,并在null值的位置插入默认值。对于数组中的NULL值,也适用此设置。

引擎参数:

  • host:port — MySQL服务器地址。
  • database — 远程数据库名称。
  • table — 远程表名称。
  • user — MySQL用户。
  • password — 用户密码。
  • replace_query — 将INSERT INTO查询转换为REPLACE INTO的标志。如果replace_query=1,则会替换查询。
  • on_duplicate_clause — 添加到INSERT查询的ON DUPLICATE KEY on_duplicate_clause表达式。例如: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 KEY子句一起使用的on_duplicate_clause。要指定on_duplicate_clause,您需要将replace_query参数传递为0。如果同时传递replace_query = 1和on_duplicate_clause,则ClickHouse会生成异常。
  • 参数还可以使用命名集合进行传递。在这种情况下,主机和端口应分别指定。此方法适用于生产环境。

对于简单的 WHERE 子句,比如 =、!=、>、>=、<、<=,当前是在 MySQL 服务器上执行的。

而对于其他条件和 LIMIT 抽样约束,则在 MySQL 查询完成后才会在 ClickHouse 中执行。

支持多个副本,必须用|列出。例如:

CREATE TABLE test_replicas (id UInt32, name String, age UInt32, money UInt32) ENGINE = MySQL(`mysql{2|3|4}:3306`, 'clickhouse', 'test_replicas', 'root', 'clickhouse');

参数配置

默认设置并不是非常高效,因为它们甚至不会重用连接。这些设置可以增加服务器每秒运行的查询数量。

connection_auto_close 允许在查询执行后自动关闭连接,即禁用连接重用。

  • 可能的取值:
  • 1 — 允许自动关闭连接,因此禁用了连接重用。
  • 0 — 不允许自动关闭连接,因此启用了连接重用。

默认值:1。

connection_max_tries 设置故障转移池的重试次数。

可能的取值:

  • 正整数。
  • 0 — 故障转移池没有重试。

默认值:3。

connection_pool_size 连接池的大小(如果所有连接都在使用中,查询将等待直到某个连接被释放)。

可能的取值:

  • 正整数。

默认值:16。

connection_wait_timeout 等待空闲连接的超时时间(如果已经有connection_pool_size个活动连接),0 - 不等待。

可能的取值:

  • 正整数。

默认值:5。

connect_timeout 连接超时(秒)。

可能的取值:

  • 正整数。

默认值:10。

read_write_timeout 读/写超时(秒)。

可能的取值:

  • 正整数。

默认值:300。

注意事项

  1. 在 INSERT 查询中,为了区分表函数 mysql(...) 和带列名的表名列表,必须使用关键字 FUNCTION 或 TABLE FUNCTION。
  2. 此引擎适用于作为clickhouse的字典表。数据量小的话可以考虑使用

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表