def test_is_time_druid_time_col(self): """Druid has a special __time column""" col = TableColumn(column_name="__time", type="INTEGER") self.assertEqual(col.is_dttm, None) DruidEngineSpec.alter_new_orm_column(col) self.assertEqual(col.is_dttm, True) col = TableColumn(column_name="__not_time", type="INTEGER") self.assertEqual(col.is_time, False)
def test_is_time_druid_time_col(self): """Druid has a special __time column""" database = Database(database_name="druid_db", sqlalchemy_uri="druid://db") tbl = SqlaTable(table_name="druid_tbl", database=database) col = TableColumn(column_name="__time", type="INTEGER", table=tbl) self.assertEqual(col.is_dttm, None) DruidEngineSpec.alter_new_orm_column(col) self.assertEqual(col.is_dttm, True) col = TableColumn(column_name="__not_time", type="INTEGER", table=tbl) self.assertEqual(col.is_temporal, False)
def test_convert_dttm(self): dttm = self.get_dttm() self.assertEqual( DruidEngineSpec.convert_dttm("DATETIME", dttm), "TIME_PARSE('2019-01-02T03:04:05')", ) self.assertEqual( DruidEngineSpec.convert_dttm("TIMESTAMP", dttm), "TIME_PARSE('2019-01-02T03:04:05')", ) self.assertEqual( DruidEngineSpec.convert_dttm("DATE", dttm), "CAST(TIME_PARSE('2019-01-02') AS DATE)", )
def test_extras_with_ssl(self): db = mock.Mock() db.extra = default_db_extra db.server_cert = ssl_certificate extras = DruidEngineSpec.get_extra_params(db) connect_args = extras["engine_params"]["connect_args"] assert connect_args["scheme"] == "https" assert "ssl_verify_cert" in connect_args
def test_timegrain_expressions(self): """ DB Eng Specs (druid): Test time grain expressions """ col = "__time" sqla_col = column(col) test_cases = { "PT1S": f"FLOOR({col} TO SECOND)", "PT5M": f"TIME_FLOOR({col}, 'PT5M')", } for grain, expected in test_cases.items(): actual = DruidEngineSpec.get_timestamp_expr( col=sqla_col, pdf=None, time_grain=grain ) self.assertEqual(str(actual), expected)
def test_timegrain_expressions(self): """ DB Eng Specs (druid): Test time grain expressions """ col = "__time" sqla_col = column(col) test_cases = { "PT1S": f"TIME_FLOOR(CAST({col} AS TIMESTAMP), 'PT1S')", "PT5M": f"TIME_FLOOR(CAST({col} AS TIMESTAMP), 'PT5M')", "P1W/1970-01-03T00:00:00Z": f"TIME_SHIFT(TIME_FLOOR(TIME_SHIFT(CAST({col} AS TIMESTAMP), 'P1D', 1), 'P1W'), 'P1D', 5)", "1969-12-28T00:00:00Z/P1W": f"TIME_SHIFT(TIME_FLOOR(TIME_SHIFT(CAST({col} AS TIMESTAMP), 'P1D', 1), 'P1W'), 'P1D', -1)", } for grain, expected in test_cases.items(): actual = DruidEngineSpec.get_timestamp_expr(col=sqla_col, pdf=None, time_grain=grain) self.assertEqual(str(actual), expected)
def test_extras_without_ssl(self): db = mock.Mock() db.extra = default_db_extra db.server_cert = None extras = DruidEngineSpec.get_extra_params(db) assert "connect_args" not in extras["engine_params"]