Support Apache Kylin in EngineSpec (#4925)

* Support Apache Kylin in EngineSpec

* Fix flake8
This commit is contained in:
Yongjie Zhao 2018-05-03 23:42:43 +08:00 committed by Maxime Beauchemin
parent e213ccd438
commit 5d6e59aa8a
1 changed files with 26 additions and 0 deletions

View File

@ -1314,6 +1314,32 @@ class DruidEngineSpec(BaseEngineSpec):
inner_joins = False
class KylinEngineSpec(BaseEngineSpec):
"""Dialect for Apache Kylin"""
engine = 'kylin'
time_grains = (
Grain('Time Column', _('Time Column'), '{col}', None),
Grain('second', _('second'), 'SECOND({col})', 'PT1S'),
Grain('minute', _('minute'), 'MINUTE({col})', 'PT1M'),
Grain('hour', _('hour'), 'HOUR({col})', 'PT1H'),
Grain('month', _('month'), 'MONTH({col})', 'P1M'),
Grain('quarter', _('quarter'), 'QUARTER({col})', 'P0.25Y'),
Grain('year', _('year'), 'YEAR({col})', 'P1Y'),
)
@classmethod
def convert_dttm(cls, target_type, dttm):
tt = target_type.upper()
if tt == 'DATE':
return "CAST('{}' AS DATE)".format(dttm.isoformat()[:10])
if tt == 'TIMESTAMP':
return "CAST('{}' AS TIMESTAMP)".format(
dttm.strftime('%Y-%m-%d %H:%M:%S'))
return "'{}'".format(dttm.strftime('%Y-%m-%d %H:%M:%S'))
engines = {
o.engine: o for o in globals().values()
if inspect.isclass(o) and issubclass(o, BaseEngineSpec)}