Opérateurs Bitwise dans les requêtes AQL
Améliorer la capacité de filtrage et les performances de vos requêtes AQL qui incluent des adresses IP en utilisant des opérateurs au niveau du bit. Spécifiez des filtres au niveau de l'octet d'adresse IP pour renvoyer des résultats spécifiques.
En filtrant les octets dans une adresse IP, vous pouvez affiner les critères de recherche d'adresse IP.
Par exemple, pour rechercher des types d'unité spécifiques dont le dernier octet d'une adresse IP source se termine par 100, par exemple x.y.z.100, vous pouvez utiliser la requête suivante:
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
Dans l'exemple, le <sourceip> est renvoyé sous la forme d'un entier. L'entier est utilisé par l'opérateur bitwise AND. La valeur hexadécimale <ff> dans la position du dernier octet de l'adresse IP source spécifie un filtre dans la position de l'octet de l'adresse IP correspondante de 0x000000 <valeur hexadécimale de l'octet de l'adresse IP>. Dans ce cas, la valeur hexadécimale <64> est remplacée par la valeur décimale 100 dans l'adresse IP.
Le résultat est toutes les adresses IP source qui se terminent par 100. Les résultats peuvent être une liste pour un type d'unité spécifique pour une société, si le dernier octet de toutes les adresses IP est 100.
Les exemples suivants présentent les scénarios à utiliser lorsque vous effectuez une recherche avec des opérateurs bitwise.
Exemples AND (&) au niveau du bit
Renvoie toutes les adresses IP correspondant à 10.xxx.xxx.xxx
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t1
WHERE (long_ip & 0xff000000)=0x0a000000
GROUP BY long_ip
LIMIT 50
Renvoie toutes les adresses IP correspondant à xxx.100.xxx.xxx
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t2
WHERE (long_ip & 0x00ff0000)=0x0064000
GROUP BY long_ip
ORDER BY long_ip
Renvoie toutes les adresses IP correspondant à xxx.xxx.220.xxx
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events into t3
WHERE (long_ip & 0x0000ff00)=0x000dc00
GROUP BY long_ip
ORDER BY long_ip
Renvoie toutes les adresses IP correspondant à xxx.xxx.xxx.1
SELECT LONG(sourceip)AS long_ip,
sourceip
FROM events
WHERE (long_ip & 0x000000ff)=0x0000001
GROUP BY long_ip
ORDER BY long_ip
Exemples NOT (~) au niveau du bit
Utilisez les exemples suivants pour convertir chaque valeur 1 bit en valeur 0 bit, ou chaque valeur 0 bit à une valeur 1 bit, dans un modèle binaire donné.
SELECT ~123456789
FROM events
LIMIT 1
Renvoie 123456790
SELECT ~0
FROM events
LIMIT 1
Renvoie -1
SELECT ~2147483647
FROM events
LIMIT 1
Renvoie - 2147483648
Exemples OR au niveau du bit
Utilisez les exemples suivants pour comparer deux bits. Si les deux bits ont une valeur « 1 », la requête renvoie un 1. Si les deux bits ont une valeur « 0 », la requête renvoie un 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
Renvoie -1
Exemples XOR au niveau du bit
Les exemples suivants peuvent être utilisés pour prendre des modèles 2 bits, ou une paire de bits de chaque position, et les convertir en 1 ou 0. Si les bits sont différents, le résultat dans cette position est 1. Si les bits sont identiques, le résultat dans cette position est 0.
SELECT 2147483647#2147483647
FROM events
LIMIT 1
Renvoie 0
SELECT 12345#6789
AS A,
(~12345 & 6789)|(12345 & ~6789)
AS B
FROM events
LIMIT 1
Renvoie 10940, 10940
Exemples ShiftLeft
Le nombre d'emplacements à déplacer est donné comme second argument à l'opérateur de décalage.
SELECT -1<<1
AS A
FROMS events
LIMIT 1
Renvoie -2
SELECT 16<<1
AS A
FROMS events
LIMIT 1
Renvoie 128
Exemples ShiftRight
L'opérateur >> utilise le bit de signe, qui est le plus gauche, pour remplir les positions de fin après le décalage. Si le nombre est négatif, alors 1 est utilisé comme filtre et si le nombre est positif, alors 0 est utilisé comme filtre.
SELECT 16>>3
AS A
FROMS events
LIMIT 1
Renvoie 2
SELECT -32768>>15
AS A
FROMS events
LIMIT 1
Exemple de ShiftRightUnsigned
Toujours remplir 0 quel que soit le signe du nombre.
SELECT -1>>>33
FROM events
LIMIT 1
Renvoie 2147483647
Dividing par la puissance de 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