IP 주소 함수
IP 주소 함수 (IP Address Functions)
Pinot은 IP 주소와 서브넷을 다루는 함수들을 제공해요. 이 함수들은 IPv4와 IPv6 주소를 모두 지원하고, 서브넷 접두사에 CIDR 표기법(예: 192.168.0.0/16, 2001:db8::/32)을 사용해요.
출처: 문서
본문
Pinot은 IP 주소와 서브넷을 다루는 함수들을 제공해요. 이 함수들은 IPv4와 IPv6 주소를 모두 지원하고, 서브넷 접두사에 CIDR 표기법(예: 192.168.0.0/16, 2001:db8::/32)을 사용해요.
isSubnetOf
isSubnetOf(ipPrefix, ipAddress)
주어진 IP 주소가 지정한 서브넷 접두사에 속하면 true를 반환해요. 첫 번째 인자는 CIDR 접두사(예: '192.168.1.0/24')여야 하고, 두 번째 인자는 접두사가 없는 일반 IP 주소여야 해요.
SELECT isSubnetOf('192.168.1.0/24', clientIp) AS is_internal
FROM accessLog
WHERE isSubnetOf('10.0.0.0/8', clientIp)
-- Filters rows where clientIp is in the 10.0.0.0/8 private range
ipPrefix
ipPrefix(ipAddress, prefixBits)
주어진 IP 주소와 비트 단위 접두사 길이에 대한 CIDR 접두사를 반환해요. IP 주소에는 이미 접두사가 포함되어 있으면 안 돼요. 접두사 길이는 IPv4의 경우 032, IPv6의 경우 0128 사이여야 해요.
SELECT ipPrefix(clientIp, 24) AS subnet
FROM accessLog
LIMIT 5
-- For clientIp='192.168.1.100', returns '192.168.1.0/24'
ipSubnetMin
ipSubnetMin(ipPrefix)
주어진 서브넷에서 가장 낮은(첫 번째) IP 주소를 반환해요.
SELECT ipSubnetMin('192.168.1.0/24') AS range_start
FROM myTable
LIMIT 1
-- Returns '192.168.1.0'
ipSubnetMax
ipSubnetMax(ipPrefix)
주어진 서브넷에서 가장 높은(마지막) IP 주소를 반환해요.
SELECT ipSubnetMax('192.168.1.0/24') AS range_end
FROM myTable
LIMIT 1
-- Returns '192.168.1.255'
isIPv4String
isIPv4String(ipString)
입력이 CIDR 접두사가 없는 유효한 IPv4 주소 문자열이면 true를 반환해요.
SELECT isIPv4String('192.168.1.1') AS valid_v4
-- Returns true
isIPv6String
isIPv6String(ipString)
입력이 CIDR 접두사가 없는 유효한 IPv6 주소 문자열이면 true를 반환해요.
SELECT isIPv6String('2001:db8::1') AS valid_v6
-- Returns true
isPrivateIp / is_private_ip
isPrivateIp(ipString)
입력이 CIDR 접두사가 없는 일반 IPv4 또는 IPv6 주소이고 다음 범위 중 하나에 해당하면 true를 반환해요:
- RFC 1918 IPv4:
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 - IPv4 루프백:
127.0.0.0/8 - IPv4 링크 로컬:
169.254.0.0/16 - IPv6 루프백:
::1 - IPv6 링크 로컬:
fe80::/10 - IPv6 ULA:
fc00::/7
SELECT isPrivateIp(clientIp) AS is_private
FROM accessLog
WHERE isPrivateIp(clientIp)
LIMIT 5
-- Returns true for addresses such as '10.0.0.1', '127.0.0.1', 'fe80::1', and 'fd00::1'
ipFamily / ip_family
ipFamily(ipString)
일반 IP 주소 문자열의 주소 계열을 반환해요: IPv4는 4, IPv6는 6.
SELECT ipFamily('2001:db8::1') AS ip_version
-- Returns 6
ipv4ToLong
ipv4ToLong(ipString)
IPv4 주소 문자열을 부호 없는 32비트 정수 표현으로 LONG으로 변환해요.
SELECT ipv4ToLong('192.168.1.1') AS ip_as_long
-- Returns 3232235777
longToIpv4
longToIpv4(value)
IPv4 범위의 부호 없는 32비트 LONG 값을 점으로 구분된 10진수 IPv4 텍스트로 다시 변환해요.
SELECT longToIpv4(3232235777) AS ip_text
-- Returns '192.168.1.1'
ipv6ToBytes
ipv6ToBytes(ipString)
IPv6 주소 문자열을 16바이트 BYTES 값으로 변환해요.
SELECT ipv6ToBytes('2001:db8::1') AS ip_bytes
FROM myTable
LIMIT 1
bytesToIpv6
bytesToIpv6(bytes)
16바이트 IPv6 BYTES 값을 표준 IPv6 텍스트로 변환해요.
SELECT bytesToIpv6(ipv6ToBytes('2001:db8::1')) AS ip_text
-- Returns '2001:db8::1'
ipv4ToIpv6
ipv4ToIpv6(ipString)
IPv4 주소를 IPv4-매핑된 IPv6 표현으로 매핑해요.
SELECT ipv4ToIpv6('192.168.1.1') AS mapped_ip
-- Returns '::ffff:c0a8:101'
ipMaskLen / ip_mask_len
ipMaskLen(cidr)
CIDR 문자열에서 접두사 길이를 반환해요.
SELECT ipMaskLen('192.168.1.0/24') AS prefix_len
-- Returns 24
ipNetmask / ip_netmask
ipNetmask(cidr)
CIDR 접두사의 네트워크 마스크를 IP 주소 문자열로 반환해요.
SELECT ipNetmask('192.168.1.0/24') AS netmask
-- Returns '255.255.255.0'
ipHostmask / ip_hostmask
ipHostmask(cidr)
CIDR 접두사의 호스트 마스크를 IP 주소 문자열로 반환해요.
SELECT ipHostmask('192.168.1.0/24') AS hostmask
-- Returns '0.0.0.255'
ipv4CIDRToRange
ipv4CIDRToRange(cidr)
CIDR 범위가 포함하는 최소 및 최대 IPv4 주소가 담긴 두 요소 STRING[]을 반환해요.
SELECT ipv4CIDRToRange('192.168.1.0/24') AS ip_range
FROM myTable
LIMIT 1
-- Returns ['192.168.1.0', '192.168.1.255']