[ 
https://issues.apache.org/jira/browse/CALCITE-6909?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17938417#comment-17938417
 ] 

Yu Xu commented on CALCITE-6909:
--------------------------------

Very thanks for [~julianhyde]  brilliant suggestion!  this issue is aim to fix 
the bug that ClickHouse Dialect can not support accurate precision.

I test it in ClickHouse again according to the CK doc and seek advice from some 
ClickHouse experts at the same time,
I had a mistake about it, Decimal(P, S) can hold all condition with 
Decimal32/64/128/256(these just a synonym of Decimal(P, S), and I miss this 
important message).  IMO we just need to resolve the precision problem in 
ClickHouse dialect:ClickHouse max precision is 76, but in dialect just use 
default max value which is 19, that can not support precision higher than 19.

I had updated the summary/description and changed the fix way in related PR, if 
found any problem please feedback anytime, thanks again to [~julianhyde] 
[~nobigo] 

> ClickHouse Dailect can not support accurate precision
> -----------------------------------------------------
>
>                 Key: CALCITE-6909
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6909
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.39.0
>            Reporter: Yu Xu
>            Assignee: Yu Xu
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.40.0
>
>
> Currently ClickHouse Dailect can not support accurate precision
> In ClickHouse:
>  * *P - precision. Valid range: [ 1 : 76 ].* 
>  * *S - scale. Valid range: [ 0 : P ].* 
> Depending on P parameter value Decimal(P, S) is a synonym for:
>  * *P from [ 1 : 9 ] - for Decimal32(S)*
>  * *P from [ 10 : 18 ] - for Decimal64(S)*
>  * *P from [ 19 : 38 ] - for Decimal128(S)*
>  * *P from [ 39 : 76 ] - for Decimal256(S)*
> we can refer to doc with: 
> [https://clickhouse.com/docs/sql-reference/data-types/decimal]
>  
> eg:{*}select cast(\"product_id\" as decimal(22,20)) from \"product\"{*}
> but transform to: *SELECT CAST(`product_id` AS DECIMAL(19, 19)) FROM 
> `foodmart`.`product`*
>  
> this should be transform to:  *SELECT CAST(`product_id` AS DECIMAL(22, 20)) 
> FROM `foodmart`.`product`*
> because CK precision is from[1, 79] 
>  
> *user case:* 
> if user want to cast to a decimal type such as :
> select cast('1.322131231313123311312322' as DECIMAL(30,24)) from 
> system.numbers limit 1;
> should be a decimal number of 1.322131231313123311312322
> but currently  calcite ClickHouse dialect can only cast 
> to:1.322131231313123311
> this would cause loss of precision.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to