惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
小众软件
小众软件
量子位
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
博客园_首页
IT之家
IT之家
S
SegmentFault 最新的问题
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
爱范儿
爱范儿
月光博客
月光博客
有赞技术团队
有赞技术团队
H
Help Net Security
云风的 BLOG
云风的 BLOG

博客园 - 大汪的数据之路

外企的问卷调查 10 Tips On How To Be Exceptional In Anything You Do(在所做的任何事情上变得卓越的10个方法) 企业网络环境全景解析——面向AI智能数据分析场景的数据工程师指南 数据虚拟化:从“搬运数据”到“连接数据”的范式革命 数据运维值班预警自动化 数据“搬砖”实战经验 星环大数据使用体验 vibe coding使用体验 基于SQL实现分组的文字排序聚合 数据码农马年大吉 字符串分割并展开成表格的SQL实现方法 BI报表及可视化分析类工具使用经验总结(下) BI报表及可视化分析类工具使用经验总结(上) 基于Python实现自动化微信通知和预警 Chat2DB测试体验 常用数据管理工具与平台汇总 OneID系统建设实践总结 网易有数BI使用总结 网易NDH大数据平台使用经验 版本管理总结 程序自动化vs人工手动处理 SQL开发总结 数据平台使用经验 数据团队运维值班任务简介 Python环境安装、管理与部署 windows获取kerberos认证 SQL动态长度行列转置 ODI Scenario 场景 Oracle KEEP 分析函数
数据虚拟化技术解析:从概念到实践
大汪的数据之路 · 2026-08-14 · via 博客园 - 大汪的数据之路

数据虚拟化技术解析:从概念到实践

一、概念篇:什么是数据虚拟化?

1.1 定义与本质

数据虚拟化(Data Virtualization)是一种数据集成与管理技术。它在底层数据源(如关系型数据库、NoSQL、大数据平台、文件系统)与上层业务应用之间,构建一个统一的逻辑访问层

通过这一中间层,数据虚拟化为使用者屏蔽了所有底层技术细节。用户无需关心数据存放在哪里、是什么格式、用什么接口访问,只需掌握标准的SQL语法,即可像查询单一数据库一样,跨多个异构数据源进行数据查询与分析。

数据虚拟化的一个关键特征,也是其与ETL最根本的区别,在于“数据不动计算动”——它在不物理移动、不复制原始数据的前提下,提供统一的数据访问能力。

1.2 为什么要用数据虚拟化?

理想情况下,数据分析师写一条SQL就能获取所有所需数据。但在现实中,一条SQL能成功运行之前,用户往往需要跨越重重障碍:

  • 平台识别层:数据在Oracle、PostgreSQL,还是大数据平台Hive上?
  • 连接配置层:需要确认IP、端口号、数据库名、用户名、密码等连接信息。
  • 网络与权限层:确认网络是否连通、防火墙端口是否开放、用户是否具备访问权限。
  • 语法适配层:每个数据平台都有自己的SQL方言(如Oracle的ROWNUM、MySQL的LIMIT、SQL Server的TOP),语法差异需要额外处理。

对于熟悉底层技术的数据工程师而言,上述问题尚可通过排查和运维协调解决。但对于数据分析师、数据科学家等专注于业务逻辑的用户来说,处理这些平台技术问题门槛过高,严重影响了工作效率。

数据虚拟化正是为了解决这一矛盾而生。它让数据使用者能专注于“查什么”而非“怎么查”。

二、技术方案篇:数据虚拟化的四层实现

在数据虚拟化概念普及之前,主流数据库厂商就已提供了跨库查询的能力。

Oracle DB Link是其中的典型代表。通过在数据仓库实例中创建指向CRM、ERP等不同业务系统的DB Link,DBA将连接信息封装在Link对象中。使用者只需在SQL中通过表名@DBLink名的方式即可查询远程数据,无需关心IP、端口、用户名、密码等底层细节:

-- 查询CRM系统中的客户表,无需关心CRM的IP/端口/用户名/密码
SELECT * FROM CUSTOMERS@CRM_DB;

类似地,PostgreSQL提供了dblink_connectSQL Server提供了Linked Server/OPENQUERY/OPENROWSET。在国产化信创背景下,达梦数据库ArgoDB等产品也已支持或正在适配类似功能。

2.2 文件级虚拟化:External Table(外部表)

企业中有相当比例的数据来自第三方供应商,以CSV、Excel、JSON等文件形式存在。为了能用SQL直接查询这些文件数据,数据库系统引入了外部表(External Table) 技术——将文件数据在逻辑上“伪装”成数据库中的二维表。

Oracle的外部表是经典实现,通过ORACLE_LOADERORACLE_DATAPUMP驱动读取文件:

-- Oracle 创建外部表示例
CREATE TABLE sales_ext (
    order_id     NUMBER,
    customer_name VARCHAR2(100),
    order_amount  NUMBER(10,2)
)
ORGANIZATION EXTERNAL (
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY ext_dir
    ACCESS PARAMETERS (
        RECORDS DELIMITED BY NEWLINE
        FIELDS TERMINATED BY ','
    )
    LOCATION ('sales_2025_q1.csv')
);

类似的,Hive也提供了外部表机制,用于对HDFS上的文件数据进行虚拟化:

-- Hive 外部表查询 JSON 日志示例
CREATE EXTERNAL TABLE log_analysis (
    timestamp STRING,
    user_id   STRING,
    action    STRING,
    params    MAP<STRING,STRING>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/data/logs/2025/';
SELECT user_id, params['browser'] FROM log_analysis;

需要注意,外部表一般只支持只读操作,适合静态或按批次更新的文件数据场景。

2.3 分布式联邦查询引擎:Presto/Trino与openLooKeng

联邦查询是数据虚拟化的核心技术,其思想是数据不动计算动。通过一个中间查询引擎,将用户的一条SQL智能分解为针对多个数据源的子查询,下推执行后汇总结果。

Presto/Trino是该领域的代表产品。它采用三层表模型(Catalog.Schema.Table),通过丰富的Connector生态实现对各类异构数据源的统一查询:

类别 支持的数据源
关系型数据库 MySQL、PostgreSQL、Oracle、SQL Server等
大数据存储 HDFS、Hive、Iceberg、Delta Lake、Hudi等
NoSQL Cassandra、MongoDB、Redis、Elasticsearch等
消息/流 Kafka
云存储/对象存储 AWS S3、阿里云OSS等

开发者也可以通过自定义Connector接入特殊数据源,让联邦查询的边界得以无限拓展。

在国产化替代方面,华为开源的openLooKeng是一个值得关注的选择。它源自Presto生态,继承了交互式查询能力,并增强了跨数据中心协同计算、动态过滤等企业级特性。社区已有开发者尝试通过JDBC Connector接入达梦、金仓等国产数据库,未来在信创场景中具有较好的应用前景。
以下是openLooKeng的操作使用案例:
image

2.4 数据库内联邦查询:PostgreSQL FDW

联邦查询的另一种实现方式是PostgreSQL的FDW(Foreign Data Wrapper,外部数据包装器) 。它以内置扩展插件的形式,为单一数据库赋予联邦查询能力:

  • file_fdw:访问文件数据,类似外部表功能;
  • oracle_fdw / mysql_fdw:访问异构关系型数据库,类似DB Link;
  • citus_fdw:访问分布式Citus集群。

典型用法示例:

-- 创建MySQL外部服务器
CREATE SERVER mysql_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (
    host '192.168.1.100', port '3306'
);

-- 创建外部用户映射
CREATE USER MAPPING FOR current_user SERVER mysql_server OPTIONS (
    username 'etl_user', password 'secure_pass'
);

-- 创建外部表,映射到MySQL中的表
CREATE FOREIGN TABLE remote_orders (
    order_id INT,
    customer_id INT,
    amount DECIMAL(10,2)
) SERVER mysql_server OPTIONS (
    dbname 'erp', table_name 'orders'
);

-- 直接查询,仿佛在操作本地表
SELECT * FROM remote_orders;

三、数据虚拟化 vs ETL:异同与互补

对比维度 数据虚拟化 ETL
核心定位 逻辑整合与数据服务层 复制型数据生产与加工链路
数据到达方式 先连接、先整合、先服务 先复制、先落库、再加工、再消费
数据副本策略 尽量减少默认复制,必要时按需物化 持续复制同步,副本随场景增长
数据实时性 高(实时/近实时访问) 低(通常T+1批量同步)
需求响应方式 以逻辑层复用为主 以新增链路和新增表为主
存储成本 低(无需大量副本) 高(多份数据副本,存储膨胀)
架构灵活性 强,对异构环境适应性强 弱,高度依赖目标端架构

两者最根本的区别是:企业以“复制”为整合起点,还是以“逻辑连接”为整合起点。

需要强调的是,数据虚拟化并非ETL的替代品,两者在不同场景下各有所长,更趋向于互补关系:

  • ETL适合大规模聚合、复杂清洗、历史数据重放等需要批量加工与审计留痕的场景;
  • 数据虚拟化适合实时/近实时查询、跨源敏捷分析、临时探索等场景。

正如Denodo官方所言:“数据虚拟化可以通过多种方式扩展和增强ETL/EDW部署。”

四、总结

数据虚拟化的兴起,本质上是企业数据管理哲学的一次深刻转变——从“筑坝蓄水”到“疏渠导流”。当数据不再集中于单一系统,而是散布在本地、云端、SaaS等数十个节点时,继续依赖“先搬运、再使用”的传统模式已难以为继。

在实际项目中,数据虚拟化除了提供便捷的跨源查询能力外,也常被用于跨系统间的少量数据传输、采集、导出和快速ETL——在无第三方工具介入时,这是一种最快捷的方法。例如,Oracle通过DB Link在不同实例间传输少量数据,利用External Table实现高性能文件写入(ORACLE_DATAPUMP驱动)。

数据虚拟化因其“不搬运、只连接”的核心理念,已被Gartner列为现代数据架构的核心技术,并成为数据编织(Data Fabric) 架构的关键支撑。由于数据孤岛无法被彻底消除,数据虚拟化也必将在企业的数据基础设施中长期存在并持续进化。