diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py
index <HASH>..<HASH> 100644
--- a/superset/db_engine_specs/base.py
+++ b/superset/db_engine_specs/base.py
@@ -1255,6 +1255,14 @@ class BaseEngineSpec:  # pylint: disable=too-many-public-methods
         )
 
     @classmethod
+    def is_select_query(cls, parsed_query: ParsedQuery) -> bool:
+        """
+        Determine if the statement should be considered as SELECT statement.
+        Some query dialects do not contain "SELECT" word in queries (eg. Kusto)
+        """
+        return parsed_query.is_select()
+
+    @classmethod
     @utils.memoized
     def get_column_spec(
         cls,
diff --git a/superset/sql_lab.py b/superset/sql_lab.py
index <HASH>..<HASH> 100644
--- a/superset/sql_lab.py
+++ b/superset/sql_lab.py
@@ -217,7 +217,7 @@ def execute_sql_statement(
         query.select_as_cta_used = True
 
     # Do not apply limit to the CTA queries when SQLLAB_CTAS_NO_LIMIT is set to true
-    if parsed_query.is_select() and not (
+    if db_engine_spec.is_select_query(parsed_query) and not (
         query.select_as_cta_used and SQLLAB_CTAS_NO_LIMIT
     ):
         if SQL_MAX_ROW and (not query.limit or query.limit > SQL_MAX_ROW):
feat: Add "is_select_query" method to base engine spec to make it possible to override it (#<I>)