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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]