外部表的支持简化AI数据导入 痛点场景:构建RAG应用时,企业知识库常存在于PDF、Word等多种格式的非结构化文档中。传统方式需要复杂ETL流程才能将其导入数据库并进行向量化,过程繁琐。 23ai解决方案:使用外部表可以直接连接并查询外部存储的文件。结合Oracle Database 23ai的向量化能力,可以简化数据准备流程。
实验步骤:
数据准备:将产品手册、技术文档等PDF文件存入对象存储。 建立外部表:创建外部表指向这些文件,Oracle数据库可直接读取其内容。 向量化与存储:在OCI Data Science笔记本中使用内嵌模型,将文档内容转化为向量。 入库查询:将生成的向量数据存入Oracle Database 23ai的向量列,后续即可进行相似性搜索。此方案极大降低了AI应用数据预处理的复杂性。
传统ETL流程
-- 1. 传统方式:文件预处理 + 批量插入
CREATE TABLE tech_docs_traditional (
doc_id NUMBER PRIMARY KEY,
doc_name VARCHAR2(500),
content CLOB,
vector_data VECTOR
);
-- 处理脚本(Python + SQL*Loader)
DECLARE
v_processing_time NUMBER;
BEGIN
-- 开始计时
v_processing_time := DBMS_UTILITY.get_time;
-- 模拟传统ETL:文件解析 + 数据转换 + 批量插入
-- 使用外部程序处理PDF,生成中间文件,再通过SQL*Loader导入
v_processing_time := (DBMS_UTILITY.get_time - v_processing_time)/100;
DBMS_OUTPUT.PUT_LINE('传统ETL处理时间: ' || v_processing_time || ' 秒');
END;
/
外部表优化方案
-- 创建目录对象
CREATE OR REPLACE DIRECTORY pdf_dir AS '/data/ai_documents/';
CREATE OR REPLACE DIRECTORY log_dir AS '/data/logs/';
-- 创建外部表
CREATE TABLE tech_docs_external (
doc_name VARCHAR2(500),
file_content BLOB
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY pdf_dir
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS (
doc_name CHAR(500),
file_content LOBFILE(CONSTANT 'dummy.pdf')
)
)
LOCATION ('file_list.txt')
)
REJECT LIMIT UNLIMITED;
-- 向量化处理(使用内置AI函数)
CREATE TABLE doc_vectors AS
SELECT
ROWNUM as doc_id,
doc_name,
AI_VECTORIZE(file_content) as document_vector
FROM tech_docs_external;
性能对比数据
