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)