說明
文章內容包括數據庫管理、表操作及查詢等核心功能
創建數據庫
-- 默認引擎(Atomic)
CREATE DATABASE IF NOT EXISTS test_db;
-- MySQL引擎(映射外部MySQL數據庫)
CREATE DATABASE mysql_db ENGINE = MySQL('host:port', 'mysql_db_name', 'user', 'password');
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'test', 'test');
use mysql_db;
show tables;
select * from de_dict;
desc de_dict;
刪除數據庫
DROP DATABASE test_db;
切換數據庫
USE test_db;
本地表(MergeTree引擎)
CREATE TABLE user_logs (
????log_id UInt64,
????user_id UInt32,
????event_time DateTime,
????metric Float32
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_time) ?-- 按年月分區
ORDER BY (user_id, event_time) ????-- 主鍵及排序鍵
SETTINGS index_granularity = 8192; ?-- 索引粒度
分布式表
-- 本地表(集群各節點創建)
CREATE TABLE test.user_event ON CLUSTER data_cluster (
????uid String,
????dt Date
) ENGINE = MergeTree() PARTITION BY dt ORDER BY uid;
-- 分布式表(邏輯視圖)
CREATE TABLE test.user_event_distributed
ENGINE = Distributed('data_cluster', 'test', 'user_event', rand()); -- 隨機分片
插入數據
INSERT INTO user_logs VALUES
(1, 101, '2023-10-01 10:00:00', 1.5),
(2, 102, '2023-10-01 11:00:00', 2.8);
查詢數據
-- 基礎查詢
SELECT * FROM user_logs WHERE user_id = 101;
-- 聚合統計
SELECT user_id, SUM(metric) FROM user_logs GROUP BY user_id;
-- 排序與分頁
SELECT * FROM user_logs ORDER BY event_time DESC LIMIT 10;
更新/刪除數據
-- 刪除分區
ALTER TABLE user_logs DROP PARTITION '202310';
-- 刪除條件數據
ALTER TABLE user_logs DELETE WHERE user_id = 101;
表結構修改
-- 添加列
ALTER TABLE user_logs ADD COLUMN ip String AFTER user_id;
-- 刪除列
ALTER TABLE user_logs DROP COLUMN metric;
-- 修改列類型
ALTER TABLE user_logs MODIFY COLUMN ip IPv4;
其他實用操作
SHOW DATABASES; ?????????-- 查看所有數據庫
SHOW TABLES FROM test_db; -- 查看庫中所有表
DESC user_logs; ??????????-- 查看表結構
SELECT * FROM system.clusters;??--查看已配置的集群信息
數據導入/導出
-- 導出到CSV
SELECT * FROM user_logs INTO OUTFILE 'data.csv' FORMAT CSV;
-- 從文件導入
INSERT INTO user_logs FROM INFILE 'data.csv' FORMAT CSV;
性能優化建議
批量插入數據(每次插入至少數千行);
避免使用SELECT *,明確指定查詢列;
合理使用分區和索引減少掃描范圍。