为什么大数据平台回归SQL?

发布: (2025年12月12日 GMT+8 15:37)
7 min read
原文: Dev.to

Source: Dev.to

背景

结构化数据是大数据分析的主食

大数据平台的核心目标是满足大数据存储和分析的需求。在需要存储的海量数据中,除了业务活动产生的结构化数据外,还有大量的非结构化数据——音频、视频等——这些数据往往占据平台上全部数据的 80 % 以上。存储数据只是大数据平台目标的一部分,更重要的是分析和利用数据以产生业务价值。

大数据分析涵盖两类数据:结构化非结构化

  • 结构化数据 在日常业务运营中产生,是企业的核心部分。在大数据平台出现之前,结构化数据几乎占据了企业信息库的全部或大多数。随着业务的扩展,数据不断累积,给传统基于关系型数据库(RDB)的处理系统带来压力。大数据平台应运而生,提供了解决结构化数据分析问题的方案。
  • 非结构化数据(日志、图片、音频、视频)通常会被处理以提取相关的结构化属性——例如视频的制作者、日期、类别、时长,或日志的用户 IP、访问时间、关键字等。因此,非结构化数据分析主要关注其产生的结构化数据副产品。

由此可见,结构化数据分析仍然是大数据平台上业务分析的主导。用于处理结构化数据的成熟技术——主要是基于 SQL 的关系模型 RDBMS——被广泛使用。

SQL 主导结构化数据处理领域

回归 SQL 语法已成为大数据分析的明显趋势。在 Hadoop 中,早期的 PIG Latin 被抛弃,而 Hive 仍然存活;在 Spark 上,SparkSQL 的使用远远超过基于 Scala 的 API。新的大数据计算系统也倾向于使用 SQL 进行计算。这门古老的语言在与各种挑战者多年竞争后再次确认了自己的地位。

推动这种回归的两大原因:

  1. 更好的选择尚未出现
    关系型数据库已经流行了很长时间,SQL 成为程序员的“老朋友”。虽然 SQL 对于常规查询非常简洁,但在处理复杂的过程式或顺序计算时不够方便。替代技术往往同样繁琐,需要编写复杂的 UDF 或自定义代码。面对这两种麻烦,许多人宁愿选择熟悉的 SQL。

  2. SQL 获得了大数据厂商的背书
    厂商追求更高的性能,而 SQL 提供了一个众所周知且易于理解和评估的基准(例如 TPC‑H)。这促使厂商将优化工作重点放在 SQL 上。

与 SQL 兼容的平台更易迁移

SQL 兼容平台的优势显而易见:

  • SQL 被广泛熟知,降低培训成本。
  • 众多前端工具已经支持 SQL,集成变得直接。
  • 与现有的基于 SQL 的数据库兼容,迁移更顺畅,成本更低。

然而,这些好处也意味着必须接受 SQL 的一些缺陷。

问题

性能低下

使用 SQL 的最大问题在于,它并不是实现大数据计算所需高性能的最有效手段。

  • SQL 缺乏针对某些高性能计算的专用数据类型和定义,严重依赖执行引擎的工程化优化。
  • 虽然数十年的经验为商业数据库积累了丰富的优化技术,但许多大数据场景仍然难以优化。
  • SQL 并不擅长表达过程式计算或指定最优执行路径,而这些对于高性能算法至关重要。实现最优路径往往需要大量特殊修饰符;过程式语法则可能更直接。

历史上,SQL 是为硬件受限的环境设计的。其设计约束使得充分利用现代硬件特性(如大内存、海量并行、集群机制)变得困难。以下是一些与性能相关的限制示例:

  • JOIN 操作 —— 传统的 SQL JOIN 通过键值匹配,通常使用哈希计算。在大内存环境下,基于地址的匹配速度可能快得多。
  • 无序表 —— 虽然单表计算可以通过分区实现并行,但跨多表的动态划分(例如多表 JOIN)较为困难,需要静态分段,从而限制了灵活的线程分配。
  • 集群计算 —— SQL 并不区分维度表和事实表,并将 JOIN 定义为过滤后的笛卡尔积。大表 JOIN 会触发代价高昂的哈希洗牌,消耗网络带宽,削弱了集群扩展的收益。

示例

从一个拥有十亿记录的表中获取前 10 行:

SELECT TOP 10 x, y
FROM T
ORDER BY x DESC;

ORDER BY 子句会强制对整个表进行排序,在如此规模下极其缓慢。可以设计算法避免全表排序,但 SQL 无法直接表达,只能依赖数据库优化器去寻找高效的执行计划。

Back to Blog

相关文章

阅读更多 »