跳到主要内容

ATTACH TABLE

引入或更新于:v1.2.698
企业版功能
ATTACH TABLE是企业版功能。 如需获取许可证,请联系 Databend 支持团队

ATTACH TABLE 创建指向现有表数据的只读链接而无需复制数据,特别适用于跨环境数据共享,尤其是从私有部署的 Databend 迁移至 Databend Cloud

核心功能

  • 零拷贝 (Zero-Copy) 数据访问:链接源数据而无需物理移动
  • 实时更新:源表变更即时反映在附加表中
  • 只读模式:仅支持 SELECT 查询(禁止 INSERT/UPDATE/DELETE)
  • 列级 (Column-Level) 访问:可选包含特定列以提升安全性与性能

语法

ATTACH TABLE <target_table_name> [ ( <column_list> ) ] '<source_table_data_URI>'
CONNECTION = ( CONNECTION_NAME = '<connection_name>' )

参数

  • <target_table_name>:新建附加表的名称

  • <column_list>:可选列清单(从源表选择)

    • 缺省时包含所有列
    • 提供列级安全与访问控制
    • 示例:(customer_id, product, amount)
  • <source_table_data_URI>:对象存储中的源表数据路径

    • 格式:s3://<bucket-name>/<database_ID>/<table_ID>/
    • 示例:s3://databend-toronto/1/23351/
  • CONNECTION_NAME:引用 CREATE CONNECTION 创建的连接

获取源表路径

通过 FUSE_SNAPSHOT 函数获取数据库/表 ID:

SELECT snapshot_location FROM FUSE_SNAPSHOT('default', 'employees');
-- 结果示例:1/23351/_ss/... → 对应路径 s3://your-bucket/1/23351/

数据共享优势

工作原理

                对象存储(S3/MinIO/Azure 等)
┌─────────────┐
│ 源数据 │
└──────┬──────┘

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

核心优势

传统方法Databend ATTACH TABLE
多份数据副本单副本全局共享
ETL 延迟与同步问题实时更新永不滞后
复杂维护流程零维护成本
副本增加安全风险细粒度列级访问
数据移动导致性能下降基于原始数据全面优化

安全与性能

  • 列级安全:团队仅见所需列
  • 实时更新:源表变更全局即时可见
  • 强一致性 (Strong Consistency):始终获取完整数据快照
  • 完整性能:继承源表所有索引与优化

示例

基础用法

-- 1. 创建存储连接
CREATE CONNECTION my_s3_connection
STORAGE_TYPE = 's3'
ACCESS_KEY_ID = '<your_aws_key_id>'
SECRET_ACCESS_KEY = '<your_aws_secret_key>';

-- 2. 附加全列数据表
ATTACH TABLE population_all_columns 's3://databend-doc/1/16/'
CONNECTION = (CONNECTION_NAME = 'my_s3_connection');

安全列筛选

-- 附加选定列保障数据安全
ATTACH TABLE population_selected (city, population) 's3://databend-doc/1/16/'
CONNECTION = (CONNECTION_NAME = 'my_s3_connection');

IAM 角色认证

-- 创建 IAM 角色连接(比密钥更安全)
CREATE CONNECTION s3_role_connection
STORAGE_TYPE = 's3'
ROLE_ARN = 'arn:aws:iam::123456789012:role/databend-role';

-- 通过 IAM 角色附加表
ATTACH TABLE population_all_columns 's3://databend-doc/1/16/'
CONNECTION = (CONNECTION_NAME = 's3_role_connection');

团队专属视图

-- 市场分析视图
ATTACH TABLE marketing_view (customer_id, product, amount, order_date)
's3://your-bucket/1/23351/'
CONNECTION = (CONNECTION_NAME = 'my_s3_connection');

-- 财务分析视图(不同列)
ATTACH TABLE finance_view (order_id, amount, profit, order_date)
's3://your-bucket/1/23351/'
CONNECTION = (CONNECTION_NAME = 'my_s3_connection');

扩展阅读