Skip to main content

Limitations and Rejection Tokens

If registration is rejected, the name of what was rejected is provided. Since that token appears exactly in the logs and API responses, you can find the corresponding line on this page.

All rejections provide a name — they do not proceed by skipping

Skipped configurations lead to a state where the statement «runs, emits, and is incorrect» — with fewer rows, silently missing columns — without anything turning red. Rejecting registration is the only failure mode visible to the operator.

How to Read Tokens — Prefixes Indicate «Who»​

PrefixWho RejectedAction
aster:Engine itself rejected during compilationUsually a statement issue — check column names and types
Other tokensPlanner cannot lower it to this engineRemove that configuration and rewrite the statement

Things the Language Does Not Support​

TokenMeaning
function:<name>Function unknown to the language (percentile · to_bigdecimal, etc.)
view:<key>View unknown to the language (std:size, etc.)
pattern:not:unboundedAbsence pattern without duration. Specify a duration as in not X for 30 min
pattern:guard:timer:at · pattern:observer:timer:scheduletimer: configuration not in the list
window:tumbling:zone-without-calendar-alignmentTime zone specified but not calendar-aligned

Things the Default Backend (Aster CEP) Rejects​

TokenMeaning
expr:case-without-elseCASE without ELSE — no answer for remaining cases
function:stddev:non-numeric-argument · function:median:non-numeric-argumentStatistical function on a non-numeric column
select:distinct:with-windowWindow already attached to DISTINCT
view:chain:second-windowWindow applied twice
view:on-pattern-sourceWindow above a row «emitted» by a pattern
view:std:firsteventView that emits only one row for the statement's lifetime
pattern:and · pattern:untilCannot lower that pattern operator
match-recognize:input:windowWindow on input of MATCH_RECOGNIZE
match-recognize:after-match-skip:past-last-rowSKIP PAST LAST ROW
match-recognize:pattern:alternation · …:permuteAlternation · Permutation
having:aggregate-not-selectedHAVING with aggregation not calculated by SELECT

Since Flink is not used for operations, these tokens are only visible during comparison.

TokenMeaning
from:joinJoin
select:distinct · order by · limit:<n>That clause
where:notUnary NOT
insert into:<stream>INSERT INTO
pattern:notAbsence pattern — no negation in standard row patterns
window:sliding:not-supported · window:tumbling:first-event-alignmentThat window shape
function:first · function:median · function:castThat function
projection:operator:<op> · projection:case with an operandArithmetic in projection · CASE

«Accept and Ignore» Clauses Are Worse Than Rejections​

This is the failure mode that this document repeatedly monitors.

A rejected statement is not registered and is seen by the operator. An accepted and ignored clause means the statement runs, emits rows, and those rows look plausible.

In the past, four were caught in this category — OUTPUT LAST EVERY n (accepts name but does not implement) · ORDER BY·LIMIT (accepts and silently discards) · pattern:without every (emits rows not requested by the statement) · to_string (responds that a function not in the product «can be used»).

🔴 The last one is the worst. A rejection means «find another spelling», but an incorrect SUPPORTED is a promise that «it can be moved».

Other Limitations​

ItemStatus
Late EventsNo concept of allowed lateness. Late events are aggregated into open buckets
First Part BucketNot suppressed — the first bucket immediately after registration is a fragment
DSTRejects if the transition offset is not a multiple of the bucket size
Common reasons for stddev · median rejectionBecause the value column of the corpus is a string — a schema issue, not a statement issue
Failure value of to_*If conversion fails or is null, it is −1 today
Result DeliveryIf subscribers are 0, rows disappear and only a warning remains
Cells marked as «could not measure» in other backendsDo not read as ✓. Not measuring and being possible are different