数据写入流程
1. 写入本地表
2. 查询分布式表
插入 JSON 文件内容
文件路径:/var/lib/clickhouse/user_files/data.json
INSERT INTO your_table_local SELECT * FROM file('data.json', 'JSONEachRow');指定周任意起始日
select arrayJoin([0,1,2,3,4,5,6]) as start_day,
toDateTime('2025-04-10') as t,
toDayOfWeek(t),
if(start_day <= toDayOfWeek(t),
date_add(DAY, -((toDayOfWeek(t) - start_day) % 7), t),
date_add(DAY, -7-((toDayOfWeek(t) - start_day) % 7), t)
) AS week_start_day;时间戳转时间
select `#time`, timestamp_add(fromUnixTimestamp64Milli(`#time`), interval coalesce(`#zone_offset`, 8) * 60 minute) from events where `#event` = '#device_login' and `#dt` = '2025-03-01' limit 100;变更语句是否执行完
select hostname(),* from clusterAllReplicas('default','system.mutations') where is_done = 0;加快字段删除速度
-- 每次变更之前执行
alter table demo.users_local modify setting number_of_free_entries_in_pool_to_execute_mutation = 1;
-- 变更完成后执行
alter table demo.users_local reset setting number_of_free_entries_in_pool_to_execute_mutation;清理数据库表
truncate table demo.events_local;
truncate table demo_global.users_local;
truncate table demo_global.devices_local;根据 query 查询 clickhouse 日志
select * from cluster('all-sharded', 'system', 'query_log') where query_id = '4efbbb9b-b853-44ca-84b2-95ff066895af';数据导出成CSV
SELECT * FROM events
SETTINGS join_use_nulls=1, allow_experimental_analyzer=0
INTO OUTFILE '新玩家首日首场战场数据.csv.gz' TRUNCATE
FORMAT CSVWithNames;数据去重验证
select `_part`, `#dt`, `#event`, `#log_id`, count(1), groupArray(hostname()) from events where `#dt` = '2024-07-28' group by 1, 2, 3, 4 order by 5 desc limit 100;查询表大小
SELECT database, table, formatReadableSize(sum(bytes_on_disk)) AS size_on_disk
FROM system.parts
WHERE active
GROUP BY database, table
ORDER BY sum(bytes_on_disk) DESC;删除分区数据(本地表)
DELETE FROM table_local WHERE date = '2025-10-01';慢查询日志定位
SELECT
event_time,
query_duration_ms,
memory_usage,
read_rows,
read_bytes,
query
FROM system.query_log
WHERE
type = 'QueryFinish'
AND event_time >= now() - INTERVAL 1 DAY
ORDER BY query_duration_ms DESC LIMIT 100;先删后加字段
SET alter_sync = 2, allow_experimental_database_replicated = 1;
ALTER TABLE demo.events DROP COLUMN IF EXISTS `name`;
ALTER TABLE demo.events_local DROP COLUMN IF EXISTS `name`;
ALTER TABLE demo.events_local ADD COLUMN IF NOT EXISTS `name` Nullable(String) COMMENT '名称';
ALTER TABLE demo.events ADD COLUMN IF NOT EXISTS `name` Nullable(String) COMMENT '名称';