refactor: use DATE_TRUNC for Elasticsearch time grain (#25717)

Co-authored-by: Mikel Vuka <mikel.vuka@zalando.de>
This commit is contained in:
Mikel Vuka
2023-10-20 10:05:05 -07:00
committed by GitHub
co-authored by Mikel Vuka
parent 8fb0c8da56
commit 9972ac6908
2 changed files with 27 additions and 20 deletions
@@ -14,27 +14,30 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from parameterized import parameterized
from sqlalchemy import column
from superset.constants import TimeGrain
from superset.db_engine_specs.elasticsearch import ElasticSearchEngineSpec
from tests.integration_tests.db_engine_specs.base_tests import TestDbEngineSpec
class TestElasticsearchDbEngineSpec(TestDbEngineSpec):
def test_time_grain_week_expression(self):
@parameterized.expand(
[
[TimeGrain.SECOND, "DATE_TRUNC('second', ts)"],
[TimeGrain.MINUTE, "DATE_TRUNC('minute', ts)"],
[TimeGrain.HOUR, "DATE_TRUNC('hour', ts)"],
[TimeGrain.DAY, "DATE_TRUNC('day', ts)"],
[TimeGrain.WEEK, "DATE_TRUNC('week', ts)"],
[TimeGrain.MONTH, "DATE_TRUNC('month', ts)"],
[TimeGrain.YEAR, "DATE_TRUNC('year', ts)"],
]
)
def test_time_grain_expressions(self, time_grain, expected_time_grain_expression):
col = column("ts")
col.type = "datetime"
expected_time_grain_expression = "DATE_TRUNC('week', ts)"
col.type = "DATETIME"
actual = ElasticSearchEngineSpec.get_timestamp_expr(
col=col, pdf=None, time_grain="P1W"
)
self.assertEqual(str(actual), expected_time_grain_expression)
def test_time_grain_hour_expression(self):
col = column("ts")
col.type = "datetime"
expected_time_grain_expression = "HISTOGRAM(ts, INTERVAL 1 HOUR)"
actual = ElasticSearchEngineSpec.get_timestamp_expr(
col=col, pdf=None, time_grain="PT1H"
col=col, pdf=None, time_grain=time_grain
)
self.assertEqual(str(actual), expected_time_grain_expression)