Thanks Jark, I confused it with the normal sql syntax.
now it works (after changing it to HH:mm:ss.SSSSSS...)


Fanbin

On Tue, Nov 10, 2020 at 7:24 PM Jark Wu <imj...@gmail.com> wrote:

> Oh, sorry, the example above is wrong. The column name should come first.
> So the full example should be:
>
> create table t (
>   user_id string,
>   action string,
>   ts string,
>   new_ts AS TO_TIMESTAMP(ts, 'yyyy-MM-dd''T''HH:mm:ss.SSS''Z'''),
>   watermark for new_ts as new_ts - interval '5' second
> ) with (
>  ...
> )
>
> Docs:
> https://ci.apache.org/projects/flink/flink-docs-master/dev/table/sql/create.html
>
> Best,
> Jark
>
> On Wed, 11 Nov 2020 at 11:11, Fanbin Bu <fanbin...@coinbase.com> wrote:
>
>> 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
>>>>>>
>>>>>>

Reply via email to