Přeskočit obsah

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