文章目錄
新增修改刪除查詢 ClickHouse 資料”
之前筆記 C# 如何新增資料至 ClickHouse 與 ClickHouse 在彙總資料時的效能優勢 分別紀錄到如何透過 C# 來新增大量資料至 ClickHouse 以及如何查詢 ClickHouse 資料,整理筆記時總覺得應該把其他操作一併紀錄一下,所以今天來看看如何更新、刪除、修改 ClickHouse 資料並且加上使用 c# 的範例
基本環境說明
- macOS Sonoma 14.2.1 (Apple M2 Pro)
- OrbStack Version 1.2.0 (16496)
- .NET SDK 8.0.100
- JetBrains Rider 2023.3.2
Container Images
- clickhouse/clickhouse-server:23.11.3.23
NuGet Library
- Bogus 35.3.0
- ClickHouse.Client 6.8.1
docker-compose.yml
ClickHouse DDL
基本操作
以下主要是使用 c# 來執行,但如果需要直接執行 sql script 也可以透過 clickhouse 內建的 web ui 來執行:http://localhost:8123/play
新增
1-1. 單筆新增
sql script
insert into test.orders ( id , order_date, product_id, order_type, amount ) Values (1234567890,'2023/01/01',100,1,100.001)
使用 c#
1-2. 新增多筆
詳細內容可以參考之前筆記 C# 如何新增資料至 ClickHouse
查詢
sql script
select * from test.orders;
C# 程式碼
更新
語法
sql script
ALTER TABLE [<database>.]<table> UPDATE <column> = <expression> WHERE <filter_expr>
實際範例
ALTER TABLE test.orders UPDATE amount = 100.001 WHERE id= 1882682734613504000;
C# 程式碼
刪除
3-1. 刪除條件符合的資料
語法
sql script
ALTER TABLE [<database>.]<table> DELETE WHERE <filter_expr>
實際範例
ALTER TABLE test.orders DELETE WHERE d= 1882682734613504000
C# 程式碼
3-2. 快速刪除 table 中所有資料
語法
sql script
TRUNCATE TABLE [<database>.]<table>
實際範例
TRUNCATE TABLE test.orders
C# 程式碼
3-3. 輕量刪除資料
語法
sql script
DELETE FROM [db.]table [ON CLUSTER cluster] [WHERE expr]
實際範例
DELETE FROM test.orders WHERE id= 1882682734613504000
C# 程式碼
心得
我在測試語法以及 c# 程式碼時,發現 ClickHouse primary key 跟過去使用的資料庫有些不同:
- create table 必需要有的是 order by,但是不一定要有 primary key
- 如果沒有明確指定 primary key,預設會使用 order by 的欄位當作 primary key
- primary key 主要負責 index 的建立,因此允許重複,並不會出現 pk 衝突的錯誤
原始程式碼請參考:GitHub:yowko/ClickHouseCRUD
參考資訊
文章作者 Yowko Tsai
上次更新 2024-01-10
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。