This is an automated email from the ASF dual-hosted git repository.

jli pushed a commit to branch 6.0
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 444b98b95ee3773affe880bc1bb727011f4cee75
Author: Evan Rusackas <[email protected]>
AuthorDate: Thu Sep 4 11:07:09 2025 -0700

    fix(sql): Add Impala dialect support to sqlglot parser (#34662)
    
    Co-authored-by: Claude <[email protected]>
    Co-authored-by: Joe Li <[email protected]>
    (cherry picked from commit 7fb7ac8bef808deb57b6d441785e48c94325dea2)
---
 superset/sql/parse.py                       |  2 +-
 tests/unit_tests/sql/test_hive_dialect.py   | 65 +++++++++++++++++++++++++++++
 tests/unit_tests/sql/test_impala_dialect.py | 28 +++++++++++++
 3 files changed, 94 insertions(+), 1 deletion(-)

diff --git a/superset/sql/parse.py b/superset/sql/parse.py
index 7c430677ef..a2b8437698 100644
--- a/superset/sql/parse.py
+++ b/superset/sql/parse.py
@@ -81,7 +81,7 @@ SQLGLOT_DIALECTS = {
     "hana": Dialects.POSTGRES,
     "hive": Dialects.HIVE,
     # "ibmi": ???
-    # "impala": ???
+    "impala": Dialects.HIVE,
     # "kustosql": ???
     # "kylin": ???
     "mariadb": Dialects.MYSQL,
diff --git a/tests/unit_tests/sql/test_hive_dialect.py 
b/tests/unit_tests/sql/test_hive_dialect.py
new file mode 100644
index 0000000000..45d3137aec
--- /dev/null
+++ b/tests/unit_tests/sql/test_hive_dialect.py
@@ -0,0 +1,65 @@
+# 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.
+
+"""Tests for Hive dialect support in sqlglot."""
+
+from superset.sql.parse import SQLScript, Table
+
+
+def test_hive_sql_parsing() -> None:
+    """Test that Hive SQL can be parsed without errors."""
+    # Simple SELECT statement
+    sql = "SELECT * FROM my_table"
+    script = SQLScript(sql, "hive")
+    assert len(script.statements) == 1
+    assert not script.has_mutation()
+
+    # JOIN statement (common in Hive)
+    sql = """
+    SELECT t1.col1, t2.col2
+    FROM table1 t1
+    JOIN table2 t2 ON t1.id = t2.id
+    WHERE t1.status = 'active'
+    """
+    script = SQLScript(sql, "hive")
+    assert len(script.statements) == 1
+    assert not script.has_mutation()
+
+    # Test table extraction
+    tables = script.statements[0].tables
+    assert Table("table1") in tables
+    assert Table("table2") in tables
+
+
+def test_hive_insert_statement() -> None:
+    """Test that Hive INSERT statements are detected as mutations."""
+    sql = "INSERT INTO my_table VALUES (1, 'test')"
+    script = SQLScript(sql, "hive")
+    assert script.has_mutation()
+
+
+def test_hive_create_table() -> None:
+    """Test that Hive CREATE TABLE statements work."""
+    sql = """
+    CREATE TABLE IF NOT EXISTS my_table (
+        id INT,
+        name STRING
+    ) STORED AS PARQUET
+    """
+    script = SQLScript(sql, "hive")
+    assert len(script.statements) == 1
+    assert script.has_mutation()
diff --git a/tests/unit_tests/sql/test_impala_dialect.py 
b/tests/unit_tests/sql/test_impala_dialect.py
new file mode 100644
index 0000000000..130b031c6e
--- /dev/null
+++ b/tests/unit_tests/sql/test_impala_dialect.py
@@ -0,0 +1,28 @@
+# 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.
+
+"""Tests for Impala dialect support in sqlglot."""
+
+from sqlglot import Dialects
+
+from superset.sql.parse import SQLGLOT_DIALECTS
+
+
+def test_impala_dialect_mapped() -> None:
+    """Test that Impala is correctly mapped to Hive dialect."""
+    assert "impala" in SQLGLOT_DIALECTS
+    assert SQLGLOT_DIALECTS["impala"] == Dialects.HIVE

Reply via email to