Jark, Thanks for the quick response. I tried to_timestamp(ts, ...), but got the following error:
Exception in thread "main" org.apache.flink.table.api.SqlParserException: SQL parse failed. Encountered "(" at line looks like it complains about the second `(` in create table t (... to_timestamp(...)...) On Tue, Nov 10, 2020 at 6:47 PM Jark Wu <imj...@gmail.com> wrote: > Hi Fanbin, > > The example you gave is correct: > > create table t ( > user_id string, > action string, > ts string, > transform_ts_format(ts) as new_ts, > watermark for new_ts as new_ts - interval '5' second > ) with ( > ... > ) > > You can use "TO_TIMESTAMP" built-in function instead of the UDF, e.g. > TO_TIMESTAMP(ts, 'yyyy-MM-dd''T''HH:mm:ss.SSS''Z''') as new_ts > > > Q1: how does watermark know new_ts is a valid timestamp? > > the framework will validate the return type of the computed column > expression. > Currently, it must be a type of TIMESTAMP(3). > > Q2: is it possible to reuse ts without introducing a new column? > > Currently, it is not supported. This requires to support "TIMESTAMP WITH > LOCAL TIME ZONE" as rowtime attribute first. > > Bes, > Jark > > On Wed, 11 Nov 2020 at 10:33, Fanbin Bu <fanbin...@coinbase.com> wrote: > >> In the `computed column` section of [1], i saw some related doc: >> >> ``` >> On the other hand, computed column can be used to derive event time >> column because an event time column >> may need to be derived from existing fields, e.g. the original field is >> not TIMESTAMP(3) type or is nested in a JSON string. >> ``` >> could you please provide a concrete example for this? >> Thanks >> Fanbin >> >> [1] >> https://ci.apache.org/projects/flink/flink-docs-master/dev/table/sql/create.html#create-table >> >> On Tue, Nov 10, 2020 at 6:18 PM Fanbin Bu <fanbin...@coinbase.com> wrote: >> >>> i also tried: >>> ts TIMESTAMP WITH LOCAL TIME ZONE >>> >>> but it failed with >>> Rowtime attribute 'ts' must be of type TIMESTAMP but is of type >>> 'TIMESTAMP(6) WITH LOCAL TIME ZONE'. >>> >>> On Tue, Nov 10, 2020 at 5:42 PM Fanbin Bu <fanbin...@coinbase.com> >>> wrote: >>> >>>> Hi, >>>> >>>> I have source json data like: >>>> {"ts": "2020-11-09T20:26:10.368123Z", "user_id": "user1", "action": >>>> "click"} >>>> ... >>>> >>>> my sql is: >>>> create table t ( >>>> user_id string, >>>> action string, >>>> ts timestamp, >>>> watermark for ts as ts - interval '5' second >>>> ) with ( >>>> 'connector' = 'kafka', >>>> 'topic' = 'test', >>>> 'json.timestamp-format.standard' = 'ISO-8601' >>>> ... >>>> ) >>>> >>>> this does not work since ISO-8601 does not expect `Z` at the end of the >>>> timestamp. >>>> It only works for "2020-11-09T20:26:10.368". However, I'm not able to >>>> change the format. >>>> >>>> I checked a few threads and somebody suggested to use udf for >>>> unsupported timestamp format. what would the create table statement look >>>> like? I also need watermark working. >>>> >>>> I'm thinking about this: >>>> create table t ( >>>> user_id string, >>>> action string, >>>> ts string, >>>> transform_ts_format(ts) as new_ts, >>>> watermark for new_ts as new_ts - interval '5' second >>>> ) with ( >>>> ... >>>> >>>> q: >>>> 1. how does watermark know new_ts is a valid timestamp? >>>> 2. is it possible to reuse ts without introducing a new column? >>>> >>>> Thanks, >>>> Fanbin >>>> >>>>