You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "Jark Wu (Jira)" <ji...@apache.org> on 2021/04/19 12:36:00 UTC

[jira] [Created] (FLINK-22354) Failed to define watermark on computed column of CURRENT_TIMESTAMP and LOCALTIMESTAMP

Jark Wu created FLINK-22354:
-------------------------------

             Summary: Failed to define watermark on computed column of CURRENT_TIMESTAMP and LOCALTIMESTAMP
                 Key: FLINK-22354
                 URL: https://issues.apache.org/jira/browse/FLINK-22354
             Project: Flink
          Issue Type: Bug
          Components: Table SQL / API
            Reporter: Jark Wu
            Assignee: Leonard Xu
             Fix For: 1.13.0, 1.14.0


It is very common to define watermarks on {{localtimestamp}} and {{current_tiemstamp}} to support *ingestion time*.  However, the following DDLs failed in v1.13. I also tested the following DDLs can pass in v1.12.1, so this is a regression. 

The root cause may be introduced by FLINK-21435 which adds a [strict check to only allow  precision = 3|https://github.com/apache/flink/blob/f51168041512b0473decabb2088c1ff4fa4f34bc/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/catalog/DefaultSchemaResolver.java#L225] (precision = 0 should also can), however the precision of return type of {{current_timestamp}} and {{localtimestamp}} are 0 (another long-lived bug). We should fix them both. 

{code:sql}
Flink SQL> create table datagen_source (
>     order_number BIGINT,
>     price        int,
>     buyer        string,
>     ts as current_timestamp,
>     proctime as proctime(),
>     watermark for ts as ts - interval '0.001' second
> ) with (
>     'connector' = 'datagen',
>     'rows-per-second' = '1'
> );
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.ValidationException: Invalid data type of time field for watermark definition. The field must be of type TIMESTAMP(3) or TIMESTAMP_LTZ(3).

Flink SQL> create table datagen_source (
>     order_number BIGINT,
>     price        int,
>     buyer        string,
>     ts as cast(current_timestamp as timestamp_ltz(3)),
>     proctime as proctime(),
>     watermark for ts as ts - interval '0.001' second
> ) with (
>     'connector' = 'datagen',
>     'rows-per-second' = '1'
> );
[INFO] Execute statement succeed.

Flink SQL> create table datagen_source2 (
>     order_number BIGINT,
>     price        int,
>     buyer        string,
>     ts as localtimestamp,
>     proctime as proctime(),
>     watermark for ts as ts - interval '0.001' second
> ) with (
>     'connector' = 'datagen',
>     'rows-per-second' = '1'
> );
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.ValidationException: Invalid data type of time field for watermark definition. The field must be of type TIMESTAMP(3) or TIMESTAMP_LTZ(3).
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)