You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by vi...@apache.org on 2023/06/12 09:14:34 UTC
[superset] branch master updated: fix(sqllab): Inefficient SqlaTable query (#24343) (#24344)
This is an automated email from the ASF dual-hosted git repository.
villebro 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 6d9df432c1 fix(sqllab): Inefficient SqlaTable query (#24343) (#24344)
6d9df432c1 is described below
commit 6d9df432c1bb5c4c04d4a7522a212ad26e03251f
Author: Rob Moore <gi...@users.noreply.github.com>
AuthorDate: Mon Jun 12 10:14:07 2023 +0100
fix(sqllab): Inefficient SqlaTable query (#24343) (#24344)
---
superset/databases/commands/tables.py | 12 +++++++++++-
superset/views/core.py | 9 ++++++++-
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/superset/databases/commands/tables.py b/superset/databases/commands/tables.py
index b7dbb4d461..4f262225a4 100644
--- a/superset/databases/commands/tables.py
+++ b/superset/databases/commands/tables.py
@@ -17,6 +17,8 @@
import logging
from typing import Any, cast
+from sqlalchemy.orm import lazyload, load_only
+
from superset.commands.base import BaseCommand
from superset.connectors.sqla.models import SqlaTable
from superset.databases.commands.exceptions import (
@@ -74,10 +76,18 @@ class TablesDatabaseCommand(BaseCommand):
extra_dict_by_name = {
table.name: table.extra_dict
for table in (
- db.session.query(SqlaTable).filter(
+ db.session.query(SqlaTable)
+ .filter(
SqlaTable.database_id == self._model.id,
SqlaTable.schema == self._schema_name,
)
+ .options(
+ load_only(
+ SqlaTable.schema, SqlaTable.table_name, SqlaTable.extra
+ ),
+ lazyload(SqlaTable.columns),
+ lazyload(SqlaTable.metrics),
+ )
).all()
}
diff --git a/superset/views/core.py b/superset/views/core.py
index 53e088ebe6..61f70434fe 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -39,6 +39,7 @@ from flask_appbuilder.security.sqla import models as ab_models
from flask_babel import gettext as __, lazy_gettext as _
from sqlalchemy import and_, or_
from sqlalchemy.exc import DBAPIError, NoSuchModuleError, SQLAlchemyError
+from sqlalchemy.orm import lazyload, load_only
from superset import (
app,
@@ -1014,10 +1015,16 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
extra_dict_by_name = {
table.name: table.extra_dict
for table in (
- db.session.query(SqlaTable).filter(
+ db.session.query(SqlaTable)
+ .filter(
SqlaTable.database_id == database.id,
SqlaTable.schema == schema_parsed,
)
+ .options(
+ load_only(SqlaTable.schema, SqlaTable.table_name, SqlaTable.extra),
+ lazyload(SqlaTable.columns),
+ lazyload(SqlaTable.metrics),
+ )
).all()
}