技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
clickhouse-data-handling【数据与研究】Handle data lifecycle in ClickHouse — TTL expiration, data deletion (GDPR), column-level encryption, and audit logging with real ClickHouse SQL. Use when implementing data retention, fulfilling GDPR/CCPA deletion requests, or managing sensitive data in ClickHouse. Trigger with "clickhouse data retention", "clickhouse TTL", "clickhouse GDPR", "delete …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: clickhouse-data-handling description: | Handle data lifecycle in ClickHouse — TTL expiration, data deletion (GDPR), column-level encryption, and audit logging with real ClickHouse SQL. Use when implementing data retention, fulfilling GDPR/CCPA deletion requests, or managing sensitive data in ClickHouse. Trigger with "clickhouse data retention", "clickhouse TTL", "clickhouse GDPR", "delete data clickhouse", "clickhouse data lifecycle", "clickhouse PII". allowed-tools: Read, Write, Edit version: 1.7.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io tags:
Manage the full data lifecycle in ClickHouse: TTL-based expiration, GDPR/CCPA
deletion, data masking, partition management, and audit trails. This skill
produces migration SQL and TypeScript client code you write into your project,
then verifies the results against ClickHouse system.* tables.
The workflow below is the high-level path — each step links to the full, copy-ready SQL/TypeScript in references/implementation.md, with end-to-end scenarios in references/examples.md.
Before starting, confirm you have:
clickhouse-core-workflow-a).DELETE FROM; older versions
must use mutation-based ALTER TABLE ... DELETE.system.mutations and system.parts to verify deletions.Work the six steps in order for a new table, or jump to the one you need. Use
Write/Edit to place the generated SQL into a migration file (or the
TypeScript into your data-access layer), then run it against ClickHouse and
verify via the system.* queries. Full code for each step lives in
references/implementation.md.
TTL-based expiration — attach a TTL clause so data self-deletes, or use
tiered TO VOLUME storage (hot → cold → delete) and column-level TTL to null
out PII while keeping the row. Skeleton:
ALTER TABLE analytics.events
MODIFY TTL created_at + INTERVAL 90 DAY;
GDPR/CCPA deletion — choose lightweight DELETE FROM (23.3+), verifiable
ALTER TABLE ... DELETE (the compliant path), or DROP PARTITION for bulk.
Always confirm completion in system.mutations.
Masking & anonymization — expose a CREATE VIEW that sipHash64-hashes
identifiers and shows only email domains, gated by a dictionary allowlist.
DSAR export & delete — the TypeScript exportUserData / deleteUserData
helpers loop every table for one user_id and log each deletion.
Audit trail — an immutable, TTL-free audit_log table partitioned by
month so retention actions are provable.
Retention monitoring — a system.tables/system.parts join that reports
size, age span, and any MergeTree table missing a TTL.
| Category | Examples | Handling in ClickHouse |
|---|---|---|
| PII | Email, name, IP | Column-level TTL, masking views, deletion support |
| Sensitive | API keys, tokens | Never store in ClickHouse — use secret managers |
| Business | Event counts, metrics | Standard TTL, aggregate for long-term retention |
| Audit | Access logs | No TTL, immutable, partitioned by month |
Applying this skill produces:
CREATE TABLE/ALTER TABLE statements adding TTL clauses,
masking views, and the immutable audit_log table, ready to commit as a
migration file.exportUserData and deleteUserData functions
for DSAR and erasure requests against @clickhouse/client.system.mutations / system.parts / system.tables
SELECTs that prove a deletion finished and flag tables missing retention.audit_log row per compliance action.| Issue | Cause | Solution |
|---|---|---|
| Mutation stuck | Large table rewrite | Check system.mutations, cancel if needed |
| TTL not expiring | No merges running | OPTIMIZE TABLE ... FINAL to force |
| DELETE not working | Old ClickHouse version | Use ALTER TABLE DELETE (mutation) |
| Export timeout | Too much user data | Add LIMIT or export in batches |
A minimal TTL attach — the smallest useful action:
ALTER TABLE analytics.events
MODIFY TTL created_at + INTERVAL 90 DAY;
OPTIMIZE TABLE analytics.events FINAL; -- force the cleanup now
Full worked scenarios — a complete GDPR erasure (export → verifiable delete → audit log), standing up a retention-safe table with tiered storage, and auditing for tables missing a retention policy — are in references/examples.md. The step-by-step SQL and TypeScript each example composes lives in references/implementation.md.
For role-based access control that restricts who can run these deletion and
export operations, see the companion skill clickhouse-enterprise-rbac. For the
table schemas these lifecycle rules attach to, see clickhouse-core-workflow-a.