clickhouse 踩坑指南

1. clickhouse修改字段類型

當別人往表中插入數據,也就是對字段進行操作時,是不能修改字段類型的

此時若要修改字段類型,需要先drop掉該字段,再進行add,如果單純使用modify是不會修改成功的。

🌰:

原始 col1 類型是 string,此時若要修改爲int32:

alter table base.table ON CLUSTER *** modify column col1 Int32;

but:如果此列一直在進行被修改,比如插入數據,則會報錯:

Exception: Received from 10.2.29.1:9000 . DB::Exception: There was an error on [10.2.29.2:9000] : Code: 439, e.displayText () = DB::Exception: Cannot schedule a task (version 19.9.2.4 (official build)).

 此時應該先刪除此列,再重新add列及數據類型

ALTER TABLE base.table ON CLUSTER *** DROP COLUMN col1;   --drop列

alter table base.table ON CLUSTER *** add column col1 Int32;  --add列

 2. clickhouse建表,導入CSV數據

如果表中沒有時間戳,也沒有key,則可以使用  ENGINE = TinyLog;

CREATE TABLE defult.industry_tag (`industry` String, `tag` String) ENGINE = TinyLog;

導入CSV數據時,如果csv表中有相應的列明,則需要指明使用 FORMAT CSVWithNames,如果csv表沒有列明,則使用 FORMAT CSV

🌰:

1. 倘若CSV長這樣:

 industry,tag
 社交,QQ
 社交,WeChat
 社交,陌陌

使用如下代碼導入到clickhouse 

cat industry-tag.csv | clickhouse-client -h 10.2.**.* --password *** -m --query="INSERT INTO defult.industry_tag FORMAT CSVWithNames";

2.  倘若CSV長這樣:

社交,QQ
社交,WeChat
社交,陌陌

使用如下代碼導入到clickhouse  

cat industry-tag.csv | clickhouse-client -h 10.2.**.* --password *** -m --query="INSERT INTO defult.industry_tag FORMAT CSV";

3. 要該字段類型,需先改底層表,再改分佈式表,否則報錯

4. 建分佈式表

CREATE TABLE IF NOT EXISTS database.test_dist_table(
event_date Date MATERIALIZED toDate(now())
, pv Int32
, click Int32
, download Int32
, install Int32
, active Int32
, request Int32
)  ENGINE = Distributed(cluster_name***, database, test_table, rand());  --test_table爲非分佈式底層表

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章