You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues-all@impala.apache.org by "ASF subversion and git services (Jira)" <ji...@apache.org> on 2023/03/27 23:02:00 UTC

[jira] [Commented] (IMPALA-11355) Add STRING overloads for functions that consume time of day

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

ASF subversion and git services commented on IMPALA-11355:
----------------------------------------------------------

Commit ec7a834b378847251a37f98a1dfcfb18c004f1b4 in impala's branch refs/heads/branch-4.1.2 from Csaba Ringhofer
[ https://gitbox.apache.org/repos/asf?p=impala.git;h=ec7a834b3 ]

IMPALA-11355: Add STRING overloads for hour/minute/second/millisecond

IMPALA-9531 dropped support for "dateless timestamps",
e.g. cast("12:05:05" as timestamp) now returns NULL.

This led to breaking functions like minute("12:05:05"), as minute()
expects a timestamp, and Impala adds an implicit cast, so what actually
happens is minute(cast("12:05:05" as timestamp)), which returns NULL.

This change adds overloads for similar functions that take STRING
instead of TIMESTAMP parameter. The same functions already take a
STRING parameter in Hive and mySQL.

The changes in the parser mainly restore code removed in IMPALA-9531.

Note that these functions could be potentially optimized by returning
parts of the parse result without converting them to boost time first,
but this is not done here to make the change minimal.

Testing:
- restored related tests in expr-test and added some new ones for
  malformed time-of-day strings
- added benchmarks for the new overloads and fixed the ones for the
  old functions (they tested NULL)

Change-Id: I6cc1c851ee71ab4fcc58105c7e9931155a483679
Reviewed-on: http://gerrit.cloudera.org:8080/18718
Reviewed-by: Riza Suminto <ri...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>


> Add STRING overloads for functions that consume time of day
> -----------------------------------------------------------
>
>                 Key: IMPALA-11355
>                 URL: https://issues.apache.org/jira/browse/IMPALA-11355
>             Project: IMPALA
>          Issue Type: Improvement
>          Components: Backend
>    Affects Versions: Impala 4.0.0
>            Reporter: Csaba Ringhofer
>            Assignee: Csaba Ringhofer
>            Priority: Critical
>             Fix For: Impala 4.2.0
>
>
> IMPALA-9531 dropped support for "dateless timestamps", e.g. cast("12:05:05" as timestamp) now returns NULL.
> This led to breaking functions like minute("12:05:05"), as minute() expects a timestamp, and Impala adds an implicit cast, so what actually happens is minute(cast("12:05:05" as timestamp)), which returns NULL. The same expression works in Hive and other databases like mySQL.
> IMO the best solution would be to add overloads for similar functions that take STRING as argument:
> - this would solve the issue above
> - would be consistent with Hive where minute() expects a STRING, not a TIMESTAMP
> - it would be also faster, as the string->timestamp parsing is done anyway during casting, and extracting the minute part of a timestamp needs an a large integer division
> At the first glance this should be done for the following functions:
> HOUR(TIMESTAMP ts)
> MINUTE(TIMESTAMP ts)
> SECOND(TIMESTAMP ts)
> MILLISECOND(TIMESTAMP ts)
>  
> TRUNC(TIMESTAMP / DATE ts, STRING unit) would also make sense, though I am not sure if it ever worked with dateless timestamp (in Hive this also takes STRING)
> For functions like MONTH this is not needed for correctness, as we can convert "timeless dates" to timestamps or dates without problem. For performance it would still make sense to work on STRINGs directly.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-all-unsubscribe@impala.apache.org
For additional commands, e-mail: issues-all-help@impala.apache.org