@@ -5,79 +5,138 @@ sidebar_position: 6
5
5
6
6
import FunctionDescription from '@site/src /components/FunctionDescription';
7
7
8
- <FunctionDescription description =" Introduced or updated: v1.2.698" />
8
+ <FunctionDescription description =" 引入或更新于: v1.2.698" />
9
9
10
10
import EEFeature from '@site/src /components/EEFeature';
11
11
12
12
<EEFeature featureName =' ATTACH TABLE ' />
13
13
14
- 将现有表附加到另一个表。该命令将表的数据和模式从一个数据库移动到另一个数据库,但实际上并不复制数据。而是创建一个指向原始表数据的链接以访问数据 。
14
+ ATTACH TABLE 创建指向现有表数据的只读链接而无需复制数据,特别适用于跨环境数据共享,尤其是从私有部署的 Databend 迁移至 [ Databend Cloud ] ( https://www.databend.cn ) 。
15
15
16
- - 通过附加表,您可以无缝地将云服务平台中的表连接到私有化部署环境中已部署的现有表,而无需实际移动数据。当您希望将数据从 Databend 的私有化部署迁移到 [ Databend Cloud ] ( https://www.databend.com ) 同时最大限度地减少数据传输开销时,此功能特别有用。
16
+ ## 核心功能
17
17
18
- - 附加表以 READ_ONLY 模式运行。在此模式下,源表中的更改会立即反映在附加表中。但是,附加表仅用于查询目的,不支持更新。这意味着 INSERT、UPDATE 和 DELETE 操作在附加表上是不允许的;只能执行 SELECT 查询。
18
+ - ** 零拷贝 (Zero-Copy) 数据访问** :链接源数据而无需物理移动
19
+ - ** 实时更新** :源表变更即时反映在附加表中
20
+ - ** 只读模式** :仅支持 SELECT 查询(禁止 INSERT/UPDATE/DELETE)
21
+ - ** 列级 (Column-Level) 访问** :可选包含特定列以提升安全性与性能
19
22
20
23
## 语法
21
24
22
25
``` sql
23
26
ATTACH TABLE < target_table_name> [ ( < column_list> ) ] ' <source_table_data_URI>'
24
- CONNECTION = ( < connection_parameters > )
27
+ CONNECTION = ( CONNECTION_NAME = ' <connection_name> ' )
25
28
```
26
29
27
- - ` <column_list> ` :一个可选的、逗号分隔的列列表,用于包含源表中的列,允许用户仅指定必要的列,而不是包含所有列。如果未指定,将包含源表中的所有列。
30
+ ### 参数
28
31
29
- - 重命名源表中包含的列会更新其在附加表中的名称,并且必须使用新名称访问它。
30
- - 删除源表中包含的列会使其在附加表中无法访问。
31
- - 对未包含的列的更改(例如在源表中重命名或删除它们)不会影响附加表。
32
+ - ** ` <target_table_name> ` ** :新建附加表的名称
32
33
33
- - ` <source_table_data_URI> ` 表示源表数据的路径。对于类似 S3 的对象存储,格式为 ` s3://<bucket-name>/<database_ID>/<table_ID> ` ,例如 _ s3://databend-toronto/1/23351/_ ,它表示存储桶中表文件夹的确切路径。
34
+ - ** ` <column_list> ` ** :可选列清单(从源表选择)
35
+ - 缺省时包含所有列
36
+ - 提供列级安全与访问控制
37
+ - 示例:` (customer_id, product, amount) `
34
38
35
- ![ Alt text] ( /img/sql/attach.png )
39
+ - ** ` <source_table_data_URI> ` ** :对象存储中的源表数据路径
40
+ - 格式:` s3://<bucket-name>/<database_ID>/<table_ID>/ `
41
+ - 示例:` s3://databend-toronto/1/23351/ `
36
42
37
- 要获取表的数据库 ID 和表 ID,请使用 [ FUSE_SNAPSHOT ] ( ../../../20-sql-functions/16-system-functions/fuse_snapshot .md ) 函数。在下面的示例中, _ snapshot_location _ 值中的 ** 1/23351/ ** 部分表示数据库 ID 为 ** 1 ** ,表 ID 为 ** 23351 ** 。
43
+ - ** ` CONNECTION_NAME ` ** :引用 [ CREATE CONNECTION ] ( ../13-connection/create-connection .md ) 创建的连接
38
44
39
- ``` sql
40
- SELECT * FROM FUSE_SNAPSHOT(' default' , ' employees' );
45
+ ### 获取源表路径
41
46
42
- Name |Value |
43
- -- ------------------+---------------------------------------------------+
44
- snapshot_id |d6cd1f3afc3f4ad4af298ad94711ead1 |
45
- snapshot_location |1 / 23351 / _ss/ d6cd1f3afc3f4ad4af298ad94711ead1_v4 .mpk |
46
- format_version |4 |
47
- previous_snapshot_id| |
48
- segment_count |1 |
49
- block_count |1 |
50
- row_count |3 |
51
- bytes_uncompressed |122 |
52
- bytes_compressed |523 |
53
- index_size |470 |
54
- timestamp |2023 - 07 - 11 05 :38 :27 .0 |
55
- ```
47
+ 通过 [ FUSE_SNAPSHOT] ( ../../../20-sql-functions/16-system-functions/fuse_snapshot.md ) 函数获取数据库/表 ID:
56
48
57
- - ` CONNECTION ` 指定建立与对象存储的链接所需的连接参数,该对象存储存储源表的数据。连接参数因不同的存储服务而异,具体取决于其特定要求和身份验证机制。有关更多信息,请参见 [ 连接参数] ( ../../../00-sql-reference/51-connect-parameters.md ) 。
49
+ ``` sql
50
+ SELECT snapshot_location FROM FUSE_SNAPSHOT(' default' , ' employees' );
51
+ -- 结果示例:1/23351/_ss/... → 对应路径 s3://your-bucket/1/23351/
52
+ ```
53
+
54
+ ## 数据共享优势
55
+
56
+ ### 工作原理
57
+
58
+ ```
59
+ 对象存储(S3/MinIO/Azure 等)
60
+ ┌─────────────┐
61
+ │ 源数据 │
62
+ └──────┬──────┘
63
+ │
64
+ ┌───────────────────────┼───────────────────────┐
65
+ │ │ │
66
+ ▼ ▼ ▼
67
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
68
+ │ 市场团队视图 │ │ 财务团队视图 │ │ 销售团队视图 │
69
+ └─────────────┘ └─────────────┘ └─────────────┘
70
+ ```
71
+
72
+ ### 核心优势
58
73
59
- ## 教程
74
+ | 传统方法 | Databend ATTACH TABLE |
75
+ | ---------------------| ----------------------|
76
+ | 多份数据副本 | 单副本全局共享 |
77
+ | ETL 延迟与同步问题 | 实时更新永不滞后 |
78
+ | 复杂维护流程 | 零维护成本 |
79
+ | 副本增加安全风险 | 细粒度列级访问 |
80
+ | 数据移动导致性能下降 | 基于原始数据全面优化 |
60
81
61
- - [ 使用 ATTACH TABLE 链接表] ( /tutorials/databend-cloud/link-tables )
82
+ ### 安全与性能
83
+
84
+ - ** 列级安全** :团队仅见所需列
85
+ - ** 实时更新** :源表变更全局即时可见
86
+ - ** 强一致性 (Strong Consistency)** :始终获取完整数据快照
87
+ - ** 完整性能** :继承源表所有索引与优化
62
88
63
89
## 示例
64
90
65
- 此示例创建一个附加表,其中包括存储在 AWS S3 中的源表中的所有列:
91
+ ### 基础用法
66
92
67
93
``` sql
68
- ATTACH TABLE population_all_columns ' s3://databend-doc/1/16/' CONNECTION = (
69
- REGION= ' us-east-2' ,
70
- AWS_KEY_ID = ' <your_aws_key_id>' ,
71
- AWS_SECRET_KEY = ' <your_aws_secret_key>'
72
- );
94
+ -- 1. 创建存储连接
95
+ CREATE CONNECTION my_s3_connection
96
+ STORAGE_TYPE = ' s3'
97
+ ACCESS_KEY_ID = ' <your_aws_key_id>'
98
+ SECRET_ACCESS_KEY = ' <your_aws_secret_key>' ;
99
+
100
+ -- 2. 附加全列数据表
101
+ ATTACH TABLE population_all_columns ' s3://databend-doc/1/16/'
102
+ CONNECTION = (CONNECTION_NAME = ' my_s3_connection' );
73
103
```
74
104
75
- 此示例创建一个附加表,其中包括仅从存储在 AWS S3 中的源表中选择的列( ` city ` 和 ` population ` ):
105
+ ### 安全列筛选
76
106
77
107
``` sql
78
- ATTACH TABLE population_only (city, population) ' s3://databend-doc/1/16/' CONNECTION = (
79
- REGION= ' us-east-2' ,
80
- AWS_KEY_ID = ' <your_aws_key_id>' ,
81
- AWS_SECRET_KEY = ' <your_aws_secret_key>'
82
- );
108
+ -- 附加选定列保障数据安全
109
+ ATTACH TABLE population_selected (city, population) ' s3://databend-doc/1/16/'
110
+ CONNECTION = (CONNECTION_NAME = ' my_s3_connection' );
83
111
```
112
+
113
+ ### IAM 角色认证
114
+
115
+ ``` sql
116
+ -- 创建 IAM 角色连接(比密钥更安全)
117
+ CREATE CONNECTION s3_role_connection
118
+ STORAGE_TYPE = ' s3'
119
+ ROLE_ARN = ' arn:aws:iam::123456789012:role/databend-role' ;
120
+
121
+ -- 通过 IAM 角色附加表
122
+ ATTACH TABLE population_all_columns ' s3://databend-doc/1/16/'
123
+ CONNECTION = (CONNECTION_NAME = ' s3_role_connection' );
124
+ ```
125
+
126
+ ### 团队专属视图
127
+
128
+ ``` sql
129
+ -- 市场分析视图
130
+ ATTACH TABLE marketing_view (customer_id, product, amount, order_date)
131
+ ' s3://your-bucket/1/23351/'
132
+ CONNECTION = (CONNECTION_NAME = ' my_s3_connection' );
133
+
134
+ -- 财务分析视图(不同列)
135
+ ATTACH TABLE finance_view (order_id, amount, profit, order_date)
136
+ ' s3://your-bucket/1/23351/'
137
+ CONNECTION = (CONNECTION_NAME = ' my_s3_connection' );
138
+ ```
139
+
140
+ ## 扩展阅读
141
+
142
+ - [ 使用 ATTACH TABLE 链接表] ( /tutorials/databend-cloud/link-tables )
0 commit comments