Apache Doris 目前不提供像传统关系型数据库(如 Oracle、MySQL、SQL Server)那样的存储过程功能。


详细解释与背景

Doris 的设计初衷是成为一个高性能、实时的分析型数据库(OLAP)。它的核心优势在于大规模数据的快速查询和分析,而不是像 OLTP 数据库那样处理复杂的业务逻辑和事务操作。

存储过程通常用于:

  1. 封装复杂的业务逻辑于数据库端。

  2. 减少网络传输(在数据库内完成多个步骤)。

  3. 进行频繁的事务操作。

这些使用场景与 Doris 的 OLAP 定位并不完全吻合。在数据仓库和数据分析的场景中,业务逻辑通常更倾向于在应用层(如 Spark、Flink、Java/Python 服务)或者通过 ETL 工具来实现,以保证数仓的简洁性和高性能。


替代方案与最佳实践

虽然 Doris 没有存储过程,但你可以通过以下方式实现类似的需求:

  1. 视图(VIEW):

    • 对于常用的、复杂的查询逻辑,你可以创建视图来简化查询语句。用户可以直接查询视图,而无需编写复杂的 SQL。

    • 这可以看作是对“只读”逻辑的一种封装。

  2. UDF(用户自定义函数):

    • Doris 支持 UDF 和 UDAF。

    • 如果你有特定的计算逻辑需要在查询中重复使用,你可以用 Java 或 C++ 编写自定义函数,并将其加载到 Doris 中。这样可以在 SQL 中像内置函数一样调用它。

  3. 应用层封装:

    • 这是最常见和推荐的做法。将复杂的、多步骤的数据处理逻辑写在你的应用程序代码中(如 Python、Java、Go 脚本)。

    • 你的应用程序可以:

      • 连接 Doris 数据库。

      • 执行一条或多条 SQL 语句。

      • 对上一步的查询结果进行加工处理。

      • 将处理后的结果写回 Doris 或其他系统。

    • 你可以使用调度工具(如 Apache Airflow、DolphinScheduler、甚至是 Linux Cron)来定期执行这些脚本,实现类似“定时存储过程”的效果。

  4. 利用外部数据处理框架:

    • 对于非常复杂的数据处理 pipeline,可以结合使用 Apache Flink 或 Spark。

    • 这些框架从 Doris 中读取数据,进行复杂的转换、关联和计算,最后再将结果写回 Doris。Doris 官方提供了 Flink-Doris-Connector 和 Spark-Doris-Connector,使得这种集成非常方便。

未来展望

Doris 社区一直在积极开发新功能。虽然目前没有明确的计划要支持完整的存储过程,但一些增强功能(如更完善的事务支持、更强大的 UDF 生态)可能会逐步缩小这个差距。

总结

特性Doris传统数据库 (如 MySQL, Oracle)
存储过程不支持支持
主要定位OLAP (分析型)OLTP (事务型) / 混合型
复杂逻辑实现方式应用层程序、UDF、视图、外部框架(Flink/Spark)存储过程、函数、触发器

因此,在设计基于 Doris 的系统时,请将业务逻辑处理放在应用层,而让 Doris 专注于它最擅长的部分:高速查询和分析。

参考1

基于doris实时数仓实时报表生成_doris 存储过程-CSDN博客

https://blog.csdn.net/qq_43118086/article/details/124617562?

参考2

更多推荐