Skip to content

Commit

Permalink
Add BigQuery engine specifications
Browse files Browse the repository at this point in the history
As contributed by @mxmzdlv on issue #945
  • Loading branch information
mistercrunch committed Jul 27, 2017
1 parent fb866a9 commit 536bb06
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions superset/db_engine_specs.py
Expand Up @@ -910,6 +910,34 @@ def convert_dttm(cls, target_type, dttm):
dttm.strftime('%Y-%m-%d %H:%M:%S'))
return "'{}'".format(dttm.strftime('%Y-%m-%d %H:%M:%S'))


class BQEngineSpec(BaseEngineSpec):
"""Engine spec for Google's BigQuery
As contributed by @mxmzdlv on issue #945"""
engine = 'bigquery'

time_grains = (
Grain("Time Column", _('Time Column'), "{col}"),
Grain("second", _('second'), "TIMESTAMP_TRUNC({col}, SECOND)"),
Grain("minute", _('minute'), "TIMESTAMP_TRUNC({col}, MINUTE)"),
Grain("hour", _('hour'), "TIMESTAMP_TRUNC({col}, HOUR)"),
Grain("day", _('day'), "TIMESTAMP_TRUNC({col}, DAY)"),
Grain("week", _('week'), "TIMESTAMP_TRUNC({col}, WEEK)"),
Grain("month", _('month'), "TIMESTAMP_TRUNC({col}, MONTH)"),
Grain("quarter", _('quarter'), "TIMESTAMP_TRUNC({col}, QUARTER)"),
Grain("year", _('year'), "TIMESTAMP_TRUNC({col}, YEAR)"),
)

@classmethod
def convert_dttm(cls, target_type, dttm):
tt = target_type.upper()
if tt == 'DATE':
return "'{}'".format(dttm.strftime('%Y-%m-%d'))
else:
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)}

0 comments on commit 536bb06

Please sign in to comment.