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
-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