SuperAPI AI 工具集

database-clickhouse-weaviate

数据与分析

查看项目

更新于 10-16 06:22

技能介绍

用途:处理 ClickHouse 查询、Goose 迁移、chdb 测试 schema、Weaviate 集合/迁移或遥测存储路径时使用。

ClickHouse 查询:适配器栈位于 packages/platform/db-clickhouse,保持 SQL 导向。所有查询必须使用参数化绑定({name:Type} 语法配合 query_params),禁止把用户提供的值直接拼进 SQL 字符串。

迁移(Goose):安装命令 brew install goose。迁移文件位于 packages/platform/db-clickhouse/clickhouse/migrations/,分 unclustered/(单节点,本地开发默认)与 clustered/(分布式,CLICKHOUSE_CLUSTER_ENABLED=true)。Goose 通过 goose_db_version 表跟踪已应用迁移;仓库还维护 .migration-lock,由 ch:create 重新生成,用于在并行创建迁移时强制产生 git 冲突。

常用命令(在仓库根目录运行):pnpm --filter @platform/db-clickhouse ch:up、ch:down、ch:status、ch:create <migration_name>、ch:drop、ch:reset、ch:seed。

创建迁移:ch:create <name> 会在 unclustered/ 与 clustered/ 中生成下一个序号文件并更新 .migration-lock;需填写两个文件并一并提交。每个迁移为单个 .sql 文件,含 -- +goose Up 与 -- +goose Down,必须包含 -- +goose NO TRANSACTION(ClickHouse 不支持事务)。迁移历史只追加,不要编辑已有文件;对已有表的增量变更优先用 ALTER TABLE 或带合理默认值的附加投影。unclustered/ 用标准引擎(如 ReplacingMergeTree),clustered/ 加 ON CLUSTER default 并使用 Replicated* 引擎。

集群可靠性:副本可能滞后导致 Code 517(doesn't catchup with latest ALTER query updates)。建议保持迁移幂等(IF EXISTS / IF NOT EXISTS)、优先增量变更、缩小 DDL 批次、同一表紧耦合变更合并为一条 ALTER TABLE、有依赖的语句拆成不同迁移文件、每个环境只运行一个迁移执行器。up.sh 会重试瞬时副本滞后错误;集群模式会设置 alter_sync、distributed_ddl_task_timeout、replication_wait_for_inactive_replica_timeout。相关环境变量:CLICKHOUSE_MIGRATION_MAX_RETRIES(默认 20)、CLICKHOUSE_MIGRATION_RETRY_DELAY_SECONDS(默认 5)、CLICKHOUSE_MIGRATION_MAX_RETRY_DELAY_SECONDS(默认 30)、CLICKHOUSE_MIGRATION_ALTER_SYNC(默认 2)、CLICKHOUSE_MIGRATION_DISTRIBUTED_DDL_TASK_TIMEOUT_SECONDS(默认 300)、CLICKHOUSE_MIGRATION_REPLICA_WAIT_TIMEOUT_SECONDS(默认 300)。

Weaviate:连接 API 在 packages/platform/db-weaviate/src/client.ts,提供 createWeaviateClient() 与 createWeaviateClientEffect() 并做健康检查;集合定义在 src/collections.ts,通过 defineWeaviateCollections([...]) 在代码中定义;迁移逻辑在 src/migrations.ts,幂等,创建前检查 collections.exists() 并容忍 already exists 竞态。手动迁移命令:pnpm --filter @platform/db-weaviate wv:migrate,入口为 src/migrate.ts。规则:不要在 app/domain 包中定义集合,不要在 db-weaviate 之外添加临时迁移脚本,集合 schema 变更集中在 src/collections.ts。

限制:除非用户在当前对话中明确要求,不要运行 ch:* 或 ch:schema:dump,也不要运行 wv:migrate。