Hologres自V4.0版本开始,支持通过Object Table访问数据湖OSS中的非结构化数据及其元信息,本文为您介绍Object Table的使用语法以及示例。
介绍
在人工智能时代,非结构化数据已成为驱动技术革新与智能进化的核心燃料。相较于传统数据库中的结构化信息,非结构化数据,如文本、图像、语音、视频、社交媒体内容等以原始、多元的形态承载更加真实的行为轨迹和复杂语义。通过对非结构化数据的处理、分析,可以帮助企业构建更强的竞争优势,让数据发挥更大的价值。Object Table具备的能力如下:
支持通过表的形式读取OSS中非结构化数据(PDF、IMAGE、PPT等)。
可以结合Dynamic Table增量刷新+Embedding Function对非结构化数据加工,既能对非结构化数据Embedding存储进Hologres,无需调用外部Embedding算法,也能增量识别文件变化,从而减少重复计算,提升计算效率。
可以结合AI Function(如
ai_gen
等)对非结构化数据推理、分类等,也可以结合向量检索、全文检索对非结构化数据双路召回,实现非结构化数据的分析和搜索能力。
通过Hologres Object Table结合AI Function等能力,数据不用出库,无需调用外部服务,就可以实现oss上非结构化数据的全链路加工、检索、分析,在提升数据安全性的同时也能拓宽业务的数据分析范围。
使用限制
仅Hologres V4.0及以上版本支持该功能。
说明如果您的实例是V4.0以下版本请参见实例升级。
Object Table仅支持读取PDF、PPT以及图片等数据,不支持读取视频和音频。
语法
创建Object Table
Object Table一种专为读取非结构化数据而设计的表,因此在建表时无需指定列,Object Table有固定的列。
创建完Object Table后,必须执行一次刷新Object Table才会有数据。
CREATE OBJECT TABLE [IF NOT EXISTS] [schema_name.]<table_name>
WITH (
-- object table特有属性
path = '<oss_path>', --必填
oss_endpoint = '<oss_endpoint>', --必填
role_arn = '<role_arn>', --必填
-- 通用参数
[orientation = '[column | row | row,column]',]
[table_group = '[tableGroupName]',]
[distribution_key = 'columnName[,...]]',]
[clustering_key = '[columnName{:asc}] [,...]]',]
[storage_mode = '[hot | cold]',]
[event_time_column = '[columnName [,...]]',]
[bitmap_columns = '[columnName [,...]]',]
[dictionary_encoding_columns = '[columnName [,...]]',]
[time_to_live_in_seconds = '<non_negative_literal>']
);
基本参数说明
参数名
是否必填
描述
path
是
文件所在的OSS路径目录,Object Table会对该目录的文件进行元数据抽取。例如:
oss://bucket/dir
。oss_endpoint
是
OSS的Endpoint,仅支持经典网络,每个Region的域名详细见OSS地域和访问域名。例如:
oss-cn-hangzhou-internal.aliyuncs.com
。role_arn
是
阿里云RAM角色的ARN,例如
acs:ram::role-id:role/role-name
。您可登录RAM控制台,在 页面,单击目标角色名称,获取对应角色的RAM信息。关于阿里云RAM角色的权限配置,详情请参见账号准备通过参数说明
以下参数均为非必填。
参数名
描述
默认值
orientation
Object Table存储格式,支持行存、列存、行列共存。详情请参见表存储格式:列存、行存、行列共存。
column
table_group
Object Table所在的Table Group。
default Table Group
distribution_key
object_uri
clustering_key
object_uri
storage_mode
存储模式,支持hot(热存储)和cold(冷存储)。详情请参见数据分层存储。
hot
event_time_column
分段键。详情请参见Event Time Column(Segment Key)。
last_modified_at
bitmap_columns
object_uri:auto,etag:auto
dictionary_encoding_columns
比特编码。详情请参见字典编码Dictionary Encoding。
object_uri:auto,etag:auto
time_to_live_in_seconds
表数据生命周期。
3153600000
查看Object Table
查询Object Table
Object Table创建成功后,可以像查询普通表一样对该表进行查询。
SELECT * FROM <OBJECT_TABLE_NAME>;
Object Table的字段固定,详细的字段和说明如下:
列名 | 类型 | 描述 |
object_uri | TEXT | 映射的具体的OSS文件路径。 |
etag | TEXT | ETag在每个Object生成时创建,具备唯一性,用于识别一个具体的文件内容。 |
file | FILE | FILE为新支持的类型,其格式类似于json,用于存储详细的元数据信息,可以使用JSON函数解析。其内容包括:
|
metadata | JSON | 自定义metadata。 |
查看object table的表结构
通过
hg_dump_script
查看SELECT hg_dump_script('[<schema_name>.]<object_table_name>');
通过
hologres.hg_table_properties
系统表查看SELECT * FROM hologres.hg_table_properties WHERE table_name = '<object_table_name>';
刷新Object Table
Object Table创建后,必须执行一次刷新才会有数据。当前仅支持手动刷新Object Table。语法如下:
REFRESH OBJECT TABLE [<schema_name>.]<table_name>;
修改Object Table
仅支持修改Object Table的表名和schema,语法如下:
--重命名表名
ALTER OBJECT TABLE [IF EXISTS] <table_name> RENAME TO <new_name>;
--修改schema
ALTER OBJECT TABLE [IF EXISTS] [<schema_name>.]<table_name> SET SCHEMA <new_schema>;
删除Object Table
--开启表回收站后,删除的object table会自动进入回收站。
DROP OBJECT TABLE [IF EXISTS] <table_name> [FORCE];
如果数据库开启了回收站,删除Object Table会进入回收站,可以使用回收命令将Object Table恢复,恢复出来仍然是Object Table,详细使用见表回收站。
使用示例
本次以通过Object Table解析PDF文档示例,操作步骤如下。
准备工作
数据准备
下载博金大模型挑战赛-金融千问14b数据集中80份招股书(PDF)。
账号准备
登录RAM控制台,创建阿里云RAM角色并授予OSS的相关权限。
推荐授予AliyunOSSReadOnlyAccess权限。
为上述阿里云RAM角色添加登录和Hologres的访问权限。
阿里云账号(主账号)
修改RAM角色的信任策略。重点需更新如下参数:
Action:更新为
sts:AssumeRole
。Service:更新为
hologres.aliyuncs.com
。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::1866xxxx:root" ], "Service": [ "hologres.aliyuncs.com" ] } } ], "Version": "1" }
RAM用户(子账号)
为RAM用户授权。
为已创建的RAM角色授权。
修改RAM角色的信任策略。重点需更新如下参数:
Action:更新为
sts:AssumeRole
。Service:更新为
hologres.aliyuncs.com
。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::1866xxxx:root" ], "Service": [ "hologres.aliyuncs.com" ] } } ], "Version": "1" }
Hologres实例准备
确保Hologres实例版本为V4.0及以上版本。
操作步骤
连接HoloWeb,并创建Object Table关联OSS中的PDF文件。
CREATE OBJECT TABLE public.pdf_bs_challenge_financial_14b_dataset WITH ( path = 'oss://xxxx-hangzhou/bs_challenge_financial_14b_dataset/pdf', --必填 oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com', role_arn = 'acs:ram::xxx:role/xxxx' );
刷新并查询Object Table。
Object Table创建成功后必须要手动刷新一次,才能查询数据。执行如下命令。
-- 刷新 REFRESH OBJECT TABLE public.pdf_bs_challenge_financial_14b_dataset; -- 查询 SELECT object_uri ,etag, file->>'size' AS size, file->>'last_modified_at' as last_modified_at FROM public.pdf_bs_challenge_financial_14b_dataset;
查询的返回结果如下。
object_uri | etag | size | last_modified_at --------------------------------------------------------------------------------- oss://hm-****-hangzhou/bs_challenge_financial_14b_dataset/pdf/5c2707b186a798118bba251cce8d1fc331b****.PDF | 836F504F63F4B77A2271CD3285DDECF7 | 4170245 | 2025-08-18 14:18:19+08 oss://hm-****-hangzhou/bs_challenge_financial_14b_dataset/pdf/72103a0ef6299585cdd09751682534d873f****.PDF | 39DA597D83BBCA571AC8B94CC464CDC8 | 4022782 | 2025-08-18 14:17:05+08
非结构化数据检索。
Object Table可以将PDF的元数据信息一一映射,通常可以结合Hologres AI Function,对PDF的内容进行检索和推理,详细的操作步骤如下:
本文购买AI资源规格为:large-96core-512G-384G、一个节点。
AI资源购买成功后,前往Hologres管控台部署模型,本次PDF检索需要部署的模型以及资源分别如下:
模型名称
模型类别
模型作用描述
单副本CPU
单副本内存
单副本GPU
资源副本数
to_doc
ds4sd/docling-models
将PDF转换成文档。
20 core
100 G
1卡(48 G)
1
chunk
recursive-character-text-splitter
文档切片,每个PDF较大,建议使用切片。
15 core
30 G
0卡(0 G)
1
pdf_embed
BAAI/bge-base-zh-v1.5
文档Embedding。
7 core
30 G
1卡(96 G)
1
llm
Qwen/Qwen3-32B
使用大模型对检索出的文档内容按照提示词推理。
7 core
30 G
1卡(96 G)
1
创建一张表对PDF数据进行Embedding。
创建一张Hologres内部表,用于存储PDF经过Embedding后的数据,并且为这张表构建向量索引,以便后续的向量检索。
--创建embeding表 CREATE TABLE public.embed_pdf_bs ( object_uri text NOT NULL, etag text NOT NULL, chunk text NOT NULL, embedding_vector float4[] CHECK(array_ndims(embedding_vector) = 1 AND array_length(embedding_vector, 1) =1024) ) WITH ( bitmap_columns = 'object_uri,etag,chunk', clustering_key = 'object_uri,etag', distribution_key = 'object_uri', vectors = '{ "embedding_vector": { "algorithm": "HGraph", "distance_method": "Cosine", "builder_params": { "base_quantization_type": "sq8_uniform", "max_degree": 64, "ef_construction": 400, "precise_quantization_type": "fp32", "use_reorder": true } }}' );
调用AI Function对PDF进行Embed和Chunk,然后写入该表。
--将PDF转成文档并embed insert into public.embed_pdf_bs WITH parsed_doc AS ( SELECT object_uri, etag, ai_parse_document(file, 'auto', 'markdown') AS doc FROM pdf_bs_challenge_financial_14b_dataset limit 1), chunked_doc AS ( SELECT object_uri, etag, unnest(ai_chunk(doc, 300, 50)) AS chunk FROM parsed_doc ) SELECT object_uri, etag, chunk, ai_embed(chunk) AS embedding_vector FROM chunked_doc WHERE chunk IS NOT NULL AND length(chunk) > 0;
对PDF的内容进行检索和推理。
可以根据招股书中的业绩走势,来判断该公司的后续走势是悲观还是乐观,对投资意向提供辅助建议。示例SQL如下:
WITH -- 问题向量与召回 embedding_recall AS ( SELECT chunk FROM embed_pdf_bs ORDER BY approx_cosine_distance( embedding_vector, ai_embed('报告期内,湖南国科微电子股份有限公司2014年度、2015年度、2016年度营业收入和净利润分别较上年增长多大幅度?') ) DESC LIMIT 20 ), -- 拼接 concat_top_chunks AS ( SELECT string_agg(chunk, E'\n\n----\n\n') AS merged_chunks FROM embedding_recall ) -- 生成最终回答 SELECT ai_gen('请分析如下业绩走势是悲观还是乐观,并给出原因:' || ai_gen('报告期内,湖南国科微电子股份有限公司2014年度、2015年度、2016年度营业收入和净利润分别较上年增长多大幅度?' || merged_chunks)) FROM concat_top_chunks;
查询的返回结果如下。
ai_gen ---- "从提供的财务数据和增长原因分析来看,湖南国科微电子股份有限公司在2014年至2016年期间的业绩走势整体上是**乐观的**,原因如下: ### 1. **营业收入持续增长** - 2014年营业收入同比增长112.94%,2015年同比增长103.00%,2016年虽然增速放缓,但仍保持33.22%的增长。这表明公司业务规模在不断扩大,市场需求稳步提升。 - 增长的主要原因是新产品(如智能监控芯片、GK系列芯片)的量产和销售,以及与知名代理商的合作,显示出公司在产品创新和市场拓展方面的优势。 ### 2. **净利润显著增长** - 2014年净利润同比增长高达467.53%,2015年增长8.21%,2016年再次增长33.07%。虽然2015年增速较慢,但整体仍保持正向增长。 - 2016年净利润增长的主要原因是高毛利产品(如固态存储系列芯片)收入增加,同时销售费用下降,说明公司在产品结构优化和成本控制方面取得了积极成效。 ### 3. **产品结构优化和技术创新** - 2014年,公司因直播星市场开放而受益;2015年,智能监控芯片实现量产销售;2016年,GK系列芯片开始导入知名代理商。这表明公司能够紧跟市场需求,通过技术创新推动业务增长。 - 高毛利产品的销售占比增加,有助于提升公司整体盈利能力。 ### 4. **市场拓展能力增强** - 与业内知名代理商(如科通、时捷)的合作,说明公司在市场渠道建设方面取得了突破,有助于扩大市场份额和提升品牌影响力。 ### 5. **整体趋势积极** - 尽管2016年营业收入增长较2015年有所放缓,但净利润仍保持较高增速,显示出公司经营效率的提升和盈利能力的增强。这表明公司在面对市场变化时具备较强的适应能力和优化能力。 ### 结论: 综合来看,湖南国科微电子股份有限公司在2014年至2016年期间的业绩走势是**乐观的**。公司不仅实现了营业收入和净利润的持续增长,而且通过产品结构优化、技术创新和市场拓展,增强了自身的核心竞争力和盈利能力。尽管2016年营业收入增速有所放缓,但净利润的稳定增长显示出公司具备良好的经营管理和成本控制能力。"