As tabelas de objetos mapeiam arquivos armazenados no OSS em uma tabela Hologres consultável. Semelhante a uma tabela externa, esse recurso é projetado especificamente para dados não estruturados, como imagens, PDFs, áudio e vídeo. O Hologres V4.0 e versões posteriores oferecem suporte a ele.
Com as tabelas de objetos, você pode:
Consultar metadados de arquivos do OSS usando SQL padrão sem mover os dados para fora do OSS.
Processar dados não estruturados de ponta a ponta combinando tabelas de objetos com Dynamic Tables e AI Functions, sem necessidade de serviços externos de embedding.
Detectar alterações nos arquivos de forma incremental para evitar o reprocessamento de arquivos inalterados e reduzir custos de computação.
Pré-requisitos
Antes de começar, verifique se você possui:
Uma instância Hologres executando a versão V4.0 ou posterior. Para fazer upgrade, consulte Fazer upgrade de uma instância
Um bucket do OSS contendo os arquivos que você deseja acessar
Uma função RAM com acesso de leitura ao bucket do OSS. Para encontrar o ARN (Alibaba Cloud Resource Name) da função, acesse o console do Resource Access Management (RAM), clique em Identity Management > Role e, em seguida, clique no nome da função
Limitações
Há suporte apenas para endpoints de rede clássica.
Há suporte apenas para atualização manual. Não há atualização automática.
-
Por padrão, as tabelas de objetos verificam apenas o diretório de nível superior do caminho especificado. Subdiretórios não são incluídos. Para verificar subdiretórios recursivamente, execute:
NotaVarreduras recursivas consomem mais recursos do que varreduras de nível superior. Defina
pathpara o diretório mais específico que contém seus arquivos de destino.ALTER DATABASE <db_name> SET hg_experimental_enable_oss_meta_recursive = on;
Crie uma tabela de objetos
As tabelas de objetos possuem um esquema fixo — não é necessário especificar colunas ao criá-las.
Sintaxe:
CREATE OBJECT TABLE [IF NOT EXISTS] [schema_name.]<table_name>
WITH (
-- Required
path = '<oss_path>',
oss_endpoint = '<oss_endpoint>',
role_arn = '<role_arn>',
-- Optional
[orientation = 'column | row | row,column',]
[table_group = '<table_group_name>',]
[distribution_key = '<column_name>[,...]',]
[clustering_key = '<column_name>[:asc][,...]',]
[storage_mode = 'hot | cold',]
[event_time_column = '<column_name>[,...]',]
[bitmap_columns = '<column_name>[,...]',]
[dictionary_encoding_columns = '<column_name>[,...]',]
[time_to_live_in_seconds = '<non_negative_integer>']
);
Após criar uma tabela de objetos, atualize-a uma vez para carregar os dados:
REFRESH OBJECT TABLE [schema_name.]<table_name>;
Parâmetros obrigatórios
Parâmetros opcionais
|
Parâmetro |
Descrição |
Exemplo |
|
|
Caminho do diretório OSS que contém seus arquivos. A tabela de objetos lê metadados dos arquivos neste diretório. |
|
|
|
Endpoint de rede clássica do OSS para a região do bucket. Para consultar os endpoints por região, visualize . |
|
|
|
ARN de uma função RAM com acesso de leitura ao bucket do OSS. |
|
|
Parâmetro |
Padrão |
Descrição |
|
|
|
Formato de armazenamento. Valores suportados: |
|
|
Grupo de tabelas padrão |
Grupo de tabelas e contagem de shards para a tabela de objetos. |
|
|
|
|
|
|
|
|
|
|
|
Modo de armazenamento. Valores suportados: |
|
|
|
|
|
|
|
Colunas do índice bitmap. |
|
|
|
Colunas de codificação de dicionário. |
|
|
|
Ciclo de vida dos dados da tabela em segundos. |
Consultar uma tabela de objetos
Após a atualização inicial, consulte uma tabela de objetos como qualquer tabela padrão:
SELECT * FROM <object_table_name>;
As tabelas de objetos possuem as seguintes colunas fixas:
Para visualizar o DDL ou as propriedades de armazenamento de uma tabela de objetos, use um dos seguintes comandos:
-- View DDL
SELECT hg_dump_script('[schema_name.]<object_table_name>');
-- View storage properties
SELECT * FROM hologres.hg_table_properties WHERE table_name = '<object_table_name>';
Atualize uma tabela de objetos
Atualize uma tabela de objetos para sincronizar os metadados dos arquivos do OSS. Há suporte apenas para atualização manual.
REFRESH OBJECT TABLE [schema_name.]<table_name>;
A atualização consome recursos de computação. Para minimizar custos, defina path para o diretório mais específico que contém seus arquivos de destino.
Gerencie uma tabela de objetos
Renomear ou mover uma tabela de objetos
-- Rename
ALTER OBJECT TABLE [IF EXISTS] <table_name> RENAME TO <new_name>;
-- Move to a different schema
ALTER OBJECT TABLE [IF EXISTS] [schema_name.]<table_name> SET SCHEMA <new_schema>;
Exclua uma tabela de objetos
-- Moves to the recycle bin if it is enabled; otherwise, permanently deletes
DROP OBJECT TABLE [IF EXISTS] <table_name>;
-- Permanently deletes without moving to the recycle bin
DROP OBJECT TABLE [IF EXISTS] <table_name> FORCE;
Se a lixeira do banco de dados estiver ativada, excluir uma tabela de objetos a move automaticamente para a lixeira. É possível recuperar a tabela de objetos usando o comando de recuperação da lixeira, e ela permanece como uma tabela de objetos após a recuperação. Para mais detalhes, consulte Lixeira.
A opção FORCE exclui permanentemente a tabela de objetos. A recuperação não é possível.
|
Coluna |
Tipo |
Descrição |
|
|
TEXT |
Caminho exato do arquivo no OSS. |
|
|
TEXT |
Identificador exclusivo para o conteúdo do arquivo, atribuído quando o objeto é criado. |
|
|
FILE |
Estrutura semelhante a JSON contendo metadados detalhados do arquivo. Analise-a usando tipos JSON e JSONB. Os campos incluem: |
|
|
JSON |
Metadados personalizados anexados ao arquivo. |
Crie uma tabela para armazenar dados de PDF com embedding.
Crie uma tabela interna do Hologres para armazenar dados de PDF com embedding. Construa um índice vetorial nesta tabela para pesquisa vetorial.
-- Create embedding table
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
}
}}'
);
Chame a AI Function para gerar embeddings e dividir os PDFs em chunks, e então grave os resultados na tabela.
-- Convert PDFs to documents and 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;
Pesquise e infira o conteúdo do PDF.
É possível avaliar se a perspectiva futura de uma empresa é otimista ou pessimista com base nas tendências financeiras nos prospectos. Isso ajuda a orientar decisões de investimento. Exemplo de SQL:
WITH
-- Embed question and retrieve
embedding_recall AS (
SELECT chunk FROM embed_pdf_bs
ORDER BY
approx_cosine_distance(
embedding_vector,
ai_embed('In the reporting period, what were the year-on-year growth rates for revenue and net profit of Hunan Goke Microelectronics Co., Ltd. in 2014, 2015, and 2016?')
) DESC
LIMIT 20
),
-- Concatenate top chunks
concat_top_chunks AS (
SELECT string_agg(chunk, E'\n\n----\n\n') AS merged_chunks FROM embedding_recall
)
-- Generate final answer
SELECT
ai_gen('Analyze whether the following financial trend is optimistic or pessimistic, and explain why: ' ||
ai_gen('In the reporting period, what were the year-on-year growth rates for revenue and net profit of Hunan Goke Microelectronics Co., Ltd. in 2014, 2015, and 2016? ' || merged_chunks))
FROM concat_top_chunks;
A consulta retorna:
ai_gen
----
"From the provided financial data and growth analysis, Hunan Goke Microelectronics Co., Ltd. showed an overall **optimistic** performance trend from 2014 to 2016, for the following reasons:
### 1. **Revenue grew consistently**
- Revenue increased by 112.94% in 2014, 103.00% in 2015, and 33.22% in 2016. This indicates steady business expansion and rising market demand.
- Growth was driven by mass production and sales of new products (e.g., smart surveillance chips and GK-series chips) and partnerships with well-known distributors, highlighting strengths in product innovation and market outreach.
### 2. **Net profit rose significantly**
- Net profit surged by 467.53% in 2014, 8.21% in 2015, and 33.07% in 2016. Although growth slowed in 2015, it remained positive.
- In 2016, higher-margin products (e.g., solid-state storage chips) contributed more to revenue, while sales expenses declined. This reflects successful optimization of product mix and cost control.
### 3. **Product mix improved and innovation advanced**
- In 2014, the company benefited from the opening of the Live Satellite market. In 2015, smart surveillance chips entered mass production. In 2016, GK-series chips were adopted by major distributors. This shows the company’s ability to align with market needs and drive growth through innovation.
- Higher-margin products made up a larger share of sales, boosting overall profitability.
### 4. **Market reach expanded**
- Partnerships with leading distributors (e.g., Koton and Shijie) indicate breakthroughs in channel development, helping expand market share and brand influence.
### 5. **Overall trend is positive**
- Although revenue growth slowed in 2016 compared to 2015, net profit continued to rise at a healthy pace. This signals improved operational efficiency and profitability. It shows the company adapts well to market changes and optimizes effectively.
### Conclusion:
Overall, Hunan Goke Microelectronics Co., Ltd. showed an **optimistic** performance trend from 2014 to 2016. The company achieved consistent growth in both revenue and net profit. It strengthened its core competitiveness and profitability through product mix optimization, innovation, and market expansion. While revenue growth slowed in 2016, stable net profit growth reflects strong operational management and cost control."
|
Nome da função |
Nome do modelo |
Descrição da função do modelo |
CPU por réplica |
Memória por réplica |
GPU por réplica |
Número de réplicas |
|
to_doc |
ds4sd/docling-models |
Converter PDFs em documentos. |
20 core |
100 G |
1 GPU (48 G) |
1 |
|
chunk |
recursive-character-text-splitter |
Dividir documentos. Dividir PDFs grandes. |
15 core |
30 G |
0 GPU (0 G) |
1 |
|
pdf_embed |
BAAI/bge-base-zh-v1.5 |
Embedding de documentos. |
7 core |
30 G |
1 GPU (96 G) |
1 |
|
llm |
Qwen/Qwen3-32B |
Usar um Modelo de Linguagem Grande (LLM) para inferir o conteúdo do documento recuperado com base em prompts. |
7 core |
30 G |
1 GPU (96 G) |
1 |
Melhores práticas
As tabelas de objetos funcionam com Dynamic Tables, AI Functions, pesquisa vetorial e pesquisa de texto completo para automatizar o processamento, a pesquisa e a análise de dados não estruturados. Para mais detalhes, consulte: