跳到主要内容

Databend 免拷贝数据共享(Copy-Free Data Sharing)的工作原理

什么是数据共享(Data Sharing)?

不同团队需要相同数据的不同部分。传统解决方案会多次复制数据——成本高昂且难以维护。

Databend 的 ATTACH TABLE 优雅地解决了这个问题:为相同数据创建多个"视图"(View)而无需复制。这利用了 Databend 的真正计算存储分离架构——无论使用云存储还是本地对象存储:存储一次,随处访问

可以将 ATTACH TABLE 想象成计算机快捷方式——它们指向原始文件而不复制它。

                对象存储(Object Storage)(S3, MinIO, Azure, 等)
┌─────────────┐
│ 您的数据 │
└──────┬──────┘

┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 营销团队 │ │ 财务团队 │ │ 销售团队 │
│ 视图 │ │ 视图 │ │ 视图 │
└─────────────┘ └─────────────┘ └─────────────┘

如何使用 ATTACH TABLE

步骤 1:查找数据位置

SELECT snapshot_location FROM FUSE_SNAPSHOT('default', 'company_sales');
-- 结果:1/23351/_ss/... → 数据位于 s3://your-bucket/1/23351/

步骤 2:创建团队特定视图

-- 营销:客户行为分析
ATTACH TABLE marketing_view (customer_id, product, amount, order_date)
's3://your-bucket/1/23351/' CONNECTION = (ACCESS_KEY_ID = 'xxx', SECRET_ACCESS_KEY = 'yyy');

-- 财务:收入跟踪
ATTACH TABLE finance_view (order_id, amount, profit, order_date)
's3://your-bucket/1/23351/' CONNECTION = (ACCESS_KEY_ID = 'xxx', SECRET_ACCESS_KEY = 'yyy');

-- 人力资源:不包含薪资的员工信息
ATTACH TABLE hr_employees (employee_id, name, department)
's3://data/1/23351/' CONNECTION = (...);

-- 开发:不包含敏感数据的生产结构
ATTACH TABLE dev_customers (customer_id, country, created_date)
's3://data/1/23351/' CONNECTION = (...);

步骤 3:独立查询

-- 营销分析趋势
SELECT product, COUNT(*) FROM marketing_view GROUP BY product;

-- 财务跟踪利润
SELECT order_date, SUM(profit) FROM finance_view GROUP BY order_date;

主要优势

实时更新:当源数据更改时,所有附加表立即看到变化

INSERT INTO company_sales VALUES (1001, 501, 'Laptop', 1299.99, 299.99, 'user@email.com', '2025-01-20');
SELECT COUNT(*) FROM marketing_view WHERE order_date = '2024-01-20'; -- 返回:1

列级安全性:团队只能看到需要的内容——营销看不到利润,财务看不到客户邮箱

强一致性:永远不会读取部分更新,始终看到完整快照——非常适合财务报告和合规性

完整性能:所有索引(Index)自动工作,与常规表相同的速度

为什么这很重要

传统方法Databend ATTACH TABLE
多个数据副本所有人共享单个副本
ETL 延迟,同步问题实时,始终最新
复杂维护零维护
更多副本 = 更多安全风险细粒度列访问
由于数据移动而变慢对原始数据进行完整优化

底层工作原理

查询(Query):SELECT product, SUM(amount) FROM marketing_view GROUP BY product

┌─────────────────────────────────────────────────────────────────┐
│ 查询执行流程 │
└─────────────────────────────────────────────────────────────────┘

用户查询


┌───────────────────┐ ┌─────────────────────────────────────┐
│ 1. 读取快照 │───►│ s3://bucket/1/23351/_ss/ │
│ (Snapshot) │ │ 获取当前表状态 │
└───────────────────┘ └─────────────────────────────────────┘


┌───────────────────┐ ┌─────────────────────────────────────┐
│ 2. 应用列 │───►│ 过滤器:customer_id, product, │
│ 过滤器 │ │ amount, order_date │
└───────────────────┘ └─────────────────────────────────────┘


┌───────────────────┐ ┌─────────────────────────────────────┐
│ 3. 检查统计信息 │───►│ • 段最小/最大值 │
│ 和索引 │ │ • 布隆过滤器(Bloom Filter) │
└───────────────────┘ │ • 聚合索引(Aggregate Index) │
│ └─────────────────────────────────────┘

┌───────────────────┐ ┌─────────────────────────────────────┐
│ 4. 智能数据 │───►│ 跳过无关块 │
│ 获取 │ │ 仅从 _b/ 下载所需数据 │
└───────────────────┘ └─────────────────────────────────────┘


┌───────────────────┐ ┌─────────────────────────────────────┐
│ 5. 本地 │───►│ 完整优化和并行处理 │
│ 执行 │ │ 使用所有可用索引进行处理 │
└───────────────────┘ └─────────────────────────────────────┘


结果:产品销售摘要

多个 Databend 集群可以同时执行此流程而无需协调——真正的计算存储分离在实际应用中。

ATTACH TABLE 代表了一个根本性转变:从为每个用例复制数据转向一个副本多个视图。无论在云环境还是本地环境中,Databend 的架构都能实现强大、高效的数据共享,同时保持企业级一致性和安全性。