diff --git a/superset/db_engine_specs/pinot.py b/superset/db_engine_specs/pinot.py index 2cafd5ecb..0f53cfa77 100644 --- a/superset/db_engine_specs/pinot.py +++ b/superset/db_engine_specs/pinot.py @@ -62,7 +62,7 @@ class PinotEngineSpec(BaseEngineSpec): ) @classmethod - def epoch_ms_to_dttm_(cls) -> str: + def epoch_ms_to_dttm(cls) -> str: return ( "DATETIMECONVERT({col}, '1:MILLISECONDS:EPOCH', " + "'1:MILLISECONDS:EPOCH', '1:MILLISECONDS')" diff --git a/tests/integration_tests/db_engine_specs/pinot_tests.py b/tests/integration_tests/db_engine_specs/pinot_tests.py index 3998d2094..c8deef6fc 100755 --- a/tests/integration_tests/db_engine_specs/pinot_tests.py +++ b/tests/integration_tests/db_engine_specs/pinot_tests.py @@ -84,6 +84,20 @@ class TestPinotDbEngineSpec(TestDbEngineSpec): expected, ) + def test_pinot_time_expression_millisec_one_1m_grain(self): + col = column("tstamp") + expr = PinotEngineSpec.get_timestamp_expr(col, "epoch_ms", "P1M") + result = str(expr.compile()) + expected = ( + "CAST(DATE_TRUNC('month', CAST(" + + "DATETIMECONVERT(tstamp, '1:MILLISECONDS:EPOCH', " + + "'1:MILLISECONDS:EPOCH', '1:MILLISECONDS') AS TIMESTAMP)) AS TIMESTAMP)" + ) + self.assertEqual( + result, + expected, + ) + def test_invalid_get_time_expression_arguments(self): with self.assertRaises(NotImplementedError): PinotEngineSpec.get_timestamp_expr(column("tstamp"), None, "P0.25Y")