1、基本命令
select bar(number,0,4) from numbers(4); select now(); 數據導入:cat t.tsv| clickhouse-client --query "insert into t from tsv" 數據導出:clickhouse-client --query "select * from t" > t.tsv 執行多條sql:clickhouse-client -h 192.168.8.101 --multiquery --query="select 10;select 20;select 30;" clickhouse-client --host 192.168.8.101 --port 9000 --user default --password --database default --query "select version();select now();" --multiquery --time
2、查看數據類型和函數
select * from system.data_type_families ;
select * from system.functions;
3、復合數據類型
Clickhouse提供了4種復合數據類型: 數組Array:在同一數組內可以包含多種數據類型,但是數據類型必須要兼容;定義表的時候數組需要明確指定元素類型 eg:select [10,200,2000.0,null] as x,toTypeName(x); 元祖tuple: Tuple 元祖類型由1--N個元素組成,每個元素之間允許設置不同的數據類型,且彼此之間要求兼容;在表定義的時候元組也需要明確指定數據類型,且數據要嚴格匹配。 eg:select tuple(100,'027','wuhan',now()) as x,toTypeName(x); 枚舉Enum:枚舉固定使用(String,Int) 這種kV鍵值對的形式定義數據;1.Key 和Value是不允許重復的,要保證唯一性;2.Key 和Value的值都不允許為Null,但是Key允許為空字符串。 eg:create table Enum(Season Enum8 (Spring=1,Summer=2,Fall=3,Winter=4))ENGINE=Memory; insert into Enum values('Summer'); 嵌套Nest:嵌套類型本質是一種多維數組的結構。嵌套表中的每個字段都是一個數組,並且行與行之間的數組長度無須對齊 eg:create table nested(username String,age UInt8,sex UInt8,address Nested(id UInt8,addr String)) Engine=Memory; insert into nested values('clickhouse',4,1,[100,101,102],['Russia Moscow','China Beijing','China Wuhan']); select address.id,address.addr from nested;
4、特殊數據類型
Nullable:Nullable並不能算是一種獨立的數據類型,它更像是一種輔助的修飾符,需要與基礎數據類型搭配一起使用,表示某個基礎數據類型可以使Null值 Nullable類型使用注意: 1.只能和基本數據類型使用,不能和復合數據類型配合使用,不能作為索引字段。 2.慎用Nullable類型,包括Nullable的數據表,不然會使查詢和寫入性能變慢。 因為在Clickhouse每個字段的數據會存儲為Column.bin文件中,若一個列字段被Nullable類型修飾之后會額外 生成一個Column.null.bin文件專門保存Null值。即在讀取和寫入數據的時候需要額外的文件操作。
5、TTL定時器
在MergeTree中,可以為某個列字段或者整張表設置TTL。當時間達到時,若列字段級別的TTL 則會刪除這一列的數據;
若表級別的TTL則會刪除整張表的數據;若同時設置了列級別的和表級別的TTL則以先到期的為准 TTL time_column + interval 3 DAY 表示數據存活的時間為time_column 時間的3天之后。 INTERVAL支持的操作:second,minute,hour,day,week,month,quarter,year。 列級別的TTL: CREATE TABLE t_column_ttl ( `id` UInt64 COMMENT 'Primary key', `create_time` Datetime, `product_desc` String TTL create_time + toIntervalSecond(10), `product_type` UInt8 TTL create_time + toIntervalSecond(10) ) ENGINE = MergeTree PARTITION BY toYYYYMM(create_time) ORDER BY id 表級別的TTL: create table t_table_ttl( id UInt64 comment '主鍵', create_time Datetime comment '創建時間', product_desc String comment '產品描述' TTL create_time + interval 10 minute, product_type UInt8 ) engine=MergeTree partition by toYYYYMM(create_time) order by create_time TTL create_time + INTERVAL 1 MONTH , create_time + INTERVAL 1 WEEK TO VOLUME 'default', create_time + INTERVAL 2 WEEK TO DISK 'default';
6、窗口函數(window functions)
1.窗口函數: Online Anallytical Processing,聯機分析處理,可以對數據庫數據進行實時分析處理 2.標准SQL語法: 分析函數 over(partition by 列名 order by 列名 ) eg: avg(column) over partition by column order by column 3.分析函數分類: 聚合類 avg(列名)、sum(列名)、count(列名)、max(列名)、min(列名) 排名類 row_number() 按照值排序時產生一個自增編號,不會重復 rank() 按照值排序時產生一個自增編號,值相等時會重復,會產生空位 dense_rank() 按照值排序時產生一個自增編號,值相等時會重復,不會產生空位 注意:排名類分析函數不需要任何參數。 其他類 lag(列名,往前的行數,[行數為null時的默認值,不指定為null]) lead(列名,往后的行數,[行數為null時的默認值,不指定為null]) ntile(n) 用於將分組數據按照順序切分成n片,返回當前切片值,如果切片不均勻,默認增加第一個切片的分布。
7、Array JOIN 子句允許在數據表的內部,與數組或者嵌套的字段進行JOIN操作,從而將一行數據變多行
LEFT Array JOIN : 左連接
Array JOIN : inner join 等連接