luoyuxia commented on code in PR #18975: URL: https://github.com/apache/flink/pull/18975#discussion_r959114755
########## flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/connectors/hive/HiveDialectQueryITCase.java: ########## @@ -788,7 +788,7 @@ public void testCastTimeStampToDecimal() throws Exception { timestamp)) .collect()); assertThat(results.toString()) - .isEqualTo(String.format("[+I[%s]]", expectTimeStampDecimal.toFormatString(8))); + .isEqualTo(String.format("[+I[%s]]", expectTimeStampDecimal)); Review Comment: Yes, it's. But there's a special case when comes to cast constant and constant fold is enabled. Actually, the current behavior is same to Hive. I try with the following sql in Hive: ```sql hive> select cast(cast('2012-12-19 11:12:19.1234567' as timestamp) as decimal(30,8)); 1355915539.1234567 hive> insert into t2 values('2012-12-19 11:12:19.1234567') hive> select cast(c2 as decimal(30, 8)) from t2; 1355915539.12345670 hive > insert into t1 select * from t2; 1355915539.12345670 ``` The plan for the sql in hive `select cast(cast('2012-12-19 11:12:19.1234567' as timestamp) as decimal(30,8))` is: ```sql STAGE PLANS: Stage: Stage-0 Fetch Operator limit: -1 Processor Tree: TableScan alias: _dummy_table Row Limit Per Split: 1 Statistics: Num rows: 1 Data size: 10 Basic stats: COMPLETE Column stats: COMPLETE Select Operator expressions: 1355915539.1234567 (type: decimal(30,8)) outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: COMPLETE ListSink ``` The plan for `select cast(c1 as decimal(30, 8)) from t1` is : ```sql STAGE DEPENDENCIES: Stage-0 is a root stage STAGE PLANS: Stage: Stage-0 Fetch Operator limit: -1 Processor Tree: TableScan alias: t1 Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: NONE Select Operator expressions: CAST( c1 AS decimal(30,8)) (type: decimal(30,8)) outputColumnNames: _col0 Statistics: Num rows: 1 Data size: 112 Basic stats: COMPLETE Column stats: NONE ListSink ``` The reason I found is the `HiveDecimalConverter` used to convert data in Hive's `GenericUDFToDecimal` function actually won't padding zero for `2012-12-19 11:12:19.1234567`, althogh the type is ` decimal(30,8)`. Then, the first sql will select a constant `1355915539.1234567`. But for the second sql, a further padding will be done which will result `1355915539.12345670`. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@flink.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org