AQL 조회의 비트 연산자
비트 연산자를 사용하여 IP 주소를 포함하는 AQL 조회의 필터링 기능 및 성능을 향상시킵니다. 특정 결과를 리턴하려면 IP 주소 옥텟 레벨에서 필터를 지정하십시오.
IP 주소의 옥텟을 필터링하면 IP 주소 검색 기준을 세분화할 수 있습니다.
예를 들어, 소스 IP 주소의 마지막 옥텟이 x.y.z.100과 같이 100으로 끝나는 특정 디바이스 유형을 검색하려면 다음 조회를 사용할 수 있습니다.
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into <cursor_name>
WHERE (long_ip & 0x000000ff)=0x00000064
GROUP BY long_ip
ORDER BY long_ip
예를 들어, <sourceip>는 정수로 리턴됩니다. 정수는 비트 AND 연산자에 사용됩니다. 소스 IP 주소의 마지막 옥텟 위치에 있는 16진값 <ff> 는 해당 IP 주소 옥텟 위치 0x000000 <IP 주소 옥텟 16진수값> 에 필터를 지정합니다. 이 경우, 16진값 <64> 는 IP 주소에서 10진수값 100으로 대체됩니다.
결과는 100으로 끝나는 모든 소스 IP 주소입니다. 모든 IP 주소의 마지막 옥텟이 100이면, 결과는 회사의 특정 디바이스 유형에 대한 목록일 수 있습니다.
다음 예제는 비트 연산자로 검색할 때 사용할 시나리오에 대해 설명합니다.
비트 AND(&) 예제
10.xxx.xxx.xxx와 일치하는 모든 IP 주소 리턴
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t1
WHERE (long_ip & 0xff000000)=0x0a000000
GROUP BY long_ip
LIMIT 50
xxx.100.xxx.xxx와 일치하는 모든 IP 주소 리턴
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t2
WHERE (long_ip & 0x00ff0000)=0x0064000
GROUP BY long_ip
ORDER BY long_ip
xxx.xxx.220.xxx와 일치하는 모든 IP 주소 리턴
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t3
WHERE (long_ip & 0x0000ff00)=0x000dc00
GROUP BY long_ip
ORDER BY long_ip
xxx.xxx.xxx.1과 일치하는 모든 IP 주소 리턴
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events
WHERE (long_ip & 0x000000ff)=0x0000001
GROUP BY long_ip
ORDER BY long_ip
비트 NOT(~) 예제
다음 예제를 사용하여 지정된 2진 패턴에서 각 1비트 값을 0비트 값으로 변환하거나 각 0비트 값을 1비트 값으로 변환하십시오.
SELECT ~123456789
FROM events
LIMIT 1
123456790 리턴
SELECT ~0
FROM events
LIMIT 1
-1 리턴
SELECT ~2147483647
FROM events
LIMIT 1
- 2147483648 리턴
비트 OR 예제
다음 예제를 사용하여 두 비트를 비교하십시오. 두 비트가 "1"의 값을 갖는 경우, 쿼리는 1을 리턴합니다. 두 비트가 "0" 의 값을 갖는 경우 쿼리는 0을 리턴합니다.
SELECT destinationip,
LONG(destinationip),
sourceip,
LONG(sourceip)AS source_ip,
LONG(destinationip)|source_ip
FROM events
WHERE destinationip='127.0.0.1'
LIMIT 1
SELECT destinationip,
LONG(destinationip),
sourceip,
~LONG(sourceip)AS not_source_ip,
LONG(destinationip)|not_source_ip
FROM events
WHERE destinationip='127.0.0.1'
LIMIT 1
SELECT-2147483648|2147483647
FROM events
LIMIT 1
-1 리턴
비트 XOR 예제
다음 예들은 2-비트 패턴들, 또는 각 위치로부터의 한 쌍의 비트들을 취하고 이들을 1 또는 0으로 변환하는데 사용될 수 있습니다. 비트가 다른 경우, 그 위치의 결과는 1입니다. 비트가 동일한 경우 해당 위치의 결과는 0입니다.
SELECT 2147483647#2147483647
FROM events
LIMIT 1
0 리턴
SELECT 12345#6789
AS A,
(~12345 & 6789)|(12345 & ~6789)
AS B
FROM events
LIMIT 1
10940, 10940 리턴
ShiftLeft 예제
교대할 위치의 수는 교대 연산자에 두 번째 인수로 제공됩니다.
SELECT -1<<1
AS A
FROMS events
LIMIT 1
-2 리턴
SELECT 16<<1
AS A
FROMS events
LIMIT 1
128 리턴
ShiftRight 예제
연산자 >>는 가장 왼쪽 비트인 부호 비트를 사용하여 교대 후 후미 위치를 채웁니다. 숫자가 음수이면 1이 필터로 사용되고 양수이면 0이 필터로 사용됩니다.
SELECT 16>>3
AS A
FROMS events
LIMIT 1
2 리턴
SELECT -32768>>15
AS A
FROMS events
LIMIT 1
ShiftRightUnsigned 예제
숫자의 부호와 상관없이 항상 0을 채웁니다.
SELECT -1>>>33
FROM events
LIMIT 1
2147483647 리턴
2의 거듭제곱으로 나눕니다.
SELECT (20+44)>>>1 A,
(20+44)>>>2 B,
(20+44)>>>3 C,
(20+44)>>>4 D,
(20+44)>>>5 E
FROM events
LIMIT 1