Fairly new to Flink here so this might be a newbie mistake, but here's the
problem. I created the following table and view:


> CREATE TABLE test (
>
>     event_time     TIMESTAMP(3),
>
>     symbol         STRING,
>
>     price          DOUBLE,
>
>     WATERMARK FOR event_time AS event_time - INTERVAL '1' MINUTE
>
> ) WITH (
>
>     ...
>
> ) ;
>
>
>
> CREATE VIEW test_view AS (
>
>     SELECT
>
>         symbol,
>
>         TUMBLE_START (event_time, INTERVAL '1' MINUTE) AS t_start,
>
>         AVG (price) AS avg_price,
>
>         MIN (price) AS min_price,
>
>         MAX (price) AS max_price
>
>     FROM
>
>         test
>
>     WHERE event_time IS NOT NULL
>
>     GROUP BY
>
>         TUMBLE(event_time, INTERVAL '1' MINUTE), symbol
>
> ) ;
>

Describe shows:

Flink SQL> describe test ;
>
>
> +------------+------------------------+------+-----+--------+------------------------------------+
>
> |       name |                   type | null | key | extras |
>               watermark |
>
>
> +------------+------------------------+------+-----+--------+------------------------------------+
>
> | event_time | TIMESTAMP(3) *ROWTIME* | true |     |        |
> `event_time` - INTERVAL '1' MINUTE |
>
> |     symbol |                 STRING | true |     |        |
>                         |
>
> |      price |                 DOUBLE | true |     |        |
>                         |
>
>
> +------------+------------------------+------+-----+--------+------------------------------------+
>
> 3 rows in set
>
>
> Flink SQL> describe test_view ;
>
> +-----------+------------------------+------+-----+--------+-----------+
>
> |      name |                   type | null | key | extras | watermark |
>
> +-----------+------------------------+------+-----+--------+-----------+
>
> |    symbol |                 STRING | true |     |        |           |
>
> |   t_start | TIMESTAMP(3) *ROWTIME* | true |     |        |           |
>
> | avg_price |                 DOUBLE | true |     |        |           |
>
> | min_price |                 DOUBLE | true |     |        |           |
>
> | max_price |                 DOUBLE | true |     |        |           |
>
> +-----------+------------------------+------+-----+--------+-----------+
>
> 5 rows in set
>

When I run a query over the view, I get the following error:

Flink SQL> SELECT
>
> >     symbol,
>
> >     t_start,
>
> >     avg_price,
>
> >     min_price,
>
> >     max_price,
>
> >     FIRST_VALUE (avg_price) OVER x AS prev_avg_price
>
> > FROM test_view
>
> > WINDOW x AS (
>
> >     PARTITION BY symbol
>
> >     ORDER BY t_start
>
> >     ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
>
> > ) ;
>
> >
>
> *[ERROR] Could not execute SQL statement. Reason:*
>
> *org.apache.flink.table.api.TableException: OVER windows' ordering in
> stream mode must be defined on a time attribute.*
>

Right now, to get around this, I need to materialize the results off test
table into a new table that matches the view. Seems that this ought to be
doable doing everything in one job instead of the intermediate
materialization step. Am I missing something?

Thanks in advance.

Patrick

Reply via email to