多云统一数据湖加速

"数据湖加速"的核心理念是不搬迁数据——直接在云器 Lakehouse 的 Serverless 算力上查询和加工已有对象存储中的文件,替代传统 Spark/Hive ETL 和 Presto/Trino Ad hoc 查询。

阿里云 OSS、腾讯云 COS、AWS S3 三种主流对象存储,通过一套统一方案打通:Volume 挂载 → Pipe 持续入仓 → Dynamic Table 增量聚合。除了 Storage Connection 创建时参数名不同,其余 SQL 语法完全一致。


为什么需要多云统一方案

  • 企业数据分散在多个云厂商,需要统一查询入口
  • 不同云的对象存储 API 不同,但 Lakehouse 的数据处理逻辑应保持一致
  • 减少跨云环境切换的心智负担和运维成本

云器 Lakehouse 的抽象层完美解决了这个问题:同一套 SQL,换个 Connection 参数就能跑在不同的云上


涉及的 SQL 命令

命令 / 函数用途多云差异
CREATE STORAGE CONNECTION
CREATE STORAGE CONNECTION
建立对象存储认证通道唯一有差异的步骤(参数名不同)
CREATE EXTERNAL VOLUME
CREATE EXTERNAL VOLUME
挂载对象存储路径语法完全统一(只改协议前缀)
COPY INTO VOLUME
COPY INTO VOLUME
导出数据到 Volume完全统一
SELECT FROM VOLUME
SELECT FROM VOLUME
直接查询 Volume 文件完全统一
DIRECTORY()
DIRECTORY()
列出 Volume 中的文件完全统一
COPY INTO
COPY INTO
从 Volume 导入数据到表完全统一
CREATE PIPE
CREATE PIPE
创建持续导入管道完全统一
ALTER PIPE
ALTER PIPE
暂停/恢复 Pipe完全统一
load_history()
load_history()
查看历史加载记录完全统一
CREATE DYNAMIC TABLE
CREATE DYNAMIC TABLE
创建增量刷新聚合表完全统一
REFRESH DYNAMIC TABLE
REFRESH DYNAMIC TABLE
手动触发刷新完全统一

核心架构

┌─────────────────────────────────────────────────────────────┐ │ 云器 Lakehouse (Serverless) │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Aliyun │ │ Tencent │ │ AWS │ ← 对象存储 │ │ │ OSS │ │ COS │ │ S3 │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────┐ │ │ │ Storage Connection │ ← 认证层 │ │ │ (参数不同,功能相同) │ │ │ └──────────────┬──────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────┐ │ │ │ External Volume │ ← 挂载层 │ │ │ (语法完全一致) │ │ │ └──────┬──────────────────┬───────────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌──────────┐ ┌─────────────┐ │ │ │ COPY INTO │ │ Pipe 持续 │ ← 导入层 │ │ │ 一次性导入 │ │ 自动入仓 │ │ │ └─────┬────┘ └──────┬──────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌──────────────────────────────┐ │ │ │ Dynamic Table │ ← 计算层 │ │ │ (自动增量聚合) │ │ │ └──────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘


跨云对比:实测结果

在阿里云上海(

f8866243
f8866243
)和腾讯云上海(
0c3c358d
0c3c358d
)上执行了完全相同的 Volume + Pipe 测试用例:

配置差异

配置项阿里云 OSS腾讯云 COS
Connection 类型
TYPE OSS
TYPE OSS
TYPE COS
TYPE COS
认证参数名
access_id
access_id
/
access_key
access_key
(小写)
ACCESS_KEY
ACCESS_KEY
/
SECRET_KEY
SECRET_KEY
(大写)
Endpoint
ENDPOINT = 'oss-cn-shanghai.aliyuncs.com'
ENDPOINT = 'oss-cn-shanghai.aliyuncs.com'
不需要 ENDPOINT
Region 参数内嵌在 ENDPOINT 中
REGION = 'ap-shanghai'
REGION = 'ap-shanghai'
APP_ID不适用
APP_ID = '1253896122'
APP_ID = '1253896122'
Volume 定位语法
LOCATION 'oss://bucket/path/'
LOCATION 'oss://bucket/path/'
LOCATION 'cos://bucket-appid/path/'
LOCATION 'cos://bucket-appid/path/'
建议 Endpoint
oss-cn-shanghai-internal.aliyuncs.com
oss-cn-shanghai-internal.aliyuncs.com
(内网)
自动解析,无需配置

功能一致性

测试项阿里云 OSS腾讯云 COS结论
Storage Connection 创建参数名不同,其他一致
External Volume 创建语法完全一致
COPY INTO VOLUME 导出 CSV一致
COPY INTO VOLUME 导出 Parquet一致
DIRECTORY() 查询文件列表一致
SELECT FROM VOLUME (CSV)✅ f0-f4 列名✅ f0-f4 列名一致
SELECT FROM VOLUME (Parquet)✅ 保留列名✅ 保留列名一致
COPY INTO TABLE 从 Volume一致
PIPE LIST_PURGE 创建一致
PIPE 加载触发✅ ~30s✅ ~30s一致
PIPE PURGE 删除源文件一致
PIPE load_history 去重一致
PIPE 暂停/恢复一致
Dynamic Table 增量刷新一致

关键发现:除了 Connection 创建时的参数名不同,其余 12 项测试完全一致。Volume、Pipe、Dynamic Table 的 SQL 语法无任何差异。


统一实施方案

第一步:创建 Storage Connection(唯一有差异的步骤)

-- ============ 阿里云 OSS ============ CREATE STORAGE CONNECTION IF NOT EXISTS my_storage_conn TYPE OSS access_id = '<AccessKey ID>' access_key = '<AccessKey Secret>' ENDPOINT = 'oss-cn-shanghai-internal.aliyuncs.com'; -- ============ 腾讯云 COS ============ CREATE STORAGE CONNECTION IF NOT EXISTS my_storage_conn TYPE COS ACCESS_KEY = '<SecretId>' SECRET_KEY = '<SecretKey>' REGION = 'ap-shanghai' APP_ID = '<APP_ID>'; -- ============ AWS S3 ============ CREATE STORAGE CONNECTION IF NOT EXISTS my_storage_conn TYPE S3 ACCESS_KEY = '<Access Key ID>' SECRET_KEY = '<Secret Access Key>' REGION = 'us-east-1';

第二步:创建 External Volume(三云统一语法)

-- ✅ 三云统一语法:只需改 LOCATION 的协议前缀 CREATE EXTERNAL VOLUME my_data_vol LOCATION 'oss://my-bucket/data/' -- 阿里云:oss:// -- LOCATION 'cos://my-bucket-appid/data/' -- 腾讯云:cos:// -- LOCATION 's3://my-bucket/data/' -- AWS:s3:// USING CONNECTION my_storage_conn DIRECTORY = (ENABLE = TRUE, AUTO_REFRESH = FALSE) RECURSIVE = TRUE COMMENT '多云统一数据湖加速 Volume';

第三步:数据导入导出(完全统一)

-- 导出到 Volume(三云统一) COPY INTO VOLUME my_data_vol SUBDIRECTORY 'export/' FROM TABLE source_table FILE_FORMAT = (TYPE = PARQUET); -- 从 Volume 直接查询(三云统一) SELECT * FROM VOLUME my_data_vol USING PARQUET FILES('export/part00001.parquet'); -- 导入到表(三云统一) COPY INTO target_table FROM VOLUME my_data_vol USING PARQUET SUBDIRECTORY 'export/';

第四步:Pipe 持续导入(完全统一)

-- 为 Pipe 创建专用 Volume CREATE EXTERNAL VOLUME pipe_vol LOCATION 'oss://my-bucket/incoming/' -- 三云只改协议前缀 USING CONNECTION my_storage_conn DIRECTORY = (ENABLE = TRUE, AUTO_REFRESH = TRUE) RECURSIVE = TRUE; -- 创建 Pipe(三云统一) CREATE PIPE my_pipe INGEST_MODE = 'LIST_PURGE' VIRTUAL_CLUSTER = 'DEFAULT' COMMENT '多云统一持续导入管道' AS COPY INTO target_table FROM VOLUME pipe_vol USING CSV PURGE = TRUE;

第五步:Dynamic Table 增量聚合(完全统一)

CREATE OR REPLACE DYNAMIC TABLE summary_table REFRESH INTERVAL 1 DAY vcluster DEFAULT COMMENT '多云统一聚合指标' AS SELECT category, COUNT(*) AS cnt, SUM(amount) AS total FROM target_table GROUP BY category;


多云统一的最佳实践

1. 代码复用策略

项目目录结构: ├── connections/ │ ├── aliyun_oss.sql ← 只此文件有差异 │ ├── tencent_cos.sql ← 只此文件有差异 │ └── aws_s3.sql ← 只此文件有差异 ├── volumes/ │ └── create_volumes.sql ← 三云通用(协议前缀可通过变量替换) ├── tables/ │ └── ddl.sql ← 完全统一 ├── pipes/ │ └── create_pipes.sql ← 完全统一 └── dynamic_tables/ └── aggregates.sql ← 完全统一

只有 Connection 创建 SQL 需要按云编写,其余 90% 的代码可以直接复用。

2. 命名规范建议

对象规范示例
Storage Connection
<云>_<用途>
<云>_<用途>
oss_prod_conn
oss_prod_conn
cos_archive_conn
cos_archive_conn
External Volume
<源系统>_vol
<源系统>_vol
orders_vol
orders_vol
logs_vol
logs_vol
Pipe
<源系统>_pipe
<源系统>_pipe
orders_pipe
orders_pipe
logs_pipe
logs_pipe

不要将云厂商信息嵌入 Volume/Pipe 名称——这些对象可能出现多云复用场景。

3. 成本优化

策略说明
使用内网 Endpoint阿里云用
*-internal.aliyuncs.com
*-internal.aliyuncs.com
,免流量费、延迟更低
T+1 刷新频率大部分分析场景不需要分钟级刷新,
1 DAY
1 DAY
即可
PURGE=trueLIST_PURGE 模式自动删除源文件,避免 OSS/COS 存储堆积
GP 型 VCluster
DEFAULT
DEFAULT
(GENERAL 型),Serverless 按需计费
文件大小控制在 128-256MBCSV/Parquet 大文件比众多小文件效率高 3-5 倍

4. 安全建议

  • 不要使用主账号 AK/SK,创建子账号并授予最小权限(Bucket 读 + 特定目录写)
  • 内网 Endpoint 可以绑定 VPC 策略,限制访问来源
  • Storage Connection 的 AK/SK 在
    SHOW STORAGE CONNECTIONS
    SHOW STORAGE CONNECTIONS
    中不可见(已脱敏)
  • 使用 AWS S3 时优先考虑 IAM Role 方式(
    ROLE_ARN
    ROLE_ARN
    ),避免长期 AK/SK

常见问题

Q: 跨云数据传输延迟怎么算?

Volume 不搬迁数据——文件始终留在原对象存储中。查询时的网络延迟取决于 Lakehouse 实例所在地域到对象存储的链路。同地域推荐使用内网 Endpoint(如

oss-cn-shanghai-internal.aliyuncs.com
oss-cn-shanghai-internal.aliyuncs.com
),延迟通常在 10ms 以内。

Q: 能从阿里云实例访问腾讯云 COS 吗?

不支持。Storage Connection 必须与 Lakehouse 实例在同一云厂商。如需跨云查询,有以下替代方案:

  1. 在目标云创建 Lakehouse 实例,通过 External Catalog 联邦查询
  2. 通过数据集成(Studio Sync)跨云同步数据到 Lakehouse 内部表
  3. 使用 Private Link 打通网络后通过 External Schema 访问

Q: Pipe 的 EVENT_NOTIFICATION 模式在三朵云上都支持吗?

云平台LIST_PURGEEVENT_NOTIFICATION
阿里云 OSS✅(需配置 MNS 队列)
腾讯云 COS
AWS S3✅(需配置 SQS 队列)

EVENT_NOTIFICATION
EVENT_NOTIFICATION
模式支持阿里云 OSS 和 AWS S3,延迟更低(近实时),且不删除源文件。腾讯云 COS 暂不支持。

Q: COPY INTO VOLUME 为什么必须带 SUBDIRECTORY?

COPY INTO VOLUME
COPY INTO VOLUME
不带
SUBDIRECTORY
SUBDIRECTORY
子句会报
Syntax error at or near 'FROM'
Syntax error at or near 'FROM'
。这是 SQL 解析器的强制要求,与云平台无关。导出到 Volume 根路径时使用
SUBDIRECTORY '/'
SUBDIRECTORY '/'


相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询