[ 
https://issues.apache.org/jira/browse/SPARK-57926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18093368#comment-18093368
 ] 

jiangxintong commented on SPARK-57926:
--------------------------------------

I'm working on this. Will submit a PR implementing inet_aton, inet_ntoa, and 
try_inet_aton with ANSI mode semantics.

> Add IPv4 address functions (inet_aton, inet_ntoa, try_inet_aton)
> ----------------------------------------------------------------
>
>                 Key: SPARK-57926
>                 URL: https://issues.apache.org/jira/browse/SPARK-57926
>             Project: Spark
>          Issue Type: Improvement
>          Components: SQL
>    Affects Versions: 4.2.0
>            Reporter: jiangxintong
>            Priority: Major
>
> h2. Problem
> Spark SQL has no built-in functions for IP address manipulation. This is a 
> common need in network log analysis, security auditing, and IP geolocation 
> scenarios.
> Other databases have this capability:
>  * MySQL: INET_ATON() / INET_NTOA()
>  * ClickHouse: IPv4StringToNum() / IPv4NumToString()
>  * Doris: inet_aton() / inet_ntoa()
>  * Databend: inet_aton() / inet_ntoa() / try_inet_aton()
>  * VoltDB: INET_ATON() / INET_NTOA()
>  * SingleStore: INET_ATON() / INET_NTOA()
> h2. Proposed Functions
> ||Function||Signature||Description||
> |inet_aton|inet_aton(STRING) -> LONG|Convert IPv4 address string to 32-bit 
> integer. Throws on invalid input when ANSI mode is on; returns null when ANSI 
> mode is off.|
> |inet_ntoa|inet_ntoa(LONG) -> STRING|Convert 32-bit integer to IPv4 address 
> string. Throws on out-of-range input ([0, 2^32-1]) when ANSI mode is on; 
> returns null when ANSI mode is off.|
> |try_inet_aton|try_inet_aton(STRING) -> LONG|Same as inet_aton, but always 
> returns null on invalid input regardless of ANSI mode.|
> h2. Examples
> {code:sql}
> > SELECT inet_aton('192.168.1.1');
>  3232235777
> > SELECT inet_ntoa(3232235777);
>  192.168.1.1
> > SELECT try_inet_aton('not_an_ip');
>  null
> {code}
> h2. ANSI Semantics
> inet_aton and inet_ntoa follow Spark's ANSI mode convention:
>  * ANSI mode ON: throws QueryExecutionErrors on invalid/out-of-range input
>  * ANSI mode OFF: returns null on invalid/out-of-range input
> try_inet_aton always returns null on error, following the try_* family 
> pattern (25 existing try_ functions in the registry).
> This is consistent with cast/to_number/to_timestamp behavior.
> h2. Notes
>  * IPv4 only (32-bit). IPv6 (128-bit) does not fit in LONG and requires 
> BINARY/STRING representation — deferred to a separate issue.
>  * Naming follows MySQL convention (inet_aton/inet_ntoa).
>  * Return type is LONG (not INT) because 3232235777 > 2^31-1.
> h2. Why Built-in Instead of UDF
> IP address functions are:
>  * Standard in major databases (MySQL, ClickHouse, Doris, Databend, VoltDB, 
> SingleStore)
>  * Performance-critical for network log analysis (millions of rows)
>  * Used in WHERE clauses (benefit from whole-stage codegen)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to