目录
- Atomic
- 建表语句
- 特性
- Table UUID
- RENAME TABLES
- DROP/DETACH TABLES
- EXCHANGE TABLES
- ReplicatedMergeTree in Atomic Database
- MySQL
- 创建数据库
- mysql与ClickHouse数据类型对应
- 使用例子
- PostgreSQL
- 创建数据库
- 数据类型对应
- SQLite
- 创建数据库
- 数据类型对应
- Lazy
- 创建数据库
- Replicated
- 创建数据库
- MaterializeMySQL
- 创建数据库
- MaterializedPostgreSQL
- 创建数据库
- 资料分享
- 参考文章
这里会介绍ClickHouse几种数据库引擎,已经对应的特点和应用的场景 。数据库引擎允许您处理数据表 。默认情况下 , ClickHouse使用Atomic数据库引擎 。它提供了可配置的table engines和SQL dialect 。目前的数据库引擎:
- MySQL
- MaterializeMySQL
- Lazy
- Atomic
- PostgreSQL
- MaterializedPostgreSQL
- Replicated
- SQLite
建表语句
CREATE DATABASE test[ ENGINE = Atomic];
特性Table UUID数据库Atomic中的所有表都有唯一的UUID,并将数据存储在目录/clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/,其中xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy是该表的UUID 。通常,UUID是自动生成的,但用户也可以在创建表时以相同的方式显式指定UUID(不建议这样做) 。例如:
CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE = ...;
RENAME TABLESRENAME查询是在不更改UUID和移动表数据的情况下执行的 。这些查询不会等待使用表的查询完成,而是会立即执行 。DROP/DETACH TABLES在DROP TABLE上,不删除任何数据 , 数据库Atomic只是通过将元数据移动到/clickhouse_path/metadata_dropped/将表标记为已删除,并通知后台线程 。最终表数据删除前的延迟由database_atomic_delay_before_drop_table_sec设置指定 。
可以使用SYNC修饰符指定同步模式 。使用database_atomic_wait_for_drop_and_detach_synchronously设置执行此操作 。
EXCHANGE TABLESEXCHANGE以原子方式交换表 。
-- 非原子操作RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;--原子操作EXCHANGE TABLES new_table AND old_table;
ReplicatedMergeTree in Atomic Database对于ReplicatedMergeTree表,建议不要在ZooKeeper和副本名称中指定engine-path的参数 。在这种情况下,将使用配置的参数default_replica_path和default_replica_name 。如果要显式指定引擎的参数,建议使用{uuid}宏 。这是非常有用的,以便为ZooKeeper中的每个表自动生成唯一的路径 。
MySQLMySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERT和SELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换 。
MySQL数据库引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中,因此您可以执行诸如SHOW TABLES或SHOW CREATE TABLE之类的操作 。
但无法对其执行操作:RENAME、CREATE TABLE和ALTER 。
创建数据库
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操作:
mysql> USE test;Database changedmysql> 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)
ClickHouse中的数据库,与MySQL服务器交换数据:CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')SHOW DATABASES┌─name─────┐│ default││ mysql_db ││ system│└──────────┘SHOW TABLES FROM mysql_db┌─name─────────┐│mysql_table │└──────────────┘SELECT * FROM mysql_db.mysql_table┌─int_id─┬─value─┐│1 │2 │└────────┴───────┘INSERT INTO mysql_db.mysql_table VALUES (3,4)SELECT * FROM mysql_db.mysql_table┌─int_id─┬─value─┐│1 │2 ││3 │4 │└────────┴───────┘
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 使用EF Core更新与修改生产数据库
- 利用Pandas处理数据 缺失值的处理 数据库的使用 python-数据描述与分析2
- 有趣实验 .NET下数据库的负载均衡(续)
- Seal-Report: 开放式数据库报表工具
- 引擎之旅 Chapter.4 日志系统
- 企业运维 | MySQL关系型数据库在Docker与Kubernetes容器环境中快速搭建部署主从实践
- C#.NET ORM 如何访问 Access 数据库 [FreeSql]
- 有趣实验 .NET下数据库的负载均衡
- SQL的事务
- 下 MySQL数据库-数据表