Clickhouse对表操作分为四大类:增删查改(INSERT,DROP,SELECT,ALTER)。

增,删,查比较简单,改最复杂。那具体有哪些改的操作呢?如下清单:

ALTER

  • ALTER TABLE
    • ALTER UPDATE
    • ALTER DELETE
    • ALTER COLUMN
      • ALTER ADD COLUMN
      • ALTER DROP COLUMN
      • ALTER MODIFY COLUMN
      • ALTER COMMENT COLUMN
      • ALTER CLEAR COLUMN
      • ALTER RENAME COLUMN
    • ALTER INDEX
      • ALTER ORDER BY
      • ALTER SAMPLE BY
      • ALTER ADD INDEX
      • ALTER DROP INDEX
      • ALTER MATERIALIZE INDEX
      • ALTER CLEAR INDEX
    • ALTER CONSTRAINT
      • ALTER ADD CONSTRAINT
      • ALTER DROP CONSTRAINT
    • ALTER TTL
    • ALTER MATERIALIZE TTL
    • ALTER SETTINGS
    • ALTER MOVE PARTITION
    • ALTER FETCH PARTITION
    • ALTER FREEZE PARTITION
  • ALTER VIEW
    • ALTER VIEW REFRESH
    • ALTER VIEW MODIFY QUERY

 

 

下面以MergeTree引擎表为例,对应列表操作:

一: 建表并插入测试数据

# 创建表
#方式1
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = engine
#方式2
CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
#方式3
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...

 

 

# 创建测试表
CREATE TABLE table_test1 (
  UserID UInt32,
  UserAccount String,
  CreateDate Date,
  CreateDatetime Datetime,
  Comment Nullable(String)
) ENGINE = MergeTree()
     ORDER BY  (UserID, CreateDate)
     PRIMARY KEY (UserID)
     SETTINGS index_granularity=8192;

 

导入数据

# 插入表
#方式1-交互式
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), ...

INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...

#方式2-批量
cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMAT CSV"

#方式3-http客户端
echo -ne '10\n11\n12\n' | POST 'http://localhost:8123/?query=INSERT INTO t FORMAT TabSeparated'

 

导出数据

方式一:交互式
select * from tableName into outfile 'path/file'
方式二:非交互式
clickhouse-client  --database bdName -u default --password password --query='select * from tableName' > abc
方式二:http客户端
echo 'select 1 FORMAT TabSeparated' | curl "http://user:password@localhost:8123/" -d @- > file

 

 

# 插入数据
INSERT INTO table_test1(UserID,UserAccount,CreateDate,CreateDatetime,Comment) VALUES (100001,'zhangsan',toDate(NOW()),NOW(),'Comment');
INSERT INTO table_test1(UserID,UserAccount,CreateDate,CreateDatetime,Comment) VALUES (100002,'lisi',toDate(NOW()),NOW(),'Comment');
INSERT INTO table_test1(UserID,UserAccount,CreateDate,CreateDatetime,Comment) VALUES (100003,'wangwu',toDate(NOW()),NOW(),'Comment');
INSERT INTO table_test1(UserID,UserAccount,CreateDate,CreateDatetime,Comment) VALUES (100004,'zhaoliu',toDate(NOW()),NOW(),'Comment');
INSERT INTO table_test1(UserID,UserAccount,CreateDate,CreateDatetime,Comment) VALUES (100001,'zhangsan2',toDate(NOW()),NOW(),'Comment');
INSERT INTO table_test1(UserID,UserAccount,CreateDate,CreateDatetime,Comment) VALUES (100002,'lisi2',toDate(NOW()),NOW(),'');
INSERT INTO table_test1(UserID,UserAccount,CreateDate,CreateDatetime) VALUES (100003,'wangwu2',toDate(NOW()),NOW()); 

 

# 查询表
SELECT [DISTINCT] expr_list
    [FROM [db.]table | (subquery) | table_function] [FINAL]
    [SAMPLE sample_coeff]
    [ARRAY JOIN ...]
    [GLOBAL] ANY|ALL INNER|LEFT JOIN (subquery)|table USING columns_list
    [PREWHERE expr]
    [WHERE expr]
    [GROUP BY expr_list] [WITH TOTALS]
    [HAVING expr]
    [ORDER BY expr_list]
    [LIMIT [n, ]m]
    [UNION ALL ...]
    [INTO OUTFILE filename]
    [FORMAT format]
    [LIMIT n BY columns]

 

# 查看数据
centf8118.sharding1.db :) SELECT * FROM table_test1;

SELECT *
FROM table_test1

┌─UserID─┬─UserAccount─┬─CreateDate─┬──────CreateDatetime─┬─Comment─┐
│ 100003 │ wangwu2     │ 2020-09-022020-09-02 16:45:57 │ ᴺᵁᴸᴸ    │
└────────┴─────────────┴────────────┴─────────────────────┴─────────┘
┌─UserID─┬─UserAccount─┬─CreateDate─┬──────CreateDatetime─┬─Comment─┐
│ 100001 │ zhangsan    │ 2020-09-022020-09-02 16:45:55 │ Comment │
│ 100001 │ zhangsan2   │ 2020-09-022020-09-02 16:45:56 │ Comment │
│ 100002 │ lisi        │ 2020-09-022020-09-02 16:45:55 │ Comment │
│ 100002 │ lisi2       │ 2020-09-022020-09-02 16:45:56 │         │
│ 100003 │ wangwu      │ 2020-09-022020-09-02 16:45:55 │ Comment │
│ 100004 │ zhaoliu     │ 2020-09-022020-09-02 16:45:56 │ Comment │
└────────┴─────────────┴────────────┴─────────────────────┴─────────┘

7 rows in set. Elapsed: 0.005 sec. 

 

二:更新表数据

ALTER TABLE table_test1 UPDATE UserAccount = 'NEW ACCOUNT' WHERE UserID = 100001 AND UserAccount = 'zhangsan';

  

centf8118.sharding1.db :) ALTER TABLE table_test1 UPDATE UserAccount = 'NEW ACCOUNT' WHERE UserID = 100001 AND UserAccount = 'zhangsan';

ALTER TABLE table_test1
    UPDATE UserAccount = 'NEW ACCOUNT' WHERE (UserID = 100001) AND (UserAccount = 'zhangsan')


Ok.

0 rows in set. Elapsed: 0.004 sec. 

centf8118.sharding1.db :) SELECT * FROM table_test1;

SELECT *
FROM table_test1

┌─UserID─┬─UserAccount─┬─CreateDate─┬──────CreateDatetime─┬─Comment─┐
│ 100003 │ wangwu2     │ 2020-09-022020-09-02 16:45:57 │ ᴺᵁᴸᴸ    │
└────────┴─────────────┴────────────┴─────────────────────┴─────────┘
┌─UserID─┬─UserAccount─┬─CreateDate─┬──────CreateDatetime─┬─Comment─┐
│ 100001 │ NEW ACCOUNT │ 2020-09-022020-09-02 16:45:55 │ Comment │
│ 100001 │ zhangsan2   │ 2020-09-022020-09-02 16:45:56 │ Comment │
│ 100002 │ lisi        │ 2020-09-022020-09-02 16:45:55 │ Comment │
│ 100002 │ lisi2       │ 2020-09-022020-09-02 16:45:56 │         │
│ 100003 │ wangwu      │ 2020-09-022020-09-02 16:45:55 │ Comment │
│ 100004 │ zhaoliu     │ 2020-09-022020-09-02 16:45:56 │ Comment │
└────────┴─────────────┴────────────┴─────────────────────┴─────────┘

7 rows in set. Elapsed: 0.005 sec. 
View Code

相关文章: