尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
StarRocks 数学函数 ln / dlog1 / log:自然对数计算的语法、边界行为与向量化实现解析
StarRocks 数学函数 ln / dlog1 / log自然对数计算的语法、边界行为与向量化实现解析【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks本篇技术指南围绕 StarRocks 内置数学函数ln及其等效写法dlog1、log展开说明其语法、参数类型、NULL 边界行为与典型 SQL 示例并结合 BE 端向量化表达式引擎的源码实现解释自然对数在 StarRocks 中是如何被计算、校验与返回的。读完本文你将能够在 StarRocks 中正确、高效地使用自然对数函数处理 DOUBLE 类型数值并理解其底层实现原理。函数概览ln、dlog1、log是 StarRocks 中计算自然对数以自然常数e为底的对数的数学函数三者功能完全等价只是名称不同。原始文档见 docs/en/sql-reference/sql-functions/math-functions/ln.md在 FE 端函数目录中统一注册为ln、dlog1等名称见 FunctionSet.java。语法ln(arg) log(arg) dlog1(arg)三种写法均接受一个参数arg并返回该参数的自然对数。参数与返回值项目说明参数arg需要计算对数的数值仅支持 DOUBLE 数据类型返回值DOUBLE 数据类型边界行为当arg为负数或 0 时函数返回NULL注意由于arg仅支持 DOUBLE其他数值类型如 INT、BIGINT、DECIMAL在调用时会被隐式转换为 DOUBLE 后再参与计算。边界行为负数与 0 返回 NULL对数函数在数学上的定义域为正实数。当arg为负数或 0 时ln/dlog1/log不会抛出错误而是返回NULL。这一行为由 BE 端向量化引擎的输入检查机制保证在 be/src/exprs/math_functions.cpp 中ln通过宏DEFINE_MATH_UNARY_WITH_NON_POSITIVE_CHECK_FN_WITH_IMPL定义底层计算使用 C 标准库的std::logDEFINE_MATH_UNARY_WITH_NON_POSITIVE_CHECK_FN_WITH_IMPL(ln, TYPE_DOUBLE, TYPE_DOUBLE, std::log);该宏展开后见 math_functions.cpp 宏定义使用VectorizedInputCheckUnaryFunctionlnImpl, NonPositiveCheck即非正值检查NonPositiveCheck——当输入值v 0时直接输出 NULL而不会将-1、0等非法值送入std::log产生 NaN 或无穷大等非预期结果#define DEFINE_MATH_UNARY_WITH_NON_POSITIVE_CHECK_FN(NAME, TYPE, RESULT_TYPE) \ StatusOrColumnPtr MathFunctions::NAME(FunctionContext* context, const Columns columns) { \ using VectorizedUnaryFunction VectorizedInputCheckUnaryFunctionNAME##Impl, NonPositiveCheck; \ return VectorizedUnaryFunction::evaluateTYPE, RESULT_TYPE(VECTORIZED_FN_ARGS(0)); \ }从源码结构可以看出StarRocks 的数学函数通过不同的输入/输出检查模板区分行为检查策略宏名称适用函数示例非正值检查 0返回 NULLDEFINE_MATH_UNARY_WITH_NON_POSITIVE_CHECK_FNln、log10负值检查 0返回 NULLDEFINE_MATH_UNARY_WITH_NEGATIVE_CHECK_FNsqrt输出 NaN 检查DEFINE_MATH_UNARY_WITH_OUTPUT_NAN_CHECK_FNsin、cos、tan等输出 Inf/NaN 检查DEFINE_MATH_UNARY_WITH_OUTPUT_INF_NAN_CHECK_FNexp示例示例 1计算 3 的自然对数mysql select ln(3); -------------------- | ln(3) | -------------------- | 1.0986122886681098 | -------------------- 1 row in set (0.00 sec) mysql select dlog1(3); -------------------- | dlog1(3) | -------------------- | 1.0986122886681098 | -------------------- 1 row in set (0.00 sec) mysql select log(3); -------------------- | log(3) | -------------------- | 1.0986122886681098 | -------------------- 1 row in set (0.00 sec)三种写法输出完全一致均为1.0986122886681098验证了dlog1、log与ln的等价性。示例 2结合列数据进行计算-- 对表中数值列计算自然对数 SELECT ln(score) FROM exam_scores; -- 与聚合等表达式组合使用 SELECT ln(SUM(amount)) AS log_total FROM orders;与相关对数函数族的区别StarRocks 还提供其他底数的对数函数注意不要与单参数的自然对数混淆函数含义底层实现ln(arg)/dlog1(arg)/log(arg)自然对数底数estd::log(v)log(base, arg)任意底数的对数返回log(arg) / log(base)见下方说明log2(arg)以 2 为底的对数std::log(v) / std::log(2.0)log10(arg)/dlog10(arg)以 10 为底的对数std::log10(v)其中双参数版本log(base, arg)与单参数自然对数log(arg)在 StarRocks 中是不同的函数重载。双参数版本在 math_functions.cpp 中实现其合法性检查更为严格——当base 0、|base - 1| EPSILON底数近似为 1、v 0或v为 NaN 时返回 NULLDEFINE_BINARY_FUNCTION_WITH_IMPL(logProduceNullImpl, base, v) { return std::isnan(v) || base 0 || std::fabs(base - 1.0) MathFunctions::EPSILON || v 0.0; } DEFINE_BINARY_FUNCTION_WITH_IMPL(logImpl, base, v) { return (double)(std::log(v) / std::log(base)); }因此在实际使用时需注意log(x)单参数等价于ln(x)计算自然对数log(base, x)双参数计算以base为底、x的对数双参数log要求base大于 0 且不等于 1否则返回 NULL。从 SQL 到向量化执行的实现链路ln等函数在 StarRocks 中的完整执行链路可概括为FE 端注册函数名称在 FunctionSet.java 中以常量形式注册LN ln、DLOG1 dlog1、LOG log供 SQL 解析与优化器识别与重载匹配。BE 端向量化求值ln被编译为MathFunctions::ln通过VectorizedInputCheckUnaryFunction模板对整列数据批量执行输入检查 std::log计算充分利用 SIMD 与列式内存布局获得高性能。NULL 语义透传NonPositiveCheck保证负数和 0 输入在进入数学库前即被标记为 NULL符合 SQL 标准的三值逻辑TRUE/FALSE/NULL也解释了本文开头负数或 0 返回 NULL的文档行为。此外在 ODBC 标量函数兼容层中log、log10被列入 ODBC 数字标量函数映射表见 OdbcScalarFunctionCall.java意味着通过 ODBC 驱动接入的外部工具也可以直接使用这些对数函数无需改写 SQL。总结ln(arg)、dlog1(arg)、log(arg)三者等价均计算以e为底的自然对数参数仅支持 DOUBLE返回 DOUBLE当arg为负数或 0 时返回NULL而非报错或返回 NaN/InfBE 端通过std::log结合NonPositiveCheck输入校验实现保证列式批处理下的正确性与高性能与log(base, arg)、log2、log10组成完整的对数函数族可按需选用。如需查看完整的数学函数列表与更多对数用法可继续阅读仓库中的 数学函数文档目录 及 BE 端实现 math_functions.cpp 与声明 math_functions.h。【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

系统提示词泄露的工程读法:结构拆解与分层实践

系统提示词泄露的工程读法:结构拆解与分层实践

第一次看到system_prompts_leaks这类仓库刷屏的时候,我的第一反应不是兴奋,而是有点无奈——因为对做过线上大模型应用的人来说,系统提示词(system prompts)被扒出来这件事,早就不是什么新鲜事了&#xff0…

📅 2026/9/18 23:16:39
Claude Code Harness Codex Companion Review:让 AI 互审 AI 的分步教程

Claude Code Harness Codex Companion Review:让 AI 互审 AI 的分步教程

Claude Code Harness Codex Companion Review:让 AI 互审 AI 的分步教程 【免费下载链接】claude-code-harness Claude Code Dedicated Development Harness - Achieving High-Quality Development Through an Autonomous Plan→Work→Review Cycle 项目地址: htt…

📅 2026/9/18 23:16:39
mhc_post 算子代码级正确性证明:从 mHC 论文公式到 PyTorch 参考实现与 AscendC NPU Kernel 的全链路推导

mhc_post 算子代码级正确性证明:从 mHC 论文公式到 PyTorch 参考实现与 AscendC NPU Kernel 的全链路推导

mhc_post 算子代码级正确性证明:从 mHC 论文公式到 PyTorch 参考实现与 AscendC NPU Kernel 的全链路推导 【免费下载链接】ops-transformer 本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/c…

📅 2026/9/18 23:16:39
MORE NEWS

更多资讯

📰

Folia歌曲不可用怎么办:版权与地域限制下的替代方案

Folia歌曲不可用怎么办:版权与地域限制下的替代方案 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是一款专注于绚丽歌词动…

📰

Microduck RL轮滑训练:带被动轮的速度跟踪任务从0到1

Microduck RL轮滑训练:带被动轮的速度跟踪任务从0到1 【免费下载链接】microduck_rl RL training environments for Microduck (mjlab) 项目地址: https://gitcode.com/GitHub_Trending/mi/microduck_rl Microduck RL 是基于 mjlab(MuJoCo Warp …

📰

SolidWorks 2020安装与稳定部署实战指南

1. 为什么SolidWorks 2020至今仍是机械设计一线的“稳态选择”我在长三角一家做非标自动化设备的公司干了八年,从助理工程师做到技术主管,经手过SolidWorks 2014、2016、2018、2020、2022五个大版本。去年客户临时要求复现一套十年前的老图纸&#xff0c…

📰

OpenCloud 内置日志库 Logrus 1.10.2 变更日志深度解析:结构化日志的演进、性能优化与集成实践

OpenCloud 内置日志库 Logrus 1.10.2 变更日志深度解析:结构化日志的演进、性能优化与集成实践 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目…

📰

postgres_lsp 规则详解:preferBigInt——用 BIGINT 规避整数溢出与迁移风险

postgres_lsp 规则详解:preferBigInt——用 BIGINT 规避整数溢出与迁移风险 【免费下载链接】postgres_lsp A Language Server for Postgres 项目地址: https://gitcode.com/GitHub_Trending/po/postgres_lsp 导读 preferBigInt 是 postgres_lsp 项目中 lin…

📰

Unity实时画面采集与RTMP推流实战:RenderTexture+FFmpeg方案详解

搞过Unity实时画面采集的人应该都有同感:引擎自带的Camera输出到屏幕容易,但一旦涉及“把画面送到外部去”,比如录制成文件、推成直播流,能查到的完整资料就少得可怜。Unity官方对录屏、推流这块基本处于“你自己看着办”的状态&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬