You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by GitBox <gi...@apache.org> on 2019/05/10 05:54:29 UTC

[GitHub] [incubator-superset] jeepxiaozi edited a comment on issue #7270: date_trunc function when connect to hive

jeepxiaozi edited a comment on issue #7270: date_trunc function when connect to hive
URL: https://github.com/apache/incubator-superset/issues/7270#issuecomment-491147362
 
 
   Same here. I've checked the source code in incubator-superset/superset/db_engine_specs.py, from what I'm seeing, the reason this error happened is because they're using PrestoEngineSpec as HiveEngineSpec, as the code below:
   ```python
   class HiveEngineSpec(PrestoEngineSpec):
   
       """Reuses PrestoEngineSpec functionality."""
   ```
   and hive doesn't support 'date_trunc' method.
   So if u can build from the source code, u can just change the code into some thing like this:
   
   ```python
   class HiveEngineSpec(BaseEngineSpec):
   
       """Reuses PrestoEngineSpec functionality."""
       
       engine = 'hive'
       max_column_name_length = 767
       
       time_grain_functions = {
           None: '{col}',
           'PT1S': "from_unixtime(unix_timestamp({col}), 'yyyy-MM-dd HH:mm:ss')",
           'PT1M': "from_unixtime(unix_timestamp({col}), 'yyyy-MM-dd HH:mm:00')",
           'PT1H': "from_unixtime(unix_timestamp({col}), 'yyyy-MM-dd HH:00:00')",
           'P1D': "from_unixtime(unix_timestamp({col}), 'yyyy-MM-dd 00:00:00')",
           'P1W': "date_format(date_sub(nianxian, CAST(7-from_unixtime(unix_timestamp(nianxian),'u') as int)), 'yyyy-MM-dd 00:00:00')",
           'P1M': "from_unixtime(unix_timestamp({col}), 'yyyy-MM-01 00:00:00')",
           'P0.25Y': "date_format(add_months(trunc(nianxian, 'MM'), -(month(nianxian)-1)%3), 'yyyy-MM-dd 00:00:00')",
           'P1Y': "from_unixtime(unix_timestamp({col}), 'yyyy-01-01 00:00:00')",
           'P1W/1970-01-03T00:00:00Z': "date_format(date_add(nianxian, INT(6-from_unixtime(unix_timestamp(nianxian), 'u'))), 'yyyy-MM-dd 00:00:00')",
           '1969-12-28T00:00:00Z/P1W': "date_format(date_add(nianxian, -INT(from_unixtime(unix_timestamp(nianxian), 'u'))), 'yyyy-MM-dd 00:00:00')"
       }
   ```
   this should do the work.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org