Vysoce výkonné parsování
Vysoce výkonné parsování je parsování, které je kompilováno přímo do strojového kódu, tedy zajišťuje nejvyšší možnou rychlost parsování příchozích událostí.
Všechny vestavěné preprocesory i deklarativní výrazy !PARSE
a !DATETIME.PARSE
.
nabízejí vysoký výkon parsování.
Procedurální parsování
Aby bylo možné strojový/instrukční kód zkompilovat prostřednictvím LLVM a C, musí všechny výrazy obsahovat definici procedurálního parsování, což znamená, že každý znak(y) ve vstupním řetězci parsování musí mít definovanou výstupní délku. a výstupní typ.
Zatímco u preprocesorů je procedura transparentní a uživateli se nezobrazuje,
ve výrazech !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:
- rok: {type: ui64, format: d4}
- '-'
- měsíc: {typ: ui64, formát: d2}
- '-'
- den: {typ: ui64, formát: d2}
- ' '
- hour: {typ: ui64, formát: d2}
První položka v atributu format
odpovídá prvnímu znaku (prvním znakům) v příchozí zprávě,
zde je rok
vytvořen z prvních čtyř znaků a převeden na celé číslo (2021
).
Pokud je uveden pouze jeden znak, je přeskočen a není uložen ve výstupní analyzované struktuře.
Vysoce výkonné výrazy
!DATETIME.PARSE
!DATETIME.PARSE
implicitně vytvoří z analyzované struktury čas data,
která má následující atributy:
-
rok
-
měsíc
-
den
-
hodina
(nepovinné) -
minute
(nepovinné) -
second
(nepovinné) -
mikrosekunda
(nepovinné)
Formát - dlouhá verze
Atributy je třeba zadat ve vstupním poli format
:
!DATETIME.PARSE
what: "2021-06-11 1712X000014"
format:
- rok: {type: ui64, format: d4}
- '-'
- měsíc: {typ: ui64, formát: d2}
- '-'
- den: {typ: ui64, formát: d2}
- ' '
- hour: {typ: ui64, formát: d2}
- minuta: {typ: ui64, formát: d2}
- 'X'
- mikrosekunda: {type: ui64, format: dc6}
Formát - zkrácená verze
Formát format
může používat zkrácený zápis se zástupci %Y
, %m
, %d
, %H
, %M
, %S
a %u
(mikrosekunda),
které představují čísla bez znaménka podle formátu ve výše uvedeném příkladu:
!DATETIME.PARSE
what: "2021-06-16T11:17Z"
format: "%Y-%m-%dT%H:%MZ"
Příkaz format
lze zjednodušit, pokud je formát data standardizován, například RFC3339
nebo iso8601
:
!DATETIME.PARSE
what: "2021-06-16T11:17Z"
formát: iso8601
Pokud je časová zóna jiná než UTC, je třeba ji také explicitně zadat:
!DATETIME.PARSE
what: "2021-06-16T11:17Z"
formát: iso8601
timezone: Evropa/Praha
Dostupné typy
Celé číslo
-
{type: ui64, format: d2}
- přesně 2 znaky na celé číslo bez znaménka -
{type: ui64, format: d4}
- přesně 4 znaky na celé číslo bez znaménka -
{type: ui64, format: dc6}
- 1 až 6 znaků na celé číslo bez znaménka