You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2025/07/30 20:08:44 UTC
(superset) 03/04: WIP
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch snowflake-semantic-layer
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 01c587361fd56b4a63d38122ee693b914599604b
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Mon Jul 28 12:28:13 2025 -0400
WIP
---
superset/db_engine_specs/snowflake.py | 34 +++++++++++++++++++++++++++++-----
1 file changed, 29 insertions(+), 5 deletions(-)
diff --git a/superset/db_engine_specs/snowflake.py b/superset/db_engine_specs/snowflake.py
index ac3e50d199..27de00bb66 100644
--- a/superset/db_engine_specs/snowflake.py
+++ b/superset/db_engine_specs/snowflake.py
@@ -192,7 +192,7 @@ DESC SEMANTIC VIEW {quoted_semantic_view_name}
FROM $1
WHERE
"object_kind" = 'DIMENSION' AND
- "property" IN ('DATA_TYPE', 'TABLE', 'EXPRESSION');
+ "property" IN ('DATA_TYPE', 'TABLE');
""" # noqa: S608 (semantic_view.name is quoted)
rows = self.execute(sql)
@@ -204,8 +204,7 @@ DESC SEMANTIC VIEW {quoted_semantic_view_name}
table = next(iter(attributes["TABLE"]))
dimension_name = table + "." + name
- expression = next(iter(attributes["EXPRESSION"]))
- column = SemanticColumn(SemanticTable(table), expression)
+ column = SemanticColumn(SemanticTable(table), name)
type_ = self.get_type(next(iter(attributes["DATA_TYPE"])))
dimensions.add(SemanticDimension(column, dimension_name, type_))
@@ -264,10 +263,26 @@ DESC SEMANTIC VIEW {quoted_semantic_view_name}
semantic_view = exp.SemanticView(
this=Table(this=exp.Identifier(this=semantic_view.name, quoted=True)),
dimensions=[
- exp.Column(this=exp.Identifier(this=dimension.name, quoted=True))
+ exp.Column(
+ this=exp.Identifier(this=dimension.column.name, quoted=True),
+ table=exp.Identifier(
+ this=dimension.column.relation.name,
+ quoted=True,
+ ),
+ )
for dimension in dimensions
],
- metrics=[],
+ metrics=[
+ exp.Column(
+ this=exp.Identifier(this=table, quoted=True),
+ table=exp.Identifier(this=column, quoted=True),
+ )
+ for table, column in (
+ metric.name.split(".", 1)
+ for metric in metrics
+ if "." in metric.name
+ )
+ ],
# where= XXX push predicates
)
query = exp.Select(
@@ -294,6 +309,15 @@ DESC SEMANTIC VIEW {quoted_semantic_view_name}
return query
+ def get_query_from_standard_sql(
+ self,
+ semantic_view: SemanticView,
+ sql: str,
+ ) -> Query:
+ statement = SQLStatement(sql, "snowflake")
+ # check if any of the tables in the statement is a semantic view
+
+
class SnowflakeEngineSpec(PostgresBaseEngineSpec):
engine = "snowflake"