You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@drill.apache.org by Daniel Barclay <db...@maprtech.com> on 2015/08/17 22:22:35 UTC

Re: Adding an interval column to a date

Does normal date and interval arithmetic work?

It seems (from the SQL standard) that one should be able to use:

    CAST(`datetime` AS TIMESTAMP) + 5 * INTERVAL '1' HOUR

(where that "5" can also be a general expression).

Daniel


Mehant Baid wrote:
> Currently Drill supports casting to interval data type only from varchar which is in standard ISO format, here is the link to the documentation indicating more details about the format: https://drill.apache.org/docs/date-time-and-timestamp/#intervalyear-and-intervalday. Once you are able to cast to the interval data type date_add function should work as expected. Here is an example:
>
> select timestamp_column, interval_column from dfs.`/tmp/a.json`;
> +---------------------+------------------+
> |  timestamp_column   | interval_column  |
> +---------------------+------------------+
> | 2008-2-23 10:00:00  | PT5H             |
> +---------------------+------------------+
>
> Now adding the interval to the timestamp
>
>  select date_add(cast(timestamp_column as timestamp), cast(interval_column as interval hour)) from dfs.`/tmp/a.json`;
> +------------------------+
> |         EXPR$0         |
> +------------------------+
> | 2008-02-23 15:00:00.0  |
> +------------------------+
>
> Thanks
> Mehant
>
> On 6/12/15 11:39 AM, Hao Zhu wrote:
>> Here are some examples:
>> https://drill.apache.org/docs/data-type-conversion/#casting-intervals
>>
>> So I can only find the workaround as below:
>> select columns[0],columns[1] from `test2.csv` ;
>> +----------------------+---------+
>> |        EXPR$0        | EXPR$1  |
>> +----------------------+---------+
>> | 2015-06-11 17:12:20  | 5       |
>> +----------------------+---------+
>> 1 row selected (0.081 seconds)
>>
>> select to_timestamp(columns[0],'YYYY-MM-dd HH:mm:ss') as original,
>> date_add(to_timestamp(columns[0],'YYYY-MM-dd
>> HH:mm:ss'),cast(cast(CONCAT('PT',columns[1],'H') as varchar(30)) as
>> interval HOUR)) as after from `test2.csv`;
>> +------------------------+------------------------+
>> |        original        |         after          |
>> +------------------------+------------------------+
>> | 2015-06-11 17:12:20.0  | 2015-06-11 22:12:20.0  |
>> +------------------------+------------------------+
>> 1 row selected (0.09 seconds)
>>
>> Thanks,
>> Hao
>>
>> On Fri, Jun 12, 2015 at 5:59 AM, Christopher Matta <cm...@mapr.com> wrote:
>>
>>> Just to illustrate, I have this data:
>>>
>>> 0: jdbc:drill:zk=sen11:5181,sen12:5181> select * from `datemath.json`;
>>> +----------------------+---------+
>>> |       datetime       | offset  |
>>> +----------------------+---------+
>>> | 2015-06-11 17:12:20  | 5       |
>>> +----------------------+---------+
>>> 1 row selected (0.109 seconds)
>>>
>>> I would like to add the offset column to the datetime column as hours:
>>>
>>> 0: jdbc:drill:zk=sen11:5181,sen12:5181> select
>>> date_add(cast(`datetime` as timestamp), cast(cast(`offset` as int) as
>>> interval hour)) from `datemath.json`;
>>> Error: SYSTEM ERROR: java.lang.AssertionError: todo: implement syntax
>>> SPECIAL(Reinterpret(*(Reinterpret(CAST(CAST($0):INTEGER):DECIMAL(2,
>>> 0)), 3600000)))
>>>
>>> [Error Id: 9516920d-6717-4412-9f1f-cb7eb84b5407 on
>>> se-node11.se.lab:31010] (state=,code=0)
>>>
>>> Hard coding the integer “5” into the query works however:
>>>
>>> 0: jdbc:drill:zk=sen11:5181,sen12:5181> select
>>> date_add(cast(`datetime` as timestamp), cast(5 as interval hour)) from
>>> `datemath.json`;
>>> +------------------------+
>>> |         EXPR$0         |
>>> +------------------------+
>>> | 2015-06-11 22:12:20.0  |
>>> +------------------------+
>>> 1 row selected (0.156 seconds)
>>>
>>> Can anyone confirm:
>>>
>>>     1. Is this the right way to go about doing it?
>>>     2. Is this not working because (as the error says) it’s still a “todo”?
>>>
>>> Any way to work around this?
>>>
>>> Chris Mattacmatta@mapr.com
>>> 215-701-3146
>>> ​
>>>
>


-- 
Daniel Barclay
MapR Technologies