ByteHouse 云数仓版支持通过对象表管理对象存储中非结构化数据的元信息,适用于多模态数据管理场景。本文将介绍如何通过 SQL 语句和控制台可视化界面管理对象表。
对象表(Object Table)是 ByteHouse 云数仓版中的特殊表类型,用于获取对象存储中非结构化数据(如文本、图像等)的元信息(不存储原始数据)。对象表通过读取对象存储指定路径下文件中的元数据,生成索引并映射为固定表结构,表中字段与对象存储中的文件一一对应。
当前 ByteHouse 仅支持读取来自火山引擎对象存储 TOS 中的对象元信息,通常采用固定表结构,包含以下内容:
列名 | 类型 | 说明 |
|---|---|---|
key | String | 对象存储指定路径下数据对象的相对存储路径名。 |
url | String | 数据对象在对象存储中完整的存储路径名。 |
size | UInt64 | 数据对象的大小,单位为字节。 |
last_modified_time | DateTime | 数据对象在 TOS 上的最后修改时间。 |
content_type | String | 内容类型,由业务传入或根据扩展名识别,如 text/plain,识别扩展名使用 Golang 原生的 |
storage_class | String | 数据对象在 TOS 上的存储类型,具体支持存储的类型请参见 TOS 支持的存储类型。
|
crc64 | UInt64 | 对象的 64 位 CRC 值,该值根据 ECMA-182 标准计算得出。 |
etag | String | etag 是在每个对象生成时创建的实体标记,用于标识一个对象的内容在前后两次更新过程中是否变化。 |
metadata | Map(String, String) | TOS 对象的元信息,可支持扩展。 |
建表配置与同步逻辑
支持功能
ByteHouse 支持通过 SQL 语句或控制台可视化界面便捷管理对象表,当前支持的功能说明如下:
功能 | SQL 语句 | 控制台可视化操作 |
|---|---|---|
创建对象表 | ✅ | ❌ |
查看对象表 | ✅ | ✅ |
刷新对象表 | ✅ | ✅ |
查询对象表 | ✅ | ❌ |
修改对象表属性 | ✅ | ❌ |
删除对象表 | ✅ | ❌ |
对象表适用于多模态数据管理(如 AI 场景下的图像、文本等非结构化数据)场景,可提升数据管理效率、增强业务适配灵活性,同时保障数据存储安全。
使用对象表前,请获取火山引擎对象存储服务 TOS 的相关权限和连接信息。
子项 | 所需权限和连接信息 |
|---|---|
权限 | 为您使用的账号授予 TOS 目标数据对象的读权限。 |
连接信息 |
|
本节将介绍如何使用 SQL 语句创建、刷新、修改对象表。
创建对象表时无需指定表结构,这是因为对象表可按照固定模式读取对象存储数据的元信息,并自动生成表结构,更多说明请参见功能概述。
建表后,您可通过查看表结构的 SQL 语句,查看某张对象表的表结构,详情请参见查看对象表结构。您也可通过 ByteHouse 控制台查看,详情请参见查看对象表。
CREATE OBJECT TABLE [IF NOT EXISTS] [db.]ob_table_name ENGINE = CnchMergeTree REFRESH = [ASYNC [EVERY (INTERVAL refresh_interval) ] | MANUAL] PROPERTIES [type = 'TOS'], region = 'region', endpoint = 'end_point', access_key_id = 'access_key_id', secret_access_key = 'secret_access_key', locations = ['bucket_name/[folder_name]/*', ...] [COMMENT comment]
参数 | 是否必填 | 配置说明 |
|---|---|---|
CREATE OBJECT TABLE | 是 | 用于在 ByteHouse 云数仓版中创建对象表,关联对象存储数据服务中的数据,支持通过表结构映射对象存储中的文件数据,无需手动导入即可直接查询。 |
IF NOT EXISTS | 否 | 用于避免重复创建报错,若指定名称的对象表已存在,则不执行创建操作,无报错。 |
[db.]<ob_table_name> | 是 | 指定对象表所在的数据库,自定义对象表名称。如果您在执行创建语句前,执行了 |
COMMENT | 否 | 表注释,用于说明对象表的用途。 |
ENGINE | 是 | 设置为 CnchMergeTree。 |
REFRESH | 是 | 用于配置对象表的同步刷新策略,该参数决定了建表后对象表将按照何种方式更新表中映射的对象存储数据。支持设置为以下参数值:
|
PROPERTIES | 是 | 用于配置对象存储服务的连接信息、数据路径等核心参数,所有参数均为字符串类型,需用单引号包裹。
|
以下示例展示 ByteHouse 云数仓版对象表的创建方法,涵盖不同文件路径匹配、数据刷新模式(手动 / 自动)等典型场景。执行示例语句前,将示例中的占位符(如地域、访问端点、访问密钥、存储桶名称、文件路径等)替换为您的对象存储实际配置信息。
locations 仅指定对象存储桶(bucket)时,创建的对象表将遍历该存储桶中的所有子目录。
CREATE OBJECT TABLE test_ob.ob_demo_1 ENGINE = CnchMergeTree REFRESH ASYNC EVERY (INTERVAL 10 SECOND) PROPERTIES region = 'your_region', endpoint = 'https://tos-your-region.volces.com', access_key_id = 'your_access_key_id', secret_access_key = 'your_secret_access_key', locations = 'bh-demo-bucket';
locations 指定对象存储桶(bucket)并使用通配符时,创建的对象表将遍历该存储桶中的所有子目录,效果与示例 1 一致。
CREATE OBJECT TABLE test_ob.ob_demo_2 ENGINE = CnchMergeTree REFRESH ASYNC EVERY (INTERVAL 10 SECOND) PROPERTIES region = 'your_region', endpoint = 'https://tos-your-region.volces.com', access_key_id = 'your_access_key_id', secret_access_key = 'your_secret_access_key', locations = 'bh-demo-bucket/*';
locations 精准指定子目录,并通过后缀筛选文件格式,对象表仅读取该目录下符合格式的文件。
CREATE OBJECT TABLE test_ob.ob_demo_3 ENGINE = CnchMergeTree REFRESH ASYNC EVERY (INTERVAL 10 SECOND) PROPERTIES region = 'your_region', endpoint = 'https://tos-your-region.volces.com', access_key_id = 'your_access_key_id', secret_access_key = 'your_secret_access_key', locations = 'bh-demo-bucket/test/*.pdf';
CREATE OBJECT TABLE test_ob.ob_demo_4 ENGINE = CnchMergeTree REFRESH MANUAL PROPERTIES region = 'your_region', endpoint = 'https://tos-your-region.volces.com', access_key_id = 'your_access_key_id', secret_access_key = 'your_secret_access_key', locations = 'bh-demo-bucket/test/*.pdf';
locations 配置同一存储桶下的多个路径,对象表会遍历所有指定路径,并筛选符合格式的文件,适合需读取分散在多个目录的同类型数据。
CREATE OBJECT TABLE test_ob.ob_demo_5 ENGINE = CnchMergeTree REFRESH ASYNC EVERY (INTERVAL 10 SECOND) PROPERTIES region = 'your_region', endpoint = 'https://tos-your-region.volces.com', access_key_id = 'your_access_key_id', secret_access_key = 'your_secret_access_key', locations = 'bh-demo-bucket/test1/*,bh-demo-bucket/test2/*.pdf';
对象表的查看操作和普通表的操作一致。
语法
DESCRIBE TABLE [db.]ob_table_name
示例
DESCRIBE TABLE test_ob.ob_demo_1
语法
SHOW CREATE TABLE [db.]ob_table_name
示例
SHOW CREATE TABLE test_ob.ob_demo_1
建表后,您也可通过 REFRESH 命令触发对象表刷新操作,支持同步刷新和异步刷新。您也可通过 ByteHouse 云数仓版控制台手动执行刷新,详情请参见刷新对象表。
建表时配置的 REFRESH 策略定义了对象表的默认数据同步规则,建表后,您可通过 REFRESH OBJECT TABLE 命令按需手动触发刷新操作。该命令支持同步(SYNC)和异步(ASYNC)两种执行方式,满足不同场景的刷新需求。
REFRESH OBJECT TABLE [db.]ob_table_name [SYNC | ASYNC];
参数 | 是否必填 | 配置说明 |
|---|---|---|
REFRESH OBJECT TABLE | 是 | 刷新对象表。 |
[db.]ob_table_name | 是 | 待刷新的对象表完整名称,包含数据库和表名称。如果您在执行创建语句前,执行了 |
[SYNC | ASYNC] | 二选一
|
以下示例中,建表后,系统会立即启动“10 秒一次的自动异步刷新任务”,同时您也可通过手动命令触发刷新。
CREATE OBJECT TABLE test_ob.ob_demo_1 ENGINE = CnchMergeTree REFRESH ASYNC EVERY (INTERVAL 10 SECOND) PROPERTIES region = 'your_region', endpoint = 'https://tos-your-region.volces.com', access_key_id = 'your_access_key_id', secret_access_key = 'your_secret_access_key', locations = 'bh-demo-bucket/test1/*';
如需手动触发刷新任务,可执行以下命令:
手动触发异步刷新任务
REFRESH OBJECT TABLE test_ob.ob_demo_1 ASYNC
手动触发同步刷新任务
REFRESH OBJECT TABLE test_ob.ob_demo_1 SYNC
以下示例中,建表时配置了同步刷新策略,系统无自动刷新动作,仅能通过 REFRESH OBJECT TABLE 命令触发数据同步。
CREATE OBJECT TABLE test_ob.ob_demo_2 ENGINE = CnchMergeTree REFRESH MANUAL PROPERTIES region = 'your_region', endpoint = 'https://tos-your-region.volces.com', access_key_id = 'your_access_key_id', secret_access_key = 'your_secret_access_key', locations = 'bh-demo-bucket/test1/*';
建表后无任何自动刷新动作,首次查询对象表时无数据返回。
此时,您可以通过手动执行刷新命令,读取数据。
手动触发异步刷新任务
REFRESH OBJECT TABLE test_ob.ob_demo_2 ASYNC
触发同步刷新任务
REFRESH OBJECT TABLE test_ob.ob_demo_2 SYNC
刷新后,再次查询对象表,此时表中已有数据。
对象表的查询和普通表的查询操作一致。
SELECT * FROM [db.]ob_table_name WHERE xxx;
创建对象表后,ByteHouse 支持通过 ALTER TABLE 语句调整对象表的核心配置,包括刷新策略(REFRESH)和对象存储关联属性(PROPERTY),无需重建表即可适配业务场景变更(如数据刷新频率调整、对象存储密钥轮换、数据路径迁移等)。
ALTER TABLE [db.]ob_table_name MODIFY REFRESH|PROPERTY expr
参数 | 是否必填 | 配置说明 |
|---|---|---|
[db.]ob_table_name | 是 | 待刷新的对象表完整名称,包含数据库和表名称。如果您在执行创建语句前,执行了 |
MODIFY REFRESH expr | 二选一 | 指定修改对象表的刷新策略,用于替换建表时配置的 REFRESH 规则。 |
MODIFY PROPERTY expr | 二选一 | 指定修改对象表关联的对象存储属性,如地域、访问密钥、数据路径等。 |
ALTER TABLE test_ob.ob_demo_1 MODIFY REFRESH ASYNC EVERY(INTERVAL 10 second);
ALTER TABLE test_ob.ob_demo_2 MODIFY REFRESH MANUAL
ALTER TABLE test_ob.ob_demo_2 MODIFY PROPERTY region = 'your_new_region', endpoint = 'https://tos-your-new-region.volces.com', access_key_id = 'your_new_access_key_id', secret_access_key = 'your_new_secret_access_key', locations = 'bh-demo-bucket-new/*'
对象表的删除和普通表的操作一致。
DROP TABLE [db.]ob_table_name;
您可在 ByteHouse 云数仓版控制台上管理对象表,支持通过 SQL 工作表执行对象表创建和使用语句,也支持在数据库页面查看已创建的对象表、查看建表 DDL、手动执行刷新对象表。
在 ByteHouse 云数仓版控制台上,您可在 SQL 工作表中使用上述章节中的 SQL 语句创建并使用对象表。更多 SQL 工作表的使用详情请参见使用 SQL 工作表。
对象表创建完成后,您可单击顶部数据库,在数据库列表中找到目标数据库,单击目标数据库名称,在数据库详情页单击对象表页签,查看当前数据库中已创建的对象表。
您可单击对象表名称,进入对象表详情页面,查看对象表的列、同步任务情况。
您可在对象表详情页面上单击 DDL 按钮,查看建表 DDL。
您可在对象表详情页面,单击同步任务,单击手动执行,系统将自动刷新对象表。
注意
首次刷新可能存在延迟,您可稍等 1-2 分钟,再次刷新页面查看任务状态。