资讯动态

StarRocks inet_aton 函数详解:IPv4 字符串转 BIGINT 大端数值

发布时间:2026/9/19 10:04:40 来源:尧图企业网站定制
StarRocks inet_aton 函数详解IPv4 字符串转 BIGINT 大端数值【免费下载链接】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/starrocksinet_aton是 StarRocks 提供的字符串类函数用于将A.B.C.D格式的 IPv4 地址字符串转换为对应的大端序big endianBIGINT 数值是日志分析、网络审计、IP 归属地关联等场景中把 IP 文本转为可排序、可比较数值的常用工具。本文以 inet_aton.md 为骨架结合 be/src/exprs/inet_aton.cpp、be/src/common/format_ip.h 等源码实现完整讲解其语法、返回语义、边界行为与底层解析原理并给出可直接运行的 SQL 示例。函数概述inet_atonINET Address to Number接收一个包含 IPv4 地址的字符串格式为A.B.C.D返回该地址对应的大端序整数类型为BIGINT。大端序的含义是四个字节段从高位到低位排列即数值等于A * 2^24 B * 2^16 C * 2^8 D。因此0.0.0.0对应最小值0255.255.255.255对应最大值4294967295即2^32 - 1。这一语义与 MySQL 的INET_ATON()保持一致便于用户在熟悉 SQL 方言的基础上平滑迁移。语法说明BIGINT inet_aton(VARCHAR ipv4)参数说明项目说明参数类型VARCHAR内容须为A.B.C.D形式的点分十进制 IPv4 字符串返回类型BIGINT64 位有符号整数实际取值落在0~4294967295区间内输入为 NULL返回 NULL输入非法返回 NULL详见下文边界行为从函数元数据注册信息gensrc/script/functions.py可以看到该函数在 StarRocks 中以向量化形式注册入参为VARCHAR返回BIGINT底层实现绑定到StringFunctions::inet_aton[30132, inet_aton, True, False, BIGINT, [VARCHAR], StringFunctions::inet_aton],使用示例以下示例均可在 StarRocks 客户端如mysql命令行中直接执行。单个地址转换mysql select inet_aton(192.168.1.1); -------------------------------------- | inet_aton(192.168.1.1) | -------------------------------------- | 3232235777 | --------------------------------------验证一下换算关系192 * 2^24 168 * 2^16 1 * 2^8 1 3221225472 11010048 256 1 3232235777与结果完全一致。批量转换与非法值处理mysql select stringIp, inet_aton(stringIp) from ipv4; --------------------------------------------- | stringIp | inet_aton(stringIp) | --------------------------------------------- | 0.0.0.0 | 0 | | 255.255.255.255 | 4294967295 | | invalid | NULL | ---------------------------------------------可以看到合法的地址被正确转为数值而无法解析的字符串invalid返回 NULL不会中断查询。边界行为与解析规则通过阅读底层解析函数 be/src/common/format_ip.h 中的parse_ipv4可以确认以下严格校验规则这些规则决定了哪些输入合法、哪些返回 NULL字符串长度必须在 7 ~ 15 个字符之间最短的合法地址是0.0.0.07 字符最长的是255.255.255.25515 字符长度越界直接判定非法每个字节段必须是纯数字0-9且位数不超过 3 位非数字字符如abc.def.ghi.jkl无法通过is_numeric_ascii检查每个字节段的值不能超过 255999.999.999.999这类输入会被拒绝段与段之间必须由点.分隔在解析前三个字节段后如果后续字符不是.则判定非法必须是完整的四段地址如192.168.1仅三段、192.168.1.1.1五段均不合法第一段之前不允许出现前导点或其他字符解析器从字符串起始位置开始逐字符消费任何残留字符都会导致失败。对应地在 be/src/exprs/inet_aton.cpp 的向量化实现中输入为 NULL 的行直接追加 NULL对非 NULL 行调用try_parse_ipv4解析成功则追加转换后的数值失败则追加 NULLStatusOrColumnPtr StringFunctions::inet_aton(FunctionContext* context, const Columns columns) { RETURN_IF_COLUMNS_ONLY_NULL(columns); auto str_viewer ColumnViewerTYPE_VARCHAR(columns[0]); auto size columns[0]-size(); ColumnBuilderTYPE_BIGINT result(size); for (int row 0; row size; row) { if (str_viewer.is_null(row)) { result.append_null(); continue; } auto str_value str_viewer.value(row); int64_t parsed_result; if (try_parse_ipv4(str_value.get_data(), str_value.get_size(), parsed_result)) { result.append(parsed_result); } else { result.append_null(); } } return result.build(ColumnHelper::is_all_const(columns)); }从实现细节可以看出两点设计逐行解析 向量化执行函数按列处理ColumnViewer/ColumnBuilder并支持常量列折叠优化ColumnHelper::is_all_const在海量日志行上执行时仍能保持向量化引擎的高吞吐位运算组装数值parse_ipv4内部使用result | value offset按 8 位一组移位组装即把四个字节段直接拼接成 32 位整数天然符合大端序语义无需浮点或除法运算。源码测试验证StarRocks 在 be/test/exprs/string_fn_test.cpp 中为该函数提供了两组并行测试用例与本文所述规则一一对应inetAtonValidIPv4Test验证合法输入。192.168.1.1→32322357770.0.0.0→0255.255.255.255→4294967295inetAtonInvalidIPv4Test验证非法输入全部返回 NULL覆盖了999.999.999.999段值越界、abc.def.ghi.jkl非数字、192.168.1.1.1五段、192.168.1三段、空字符串五类典型错误输入。这两组用例直接印证了文档中“非法输入返回 NULL”的行为描述也是做数据质量校验时的权威参考。实践建议与应用场景IP 排序与范围比较将 IPv4 转为整数后A.B.C.D字典序与数值序不再一致例如10.0.0.1字典序小于9.0.0.1而数值化后可以直接用、、BETWEEN做正确的 IP 范围过滤适合访问日志的网段统计配合inet_ntoa双向转换数值化存储比字符串占用更小、索引更高效需要展示时再转回字符串降低存储成本注意 NULL 语义由于非法 IP 返回 NULL在WHERE inet_aton(ip) x等过滤条件下非法行会被自然排除无需额外清洗若需保留行可用COALESCE或IFNULL提供默认值。keywordINET_ATON【免费下载链接】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 小时内与您沟通定制方案

免费获取报价