Vysokovýkonné Parsování
Vysokovýkonné parsování je parsování, které je přímo zkompilováno do strojového kódu, čímž se zajišťuje co nejvyšší rychlost parsování příchozích událostí.
Všechny vestavěné předzpracovatele, stejně jako deklarativní výrazy !PARSE
a !DATETIME.PARSE
, nabízejí vysokovýkonné parsování.
Procedurální parsování
Aby mohl být strojový/instrukční kód kompilován pomocí LLVM a C, všechny výrazy musí poskytovat definici procedurálního parsování, což znamená, že každý znak(y) v parsovacím vstupním řetězci musí mít definovanou délku výstupu a typ výstupu.
Zatímco u předzpracovatelů je tento postup transparentní a uživateli se nezobrazuje,
u výrazů !PARSE
a !DATETIME.PARSE
musí být přesný postup s typy a formátem definován v atributu format
:
!DATETIME.PARSE
what: "2021-06-11 17"
format:
- year: {type: ui64, format: d4}
- '-'
- month: {type: ui64, format: d2}
- '-'
- day: {type: ui64, format: d2}
- ' '
- hour: {type: ui64, format: d2}
První položka v atributu format
odpovídá prvním znakům v příchozí zprávě,
zde year
se tvoří z prvních čtyř znaků a je převeden na celé číslo (2021
).
Pokud je specifikován pouze jeden znak, je přeskočen a není uložen ve výstupní parsované struktuře.
Vysokovýkonné Výrazy
!DATETIME.PARSE
!DATETIME.PARSE
implicitně vytváří datetime z parsované struktury,
která má následující atributy:
-
year
-
month
-
day
-
hour
(volitelně) -
minute
(volitelně) -
second
(volitelně) -
microsecond
(volitelně)
Formát - dlouhá verze
Atributy musí být specifikovány v inletu format
:
!DATETIME.PARSE
what: "2021-06-11 1712X000014"
format:
- year: {type: ui64, format: d4}
- '-'
- month: {type: ui64, format: d2}
- '-'
- day: {type: ui64, format: d2}
- ' '
- hour: {type: ui64, format: d2}
- minute: {type: ui64, format: d2}
- 'X'
- microsecond: {type: ui64, format: dc6}
Formát - krátká verze
Atribut format
může využívat zkrácenou notaci se zástupnými znaky %Y
, %m
, %d
, %H
, %M
, %S
a %u
(mikrosekundy),
které představují nezáporná čísla podle formátu v uvedeném příkladu:
!DATETIME.PARSE
what: "2021-06-16T11:17Z"
format: "%Y-%m-%dT%H:%MZ"
Výraz format
může být zjednodušen, pokud je formát datetime standardizovaný, jako je RFC3339
nebo iso8601
:
!DATETIME.PARSE
what: "2021-06-16T11:17Z"
format: iso8601
Pokud se časové pásmo liší od UTC, musí být také explicitně specifikováno:
!DATETIME.PARSE
what: "2021-06-16T11:17Z"
format: iso8601
timezone: Europe/Prague
Dostupné typy
Celé číslo
-
{type: ui64, format: d2}
- přesně 2 znaky na nezáporné celé číslo -
{type: ui64, format: d4}
- přesně 4 znaky na nezáporné celé číslo -
{type: ui64, format: dc6}
- 1 až 6 znaků na nezáporné celé číslo