clickhouse數據庫操作


一、關於clickhouse引擎

ch數據庫和表都可以設置自己的引擎,不同數據選擇適合的引擎效率會增加。不同的引擎代表不同的類型,比如擁有何種特性、數據以何種形式被存儲以及如何被加載。這個概念在其他數據庫里體現的不多。

引擎參考:https://blog.csdn.net/qq_42979842/article/details/108939841

1.1、數據庫引擎

Ordinary
  默認引擎,此數據庫可以使用任意表引擎。

Dictionary
  字典引擎,此數據庫會為所有數據字典創建數據表。

 Memory
  內存引擎,此數據庫中的表只存放在內存中,重啟丟失。

Lazy
  日志引擎,此數據庫只能使用Log系列的表引擎。

MySQL
  MySQL引擎,此數據庫可以自動拉取遠端MySQL數據(類似於Oracle的dblink,可以對遠程表進行讀寫)

1.2、數據表引擎

 

 

 1.3、數據庫集群和分布式的概念

-數據庫集群有的具有單份數據集,有的具有兩份或多份相似的數據集,有的具有兩份或多份實時一致的數據集,是將幾台服務器集中在一起,實現同一數據集業務;而分布式數據庫系統往往具有完全不同的數據集,是將幾台服務器集中在一起,實現不同數據集的業務。
-數據庫集群往往是同構的系統,要求集群各節點都具有相同的操作系統和數據庫系統版本,甚至補丁包的版本也要求保持一致;而分布式數據庫系統可以是異構系統,包含不同的操作系統和不同的數據庫系統。
-數據庫集群往往建立在高速局域網內,一般在一個網段內;而分布式數據庫系統既可以是高速局域網,也可以是跨部門、跨單位的異地遠程網絡,一般是跨網段,需要路由。
-數據庫集群組織緊密,一台節點跨了,其他節點可以立即頂上,服務保證延續;而分布式數據庫組織松散,一個節點跨了,那這個節點的數據服務就不可用了。
-分布式數據庫的數據處理一般需要多個節點分布式執行,協同配合才能出結果;而數據庫集群不一定需要分布式協作就能出結果;
-分布式數據庫中的每一個數據節點,為提升高可用和性能,都可以做成數據庫集群。

我們單機操作不涉及這么復雜的概念,一般一個單機數據庫就夠了,這里提出來是為了學習clickhouse的時候會遇到相關概念,免得一臉懵逼。

二、新建數據庫

基本語法:【方括號里的可以省略】

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]

舉例:

CREATE DATABASE IF NOT EXISTS mydb;

 使用默認引擎Ordinary,在此數據庫下可以使用任意類型的表引擎,在絕大多數情況下都只需使用默認的數據庫引擎

 

 

三、創建數據表

基本語法:

CREATE TABLE [IF NOT EXISTS][db.]table_name [ON CLUSTER cluster]
(name1 [type1] [DEFAULT|MATERIALIZED|ALIASexpr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...) ENGINE = engine

后面的‘()’括號中的內容為表結構及引擎聲明;

其中:

DEFAULT – 默認值,如果INSERT中不包含指定的列,那么將通過表達式計算它的默認值並填充它;

MATERIALIZED – 物化表達式,被該表達式指定的列不能被INSERT,因為它總是被計算出來的,對於INSERT而言,不需要考慮這些列。 另外,在SELECT查詢中如果包含星號,此列不會被查詢;

ALIAS – 別名,這樣的列不會存儲在表中。它的值不能夠通過INSERT寫入,同時使用SELECT查詢星號時,這些列也不會被用來替換星號,但是它們可以顯示的用於SELECT中,在這種情況下,在查詢分析中別名將被替換

3.1、直接創建

create table t1(id UInt8,name String,address String)engine=MergeTree order by id

 

3.2、創建一個與其他表結構相同的表

create table t2 as t1 engine=MergeTree order by id

可以對其指定不同的表引擎聲明。如果沒有表引擎聲明,則創建的表將與db2.name2使用相同的表引擎。

 

3.3、使用指定的引擎創建一個與SELECT子句的結果具有相同結構的表,並使用SELECT子句的結果填充它

create table t3engine=TinyLog as select * from t1

 

 

 

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM