You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by jo...@apache.org on 2023/10/19 02:39:24 UTC
[superset] branch master updated: feat: Add week time grain for Elasticsearch datasets (#25683)
This is an automated email from the ASF dual-hosted git repository.
johnbodley pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new e7cdfeeb2c feat: Add week time grain for Elasticsearch datasets (#25683)
e7cdfeeb2c is described below
commit e7cdfeeb2c6af386ae1d9d13c460485b25407652
Author: Mikel Vuka <mi...@gmail.com>
AuthorDate: Thu Oct 19 04:39:16 2023 +0200
feat: Add week time grain for Elasticsearch datasets (#25683)
Co-authored-by: Mikel Vuka <mi...@zalando.de>
---
superset/db_engine_specs/elasticsearch.py | 1 +
.../db_engine_specs/elasticsearch_tests.py | 40 ++++++++++++++++++++++
2 files changed, 41 insertions(+)
diff --git a/superset/db_engine_specs/elasticsearch.py b/superset/db_engine_specs/elasticsearch.py
index ae6d9b9628..4f18397d8c 100644
--- a/superset/db_engine_specs/elasticsearch.py
+++ b/superset/db_engine_specs/elasticsearch.py
@@ -46,6 +46,7 @@ class ElasticSearchEngineSpec(BaseEngineSpec): # pylint: disable=abstract-metho
TimeGrain.MINUTE: "HISTOGRAM({col}, INTERVAL 1 MINUTE)",
TimeGrain.HOUR: "HISTOGRAM({col}, INTERVAL 1 HOUR)",
TimeGrain.DAY: "HISTOGRAM({col}, INTERVAL 1 DAY)",
+ TimeGrain.WEEK: "DATE_TRUNC('week', {col})",
TimeGrain.MONTH: "HISTOGRAM({col}, INTERVAL 1 MONTH)",
TimeGrain.YEAR: "HISTOGRAM({col}, INTERVAL 1 YEAR)",
}
diff --git a/tests/integration_tests/db_engine_specs/elasticsearch_tests.py b/tests/integration_tests/db_engine_specs/elasticsearch_tests.py
new file mode 100644
index 0000000000..7140e10ee1
--- /dev/null
+++ b/tests/integration_tests/db_engine_specs/elasticsearch_tests.py
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from sqlalchemy import column
+
+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):
+ col = column("ts")
+ col.type = "datetime"
+ expected_time_grain_expression = "DATE_TRUNC('week', ts)"
+ 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"
+ )
+ self.assertEqual(str(actual), expected_time_grain_expression)