You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by changfeng <qi...@woqutech.com> on 2021/08/19 12:51:43 UTC

Flink SQL Api不支持TIMESTAMP(p) WITH TIME ZONE 类型的列

你好, 我最近在使用Flink 1.13.1版本的SQL Api时,遇到了不支持TIMESTAMP(p) WITH TIME ZONE 类型数据的问题:
 使用SQL: CREATE TABLE source ( `ctimestamp` TIMESTAMP(6) WITH TIME ZONE) WITH ('connector' = 'print’) 创建表,报错:
Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered "TIME" at line 1, column 55.
Was expecting:
    "LOCAL" ...
    
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.convertException(FlinkSqlParserImpl.java:450)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.normalizeException(FlinkSqlParserImpl.java:213)
	at org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:140)
	at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:155)
	at org.apache.calcite.sql.parser.SqlParser.parseStmt(SqlParser.java:180)
	at org.apache.flink.table.planner.parse.CalciteParser.parse(CalciteParser.java:54)
	... 30 more
Caused by: org.apache.flink.sql.parser.impl.ParseException: Encountered "TIME" at line 1, column 55.
Was expecting:
    "LOCAL" ...
    
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.generateParseException(FlinkSqlParserImpl.java:39782)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.jj_consume_token(FlinkSqlParserImpl.java:39593)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.TimeZoneOpt(FlinkSqlParserImpl.java:25946)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.DateTimeTypeName(FlinkSqlParserImpl.java:25892)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlTypeName(FlinkSqlParserImpl.java:25168)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.TypeName(FlinkSqlParserImpl.java:24787)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.ExtendedDataType(FlinkSqlParserImpl.java:4990)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.TypedColumn(FlinkSqlParserImpl.java:4866)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.TableColumn(FlinkSqlParserImpl.java:4491)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlCreateTable(FlinkSqlParserImpl.java:5197)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlCreateExtended(FlinkSqlParserImpl.java:6233)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlCreate(FlinkSqlParserImpl.java:20934)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlStmt(FlinkSqlParserImpl.java:3415)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlStmtEof(FlinkSqlParserImpl.java:3918)
	at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.parseSqlStmtEof(FlinkSqlParserImpl.java:261)
	at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:153)
	... 32 more

而使用SQL: CREATE TABLE source ( `ctimestamp` TIMESTAMP(6) WITH LOCAL TIME ZONE) WITH ('connector' = 'print’) 创建表则不会有问题,请问Flink SQL Api当前是否支持TIMESTAMP(p) WITH TIME ZONE 类型数据或者有相关Bug。


Re: Flink SQL Api不支持TIMESTAMP(p) WITH TIME ZONE 类型的列

Posted by changfeng <qi...@woqutech.com>.
你好
  感谢解答,我仔细看了下Flink Table API & SQL Data Types页面: https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/types/ <https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/types/> , https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/types/#data-types-in-the-table-api <https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/types/#data-types-in-the-table-api> 这一节末尾的表格是否就是Flink当前已经支持的所有数据类型呢?


> 2021年8月19日 下午9:10,Leonard Xu <xb...@gmail.com> 写道:
> 
> Hello,
> 
> Flink 还不支持 TIMESTAMP WITH TIME ZONE 类型,
> 
> 目前支持的有: 
> TIMESTAMP WITHOUT TIME ZONE, 缩写为 TIMESTAMP
> TIMESTAMP WITH LOCAL TIME ZONE,缩写为TIMESTAMP_LTZ
> 
> 祝好,
> Leonard
> 
>> 在 2021年8月19日,20:51,changfeng <qi...@woqutech.com> 写道:
>> 
>> ` TIMESTAMP(6) WITH TIME ZONE
> 


Re: Flink SQL Api不支持TIMESTAMP(p) WITH TIME ZONE 类型的列

Posted by Leonard Xu <xb...@gmail.com>.
Hello,

Flink 还不支持 TIMESTAMP WITH TIME ZONE 类型,

目前支持的有: 
TIMESTAMP WITHOUT TIME ZONE, 缩写为 TIMESTAMP
TIMESTAMP WITH LOCAL TIME ZONE,缩写为TIMESTAMP_LTZ

祝好,
Leonard

> 在 2021年8月19日,20:51,changfeng <qi...@woqutech.com> 写道:
> 
> ` TIMESTAMP(6) WITH TIME ZONE


Re: Flink SQL Api不支持TIMESTAMP(p) WITH TIME ZONE 类型的列

Posted by Caizhi Weng <ts...@gmail.com>.
Hi!

目前 timestamp 相关类型只支持普通的 timestamp 还有 timestamp with local time zone
这两种。如果是有把 Fri Mar 26 12:27:05 IST 2021 这种带时区的 string 转成 timestamp 的需求,建议使用
date_format 函数。

changfeng <qi...@woqutech.com> 于2021年8月19日周四 下午8:52写道:

> 你好, 我最近在使用Flink 1.13.1版本的SQL Api时,遇到了不支持TIMESTAMP(p) WITH TIME ZONE
> 类型数据的问题:
>  使用SQL: CREATE TABLE source ( `ctimestamp` TIMESTAMP(6) WITH TIME ZONE)
> WITH ('connector' = 'print’) 创建表,报错:
> Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered
> "TIME" at line 1, column 55.
> Was expecting:
>     "LOCAL" ...
>
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.convertException(FlinkSqlParserImpl.java:450)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.normalizeException(FlinkSqlParserImpl.java:213)
>         at
> org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:140)
>         at
> org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:155)
>         at
> org.apache.calcite.sql.parser.SqlParser.parseStmt(SqlParser.java:180)
>         at
> org.apache.flink.table.planner.parse.CalciteParser.parse(CalciteParser.java:54)
>         ... 30 more
> Caused by: org.apache.flink.sql.parser.impl.ParseException: Encountered
> "TIME" at line 1, column 55.
> Was expecting:
>     "LOCAL" ...
>
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.generateParseException(FlinkSqlParserImpl.java:39782)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.jj_consume_token(FlinkSqlParserImpl.java:39593)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.TimeZoneOpt(FlinkSqlParserImpl.java:25946)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.DateTimeTypeName(FlinkSqlParserImpl.java:25892)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlTypeName(FlinkSqlParserImpl.java:25168)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.TypeName(FlinkSqlParserImpl.java:24787)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.ExtendedDataType(FlinkSqlParserImpl.java:4990)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.TypedColumn(FlinkSqlParserImpl.java:4866)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.TableColumn(FlinkSqlParserImpl.java:4491)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlCreateTable(FlinkSqlParserImpl.java:5197)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlCreateExtended(FlinkSqlParserImpl.java:6233)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlCreate(FlinkSqlParserImpl.java:20934)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlStmt(FlinkSqlParserImpl.java:3415)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlStmtEof(FlinkSqlParserImpl.java:3918)
>         at
> org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.parseSqlStmtEof(FlinkSqlParserImpl.java:261)
>         at
> org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:153)
>         ... 32 more
>
> 而使用SQL: CREATE TABLE source ( `ctimestamp` TIMESTAMP(6) WITH LOCAL TIME
> ZONE) WITH ('connector' = 'print’) 创建表则不会有问题,请问Flink SQL
> Api当前是否支持TIMESTAMP(p) WITH TIME ZONE 类型数据或者有相关Bug。
>
>