目錄
- 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
Atomic
支持非阻塞的DROP TABLE和RENAME TABLE查詢和原子的EXCHANGE TABLES t1 AND t2查詢,默認情況下使用Atomic資料庫引擎,
建表陳述句
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 TABLES
RENAME查詢是在不更改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 TABLES
EXCHANGE以原子方式交換表,
-- 非原子操作
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中的每個表自動生成唯一的路徑,
MySQL
MySQL引擎用于將遠程的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與ClickHouse資料型別對應
| MySQL | ClickHouse |
|---|---|
| UNSIGNED TINYINT | UInt8 |
| TINYINT | Int8 |
| UNSIGNED SMALLINT | UInt16 |
| SMALLINT | Int16 |
| UNSIGNED INT | UInt32 |
| UNSIGNED MEDIUMINT | UInt32 |
| INT,MEDIUMINT | Int32 |
| UNSIGNED BIGINT | UInt64 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| DATE | Date |
| DATETIME,TIMESTAMP | DateTime |
| BINARY | FixedString |
其他的MySQL資料型別將全部都轉換為String,
使用例子
MySQL操作:
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)
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 │
└────────┴───────┘
PostgreSQL
允許連接到遠程PostgreSQL服務,支持讀寫操作(SELECT和INSERT查詢),以在ClickHouse和PostgreSQL之間交換資料,
在SHOW TABLES和DESCRIBE TABLE查詢的幫助下,從遠程PostgreSQL實時訪問表串列和表結構,
支持表結構修改(ALTER TABLE ... ADD|DROP COLUMN),如果use_table_cache引數(參見下面的引擎引數)設定為1,則會快取表結構,不會檢查是否被修改,但可以用DETACH和ATTACH查詢進行更新,
使用總體上與mysql引擎類似
創建資料庫
CREATE DATABASE test_database
ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `use_table_cache`]);
引擎引數
- host:port — PostgreSQL服務地址
- database — 遠程資料庫名次
- user — PostgreSQL用戶名稱
- password — PostgreSQL用戶密碼
- schema - PostgreSQL 模式
- use_table_cache — 定義資料庫表結構是否已快取或不進行,可選的,默認值: 0
資料型別對應
| PostgreSQL | ClickHouse |
|---|---|
| DATE | Date |
| TIMESTAMP | DateTime |
| REAL | Float32 |
| DOUBLE | Float64 |
| DECIMAL | Decimal |
| NUMERIC | Decimal |
| SMALLINT | Int16 |
| INTEGER | Int32 |
| BIGINT | Int64 |
| SERIAL | UInt32 |
| BIGSERIAL | UInt64 |
| TEXT | String |
| CHAR | String |
| INTEGER | Nullable(Int32) |
| ARRAY | Array |
SQLite
允許連接到SQLite資料庫,并支持ClickHouse和SQLite交換資料, 執行INSERT和SELECT查詢,
SQLite將整個資料庫(定義、表、索引和資料本身)存盤為主機上的單個跨平臺檔案,在寫入程序中,SQLite會鎖定整個資料庫檔案,因此寫入操作是順序執行的,讀操作可以是多任務的,SQLite不需要服務管理(如啟動腳本)或基于GRANT和密碼的訪問控制,訪問控制是通過授予資料庫檔案本身的檔案系統權限來處理的,
創建資料庫
CREATE DATABASE sqlite_database
ENGINE = SQLite('db_path')
引擎引數
- db_path — SQLite 資料庫檔案的路徑
資料型別對應
| SQLite | ClickHouse |
|---|---|
| INTEGER | Int32 |
| REAL | Float32 |
| TEXT | String |
| BLOB | String |
Lazy
在最后一次訪問之后,只在RAM中保存expiration_time_in_seconds秒,只能用于Log表,
它是為存盤許多小的Log表而優化的,對于這些表,訪問之間有很長的時間間隔,
創建資料庫
CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds);
Replicated
該引擎基于Atomic引擎,它支持通過將DDL日志寫入ZooKeeper并在給定資料庫的所有副本上執行的元資料復制,
一個ClickHouse服務器可以同時運行和更新多個復制的資料庫,但是同一個復制的資料庫不能有多個副本,
這是一個實驗性的引擎,不應該在生產中使用,
創建資料庫
CREATE DATABASE testdb ENGINE = Replicated('zoo_path', 'shard_name', 'replica_name') [SETTINGS ...]
MaterializeMySQL
創建ClickHouse資料庫,包含MySQL中所有的表,以及這些表中的所有資料,
ClickHouse服務器作為MySQL副本作業,它讀取binlog并執行DDL和DML查詢,
這是一個實驗性的引擎,不應該在生產中使用,
創建資料庫
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MaterializeMySQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]
MaterializedPostgreSQL
使用PostgreSQL資料庫表的初始資料轉儲創建ClickHouse資料庫,并啟動復制程序,即執行后臺作業,以便在遠程PostgreSQL資料庫中的PostgreSQL資料庫表上發生新更改時應用這些更改,
ClickHouse服務器作為PostgreSQL副本作業,它讀取WAL并執行DML查詢,DDL不是復制的,但可以處理(如下所述),
這是一個實驗性的引擎,不應該在生產中使用,
創建資料庫
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MaterializedPostgreSQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]
資料分享
ClickHouse經典中文檔案分享
參考文章
- ClickHouse(01)什么是ClickHouse,ClickHouse適用于什么場景
- ClickHouse(02)ClickHouse架構設計介紹概述與ClickHouse資料分片設計
- ClickHouse(03)ClickHouse怎么安裝和部署
- ClickHouse(04)如何搭建ClickHouse集群
- ClickHouse(05)ClickHouse資料型別詳解
- ClickHouse(06)ClickHouse建表陳述句DDL詳細決議
本文來自博客園,作者:張飛的豬,轉載請注明原文鏈接:https://www.cnblogs.com/the-pig-of-zf/p/16771673.html
作者公眾號:張飛的豬大資料分享,不定期分享大資料學習的總結和相關資料,歡迎關注,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512004.html
標籤:其他
