You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Remus Rusanu (JIRA)" <ji...@apache.org> on 2017/03/10 12:59:04 UTC

[jira] [Updated] (CALCITE-1690) Calcite timestamp literals cannot express precision above millisecond, TIMESTAMP(3)

     [ https://issues.apache.org/jira/browse/CALCITE-1690?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Remus Rusanu updated CALCITE-1690:
----------------------------------
    Description: 
{{RexBuilder.makeTimestampLiteral}} accepts the TS as a Java Calendar instance. Calendar type has only ms precision, thus types like {{TIMESTAMP(9)}} cannot be represented.
This results in incorrect results in Hive due to constant reduction:

{noformat}
hive> explain select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
OK
Plan optimized by CBO.

Stage-0
  Fetch Operator
    limit:-1
    Select Operator [SEL_2]
      Output:["_col0"]
      Filter Operator [FIL_4]
        predicate:(c17 = 2012-04-22 09:00:00.123)
        TableScan [TS_0]
          Output:["c17"]

hive> select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
OK
Time taken: 0.687 seconds

hive> set hive.cbo.enable=false;
hive> explain select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
OK
Stage-0
  Fetch Operator
    limit:-1
    Select Operator [SEL_2]
      Output:["_col0"]
      Filter Operator [FIL_4]
        predicate:(c17 = '2012-04-22 09:00:00.123456789')
        TableScan [TS_0]
          Output:["c17"]

hive> select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
OK
2012-04-22 09:00:00.123
{noformat}

Note how with CBO enabled the qualified row is missed. The plan shows that the constant was truncated to ms.



  was:
{{RexBuilder.makeTimestampLiteral}} accepts the TS as a Java Calendar instance. Calendar type has only ms precision, thus types like {{TIMESTMAP(9)}} cannot be represented.
This results in incorrect results in Hive due to constant reduction:

{noformat}
hive> explain select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
OK
Plan optimized by CBO.

Stage-0
  Fetch Operator
    limit:-1
    Select Operator [SEL_2]
      Output:["_col0"]
      Filter Operator [FIL_4]
        predicate:(c17 = 2012-04-22 09:00:00.123)
        TableScan [TS_0]
          Output:["c17"]

hive> select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
OK
Time taken: 0.687 seconds

hive> set hive.cbo.enable=false;
hive> explain select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
OK
Stage-0
  Fetch Operator
    limit:-1
    Select Operator [SEL_2]
      Output:["_col0"]
      Filter Operator [FIL_4]
        predicate:(c17 = '2012-04-22 09:00:00.123456789')
        TableScan [TS_0]
          Output:["c17"]

hive> select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
OK
2012-04-22 09:00:00.123
{noformat}

Note how with CBO enabled the qualified row is missed. The plan shows that the constant was truncated to ms.




> Calcite timestamp literals cannot express precision above millisecond, TIMESTAMP(3)
> -----------------------------------------------------------------------------------
>
>                 Key: CALCITE-1690
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1690
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Remus Rusanu
>            Assignee: Remus Rusanu
>
> {{RexBuilder.makeTimestampLiteral}} accepts the TS as a Java Calendar instance. Calendar type has only ms precision, thus types like {{TIMESTAMP(9)}} cannot be represented.
> This results in incorrect results in Hive due to constant reduction:
> {noformat}
> hive> explain select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
> OK
> Plan optimized by CBO.
> Stage-0
>   Fetch Operator
>     limit:-1
>     Select Operator [SEL_2]
>       Output:["_col0"]
>       Filter Operator [FIL_4]
>         predicate:(c17 = 2012-04-22 09:00:00.123)
>         TableScan [TS_0]
>           Output:["c17"]
> hive> select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
> OK
> Time taken: 0.687 seconds
> hive> set hive.cbo.enable=false;
> hive> explain select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
> OK
> Stage-0
>   Fetch Operator
>     limit:-1
>     Select Operator [SEL_2]
>       Output:["_col0"]
>       Filter Operator [FIL_4]
>         predicate:(c17 = '2012-04-22 09:00:00.123456789')
>         TableScan [TS_0]
>           Output:["c17"]
> hive> select c17 from testjdbcdriverdatatypetbl where c17='2012-04-22 09:00:00.123456789';
> OK
> 2012-04-22 09:00:00.123
> {noformat}
> Note how with CBO enabled the qualified row is missed. The plan shows that the constant was truncated to ms.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)