资讯动态

StarRocks SHOW FUNCTIONS 详解:语法、执行原理与 UDF 元数据排查实战

发布时间:2026/9/19 3:27:59 来源:尧图企业网站定制
StarRocks SHOW FUNCTIONS 详解语法、执行原理与 UDF 元数据排查实战【免费下载链接】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导读SHOW FUNCTIONS是 StarRocks 中查看数据库下自定义函数UDF/UDAF与系统内置函数清单的核心管理命令。本文以 SHOW_FUNCTIONS.md 文档为骨架完整讲解其语法、参数含义与输出字段并结合仓库源码FE 端的 ANTLR 语法、AST 节点、分析器与执行器深入剖析命令从解析到结果返回的全过程帮助读者在自定义函数开发、权限排查与元数据核对场景下熟练使用该命令。一、命令概览与适用场景SHOW FUNCTIONS用于查询指定数据库下的全部自定义函数或内置函数。若不指定数据库则默认使用当前连接的数据库若当前未选中任何数据库FE 会抛出No database selected类错误见下文源码分析。该命令的典型应用场景包括UDF 开发验证创建标量 UDF 或聚合 UDAF 后确认函数是否已成功注册到目标数据库元数据核对查看函数的签名参数类型、返回类型、函数类型及 Properties如object_file、symbol、md5内置函数检索不记得某个内置函数的确切名称时用LIKE模式模糊匹配快速定位如year%权限排查结合FULL关键字观察对象文件地址是否被隐藏判断当前用户对函数是否拥有访问权限。二、语法与参数说明2.1 完整语法SHOW [FULL] [BUILTIN] FUNCTIONS [IN|FROM db] [LIKE function_pattern]需要说明的是当前仓库的 ANTLR 语法StarRocks.g4实际支持SHOW FULL? (BUILTIN|GLOBAL)? FUNCTIONS ((FROM | IN) db)? (LIKE pattern)?即GLOBAL关键字同样合法用于查询全局函数Global FunctionshowFunctionsStatement : SHOW FULL? (BUILTIN|GLOBAL)? FUNCTIONS ((FROM | IN) dbqualifiedName)? (LIKE patternstring)? showPredicateClauses ;2.2 参数含义参数说明FULL显示函数的完整信息包括 Signature、Return Type、Function Type、Intermediate Type 与 Properties不加该关键字时仅输出函数名一列BUILTIN仅显示系统提供的内置函数不加时默认显示指定数据库下的自定义函数GLOBAL仅显示全局函数Global Function即全局级注册、跨数据库可见的 UDFdb要查询的数据库名称可用IN db或FROM db两种写法省略时默认使用当前数据库function_pattern用于过滤函数名的通配模式支持%任意多个字符与_单个字符需与LIKE搭配使用2.3 关于WHERE过滤的限制文档与测试均强调该命令只支持LIKE过滤不支持WHERE等其余谓词。仓库中的 ShowFunctionsStmtTest.java 专门验证了这一点String showSQL SHOW FULL BUILTIN FUNCTIONS FROM testDb where a 1; // 抛出 AnalysisException消息为 // Only support like function_pattern syntax.与此同时ShowStmtAnalyzer.java 中若检测到exprWHERE条件表达式非空同样会报ERR_UNSUPPORTED_SQL_PATTERN语义异常。因此书写查询时应统一使用LIKE进行函数名过滤。三、输出字段详解3.1 不带 FULL仅函数名SHOW FUNCTIONS IN testDb; -- 输出列Function Name对应 Function.java 中isVerbosefalse的分支仅返回functionName()一列。3.2 带 FULL完整元数据SHOW FULL FUNCTIONS IN testDb;此时输出五列参考 ShowFunctionsIsolationTest.java 注释的列序定义列名含义Signature函数签名格式为函数名(参数类型,...)如my_add(INT,INT)Return Type函数返回类型如INT、BIGINTFunction Type函数类别Scalar标量函数、Aggregate聚合函数、SQLSQL 函数或Table表函数Intermediate Type聚合函数的中间类型Intermediate Type非聚合函数或未指定时为NULLPropertiesJSON 格式的函数属性见下文 3.3上述字段的拼接逻辑位于 Function.javaScalarFunction输出ScalarNULL中间类型AggregateFunction输出Aggregate及其getIntermediateType()若为空则输出NULL其余分别按SQL、Table归类。3.3 Properties 字段解读Properties 是排查 UDF 问题时信息量最大的字段常见的键包括object_fileUDF 动态库.so或 JAR 文件的存储地址例如http://host:port/libudfsample.sosymbolC UDF 中函数的符号名mangled name如_ZN9starrocks_udf6AddUdfEPNS_15FunctionContextERKNS_6IntValES4_Java UDF 中则为类名/方法名md5对象文件的 MD5 校验值用于一致性校验init_fn/update_fn/merge_fn/finalize_fn聚合函数UDAF的四阶段回调符号isolationshared表示共享隔离模式的函数isolated表示独立隔离模式详见 ShowFunctionsIsolationTest.java。以文档示例为证标量 UDF 与聚合 UDAF 的 Properties 差异一目了然Signature: my_add(INT,INT) Return Type: INT Function Type: Scalar Intermediate Type: NULL Properties: {symbol:_ZN9starrocks_udf6AddUdfEPNS_15FunctionContextERKNS_6IntValES4_, object_file:http://host:port/libudfsample.so, md5:cfe7a362d10f3aaf6c49974ee0f1f878} Signature: my_count(BIGINT) Return Type: BIGINT Function Type: Aggregate Intermediate Type: NULL Properties: {object_file:http://host:port/libudasample.so, finalize_fn:_ZN9starrocks_udf13CountFinalizeEPNS_15FunctionContextERKNS_9BigIntValE, init_fn:_ZN9starrocks_udf9CountInitEPNS_15FunctionContextEPNS_9BigIntValE, merge_fn:_ZN9starrocks_udf10CountMergeEPNS_15FunctionContextERKNS_9BigIntValEPS2_, md5:37d185f80f95569e2676da3d5b5b9d2f, update_fn:_ZN9starrocks_udf11CountUpdateEPNS_15FunctionContextERKNS_6IntValEPNS_9BigIntValE}可以看到聚合 UDAF 比标量 UDF 多出init_fn、update_fn、merge_fn、finalize_fn四个阶段函数与聚合执行模型一一对应。四、运行示例4.1 查看某数据库下所有自定义函数完整信息mysql SHOW FULL FUNCTIONS IN testDb\G *************************** 1. row *************************** Signature: my_add(INT,INT) Return Type: INT Function Type: Scalar Intermediate Type: NULL Properties: {symbol:_ZN9starrocks_udf6AddUdfEPNS_15FunctionContextERKNS_6IntValES4_,object_file:http://host:port/libudfsample.so,md5:cfe7a362d10f3aaf6c49974ee0f1f878} *************************** 2. row *************************** Signature: my_count(BIGINT) Return Type: BIGINT Function Type: Aggregate Intermediate Type: NULL Properties: {object_file:http://host:port/libudasample.so,finalize_fn:_ZN9starrocks_udf13CountFinalizeEPNS_15FunctionContextERKNS_9BigIntValE,init_fn:_ZN9starrocks_udf9CountInitEPNS_15FunctionContextEPNS_9BigIntValE,merge_fn:_ZN9starrocks_udf10CountMergeEPNS_15FunctionContextERKNS_9BigIntValEPS2_,md5:37d185f80f95569e2676da3d5b5b9d2f,update_fn:_ZN9starrocks_udf11CountUpdateEPNS_15FunctionContextERKNS_6IntValEPNS_9BigIntValE} 2 rows in set (0.00 sec)注\G为 mysql 客户端将行按纵向输出的选项便于阅读列较多的结果非 SQL 语法本身。4.2 模糊匹配内置函数mysql SHOW BUILTIN FUNCTIONS IN testDb LIKE year%; --------------- | Function Name | --------------- | year | | years_add | | years_diff | | years_sub | --------------- 2 rows in set (0.00 sec)LIKE模式在 AST 层被转换为正则进行匹配转换规则见 ShowFunctionsStmt.javapublic boolean like(String str) { str str.toLowerCase(); return str.matches(wild.replace(., \\.).replace(?, .).replace(%, .*).toLowerCase()); }即%转换为.*匹配任意多字符、?转换为.匹配单个字符、.被转义为字面量并统一忽略大小写。五、执行原理从 SQL 到结果集理解命令背后的完整链路有助于在函数元数据异常时快速定位问题。以 FE 端源码为线索SHOW FUNCTIONS的处理分为以下四个环节5.1 语法解析ParserANTLR 语法文件 StarRocks.g4 定义showFunctionsStatement允许FULL、BUILTIN|GLOBAL、IN|FROM db、LIKE pattern的自由组合。解析后生成 AST 节点。5.2 语义分析AnalyzerAST 节点为 ShowFunctionsStmt.java其字段与语法一一对应isVerboseFULL、isBuiltinBUILTIN、isGlobalGLOBAL、dbName、wildLIKE 模式。分析阶段ShowStmtAnalyzer.java的核心逻辑是若既不是GLOBAL也不是BUILTIN则必须确定目标数据库优先使用显式指定的dbName否则取当前连接数据库context.getDatabase()两者皆为空时报告ERR_NO_DB_ERROR若携带WHERE表达式expr ! null直接报不支持异常。5.3 权限校验Authorizer权限校验位于 AuthorizerStmtVisitor.java 的visitShowFunctionsStatement。同时执行器在输出阶段对每个函数做细粒度的可见性控制见 5.4保证未授权用户看不到函数条目与敏感的对象文件地址。5.4 执行与结果集构造Executor核心实现在 ShowExecutor.java 的visitShowFunctionsStatement数据源分流BUILTIN→ 取context.getGlobalStateMgr().getBuiltinFunctions()系统内置函数GLOBAL→ 取getGlobalFunctionMgr().getFunctions()全局函数其余 → 按dbName定位Database并调用db.getFunctions()库级自定义函数LIKE 过滤statement.getWild() null || statement.like(function.functionName())命中才输出权限裁剪当用户无权查看完整地址时canShowFullAddress为假逐函数执行Authorizer.checkAnyActionOnFunction(...)无权限的函数直接continue跳过且隐藏地址行构造与排序调用function.getInfo(isVerbose, hideLocation)构造行即 3.2 节的五列/一列输出最后按第一列升序排序OrderByPair(0, false)。5.5 一个来自测试的佐证ShowFunctionsIsolationTest.java 在最小 StarRocks 集群UtFrameUtils.createMinStarRocksCluster()中创建了shared_udf、isolated_udf、shared_agg、isolated_agg四类函数随后通过SHOW FULL FUNCTIONS验证 Properties 中isolation字段是否正确透出shared或isolated并断言 verbose 布局为[signature, returnType, functionType, intermediateType, properties]五列。这既验证了本文 3.2 节的列序也说明SHOW FULL FUNCTIONS是检查 UDF 隔离模式等高级属性的直接手段。六、常见问题与排错指引现象可能原因处理方式提示未选择数据库未指定db且当前连接未USE任何数据库先执行USE db_name或在命令中显式加IN db_name使用WHERE过滤报错该命令仅支持LIKE改为LIKE pattern形式SHOW FUNCTIONS结果为空库下确实无自定义函数或当前用户对该库函数无权限条目被裁剪换有权限账号验证确认函数确已通过CREATE FUNCTION创建FULL输出中object_file被隐藏当前用户无查看函数完整地址的权限以具备相应权限的用户执行或检查函数级授权想查内置函数却只看到自定义函数忘记加BUILTIN使用SHOW BUILTIN FUNCTIONS ...想跨库查看全局函数库级查询看不到全局函数使用SHOW GLOBAL FUNCTIONS七、总结SHOW FUNCTIONS是 StarRocks 管理 UDF/UDAF 与内置函数的一站式查询入口支持FULL、BUILTIN、GLOBAL、IN|FROM db、LIKE五个维度组合过滤非FULL模式仅返回函数名FULL模式返回 Signature / Return Type / Function Type / Intermediate Type / Properties 五列其中 Properties 携带object_file、symbol、md5以及聚合函数四阶段回调符号等关键调试信息命令只支持LIKE过滤不支持WHERE未指定库名时默认使用当前数据库从源码看命令依次经过 StarRocks.g4 语法解析 → ShowFunctionsStmt AST → ShowStmtAnalyzer 语义分析 → ShowExecutor 执行与权限裁剪的完整链路测试用例见 ShowFunctionsStmtTest.java 与 ShowFunctionsIsolationTest.java。掌握该命令后读者可以高效完成 UDF 注册结果核对、函数元数据与属性审计、内置函数名称检索等日常运维与开发工作。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价