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

Serhiy Bilousov commented on PHOENIX-1744:
------------------------------------------

Both epoch values is valid epoch time - one is with second granularity (4 
bytes) another millisecond (8 bytes).

I just do not understand why would you want make valid epoch time value (4 
bytes) somewhat special case when it perfectly valid epoch time value. 
Basically PHOENIX SQL documentation should say something like:

to convert from epochmilisecond do CAST(epochmiliseconds AS TIMESTAMP) but to 
convert epochseconds you need to do CAST(CAST(epochsecons AS BIGINT) AS 
TIMESTAMP).

Would it be much cleaner SQL syntax when you can get epoch (sec or milisec) and 
just convert to whatever you need?
CAST(epoch AS TIMESTAMP)
CAST(epoch AS TIME)
CAST(epoch AS DATE)

I think we going in circles here. I am not sure how I can make my case stronger 
or should I (I am not trying to be difficult here but just try to make SQL part 
is better :))
I may missing something here but from SQL point of view (and that where I come 
from) I just having hard time to see any +++ of having such special case for 4 
byte epoch. 







> CAST from UNSIGNED_LONG (_INT) to * TIMESTAMP is not supported.
> ---------------------------------------------------------------
>
>                 Key: PHOENIX-1744
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1744
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Serhiy Bilousov
>            Assignee: Dave Hacker
>            Priority: Minor
>
> Epoch time can be represented as INTEGER (up to the seconds) or LONG (up to 
> the millisecond). Currently CAST from UNSIGNED_LONG to TIMESTAMP not 
> supported by Phoenix. 
> It make sense to have support for conversion from epoch (4 bytes or 8 bytes) 
> to any datetime like format curently supported by Phoenix (TIME, DATE, 
> TIMESTAMP, UNSIGNED_TIME, UNSIGNED_DATE, UNSIGNED_TIMESTAMP).
> HBase shell:
> {noformat}
> create 't','f1'
> put 
> 't',"\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01L\x0Fz,\x1E",'f1:c1','test'
> {noformat}
> sqlline:
> {noformat}
> CREATE VIEW vT
> (   a UNSIGNED_INT NOT NULL
>    ,b UNSIGNED_INT NOT NULL
>    ,ts UNSIGNED_LONG NOT NULL
> CONSTRAINT pk PRIMARY KEY (a, b, ts))
> AS SELECT * FROM "t"
> DEFAULT_COLUMN_FAMILY ='f1';
>  select a, b, ts, CAST(1426188807198 AS TIMESTAMP) from vt;
> +----+----+----------------+------------------------------+
> | A  | B  |       TS       | TO_TIMESTAMP(1426188807198)  |
> +----+----+----------------+------------------------------+
> | 1  | 1  | 1426188807198  | 2015-03-12 19:33:27.198      |
> +----+----+----------------+------------------------------+
> {noformat}
> but
> {noformat}
> select a, b, ts, CAST(ts AS TIMESTAMP) from vt;
> Error: ERROR 203 (22005): Type mismatch. UNSIGNED_LONG and TIMESTAMP for TS 
> (state=22005,code=203)
> {noformat}
> As per Gabriel Reid
> {quote}
> As a workaround, you can cast the UNSIGNED_LONG to a BIGINT first, and then 
> cast it to a TIMESTAMP, i.e.
>     select a, b, ts, CAST(CAST(ts AS BIGINT) AS TIMESTAMP) from vt;
> {quote}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to