Přeskočit obsah

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