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爲非分佈式底層表