Always-prog commented on PR #24709:
URL: https://github.com/apache/superset/pull/24709#issuecomment-1691773656

   > Seems safe to remove those outerjoins, yet it's not clear to me what kind 
of requests are you referring to, will assume db request/queries:
   > 
   > Tested with /api/v1/dashboard/8/charts (using the example dashboard Sales)
   > 
   > With this change, generated queries:
   > 
   > ```
   > SELECT dashboards.uuid AS dashboards_uuid, dashboards.created_on AS 
dashboards_created_on, dashboards.changed_on AS dashboards_changed_on, 
dashboards.id AS dashboards_id, dashboards.dashboard_title AS 
dashboards_dashboard_title, dashboards.position_json AS 
dashboards_position_json, dashboards.description AS dashboards_description, 
dashboards.css AS dashboards_css, dashboards.certified_by AS 
dashboards_certified_by, dashboards.certification_details AS 
dashboards_certification_details, dashboards.json_metadata AS 
dashboards_json_metadata, dashboards.slug AS dashboards_slug, 
dashboards.published AS dashboards_published, dashboards.is_managed_externally 
AS dashboards_is_managed_externally, dashboards.external_url AS 
dashboards_external_url, dashboards.created_by_fk AS dashboards_created_by_fk, 
dashboards.changed_by_fk AS dashboards_changed_by_fk
   > superset_app             | FROM dashboards LEFT OUTER JOIN (dashboard_user 
AS dashboard_user_1 JOIN ab_user ON ab_user.id = dashboard_user_1.user_id) ON 
dashboards.id = dashboard_user_1.dashboard_id LEFT OUTER JOIN (dashboard_roles 
AS dashboard_roles_1 JOIN ab_role ON ab_role.id = dashboard_roles_1.role_id) ON 
dashboards.id = dashboard_roles_1.dashboard_id
   > superset_app             | WHERE dashboards.id = %(id_1)s
   > ```
   > 
   > ```
   > SELECT dashboards.uuid AS dashboards_uuid, dashboards.created_on AS 
dashboards_created_on, dashboards.changed_on AS dashboards_changed_on, 
dashboards.id AS dashboards_id, dashboards.dashboard_title AS 
dashboards_dashboard_title, dashboards.position_json AS 
dashboards_position_json, dashboards.description AS dashboards_description, 
dashboards.css AS dashboards_css, dashboards.certified_by AS 
dashboards_certified_by, dashboards.certification_details AS 
dashboards_certification_details, dashboards.json_metadata AS 
dashboards_json_metadata, dashboards.slug AS dashboards_slug, 
dashboards.published AS dashboards_published, dashboards.is_managed_externally 
AS dashboards_is_managed_externally, dashboards.external_url AS 
dashboards_external_url, dashboards.created_by_fk AS dashboards_created_by_fk, 
dashboards.changed_by_fk AS dashboards_changed_by_fk
   > superset_app             | FROM dashboards LEFT OUTER JOIN (dashboard_user 
AS dashboard_user_1 JOIN ab_user ON ab_user.id = dashboard_user_1.user_id) ON 
dashboards.id = dashboard_user_1.dashboard_id LEFT OUTER JOIN (dashboard_roles 
AS dashboard_roles_1 JOIN ab_role ON ab_role.id = dashboard_roles_1.role_id) ON 
dashboards.id = dashboard_roles_1.dashboard_id
   > superset_app             | WHERE dashboards.id = %(id_1)s
   > ```
   > 
   > ```
   > SELECT slices.uuid AS slices_uuid, slices.created_on AS slices_created_on, 
slices.changed_on AS slices_changed_on, slices.id AS slices_id, 
slices.slice_name AS slices_slice_name, slices.datasource_id AS 
slices_datasource_id, slices.datasource_type AS slices_datasource_type, 
slices.datasource_name AS slices_datasource_name, slices.viz_type AS 
slices_viz_type, slices.params AS slices_params, slices.query_context AS 
slices_query_context, slices.description AS slices_description, 
slices.cache_timeout AS slices_cache_timeout, slices.perm AS slices_perm, 
slices.schema_perm AS slices_schema_perm, slices.last_saved_at AS 
slices_last_saved_at, slices.last_saved_by_fk AS slices_last_saved_by_fk, 
slices.certified_by AS slices_certified_by, slices.certification_details AS 
slices_certification_details, slices.is_managed_externally AS 
slices_is_managed_externally, slices.external_url AS slices_external_url, 
slices.created_by_fk AS slices_created_by_fk, slices.changed_by_fk AS 
slices_changed_b
 y_fk
   > superset_app             | FROM slices, dashboard_slices
   > superset_app             | WHERE %(param_1)s = 
dashboard_slices.dashboard_id AND slices.id = dashboard_slices.slice_id
   > ```
   > 
   > ```
   > SELECT tables.uuid AS tables_uuid, tables.created_on AS tables_created_on, 
tables.changed_on AS tables_changed_on, tables.id AS tables_id, 
tables.description AS tables_description, tables.default_endpoint AS 
tables_default_endpoint, tables.is_featured AS tables_is_featured, 
tables.filter_select_enabled AS tables_filter_select_enabled, tables."offset" 
AS tables_offset, tables.cache_timeout AS tables_cache_timeout, tables.params 
AS tables_params, tables.perm AS tables_perm, tables.schema_perm AS 
tables_schema_perm, tables.is_managed_externally AS 
tables_is_managed_externally, tables.external_url AS tables_external_url, 
tables.table_name AS tables_table_name, tables.main_dttm_col AS 
tables_main_dttm_col, tables.database_id AS tables_database_id, 
tables.fetch_values_predicate AS tables_fetch_values_predicate, tables.schema 
AS tables_schema, tables.sql AS tables_sql, tables.is_sqllab_view AS 
tables_is_sqllab_view, tables.template_params AS tables_template_params, 
tables.extra AS tabl
 es_extra, tables.normalize_columns AS tables_normalize_columns, 
tables.created_by_fk AS tables_created_by_fk, tables.changed_by_fk AS 
tables_changed_by_fk, anon_1.slices_datasource_id AS 
anon_1_slices_datasource_id, anon_1.slices_datasource_type AS 
anon_1_slices_datasource_type
   > superset_app             | FROM (SELECT DISTINCT slices.datasource_id AS 
slices_datasource_id, slices.datasource_type AS slices_datasource_type
   > superset_app             | FROM slices, dashboard_slices
   > superset_app             | WHERE %(param_1)s = 
dashboard_slices.dashboard_id AND slices.id = dashboard_slices.slice_id) AS 
anon_1 JOIN tables ON anon_1.slices_datasource_id = tables.id AND 
anon_1.slices_datasource_type = %(datasource_type_1)s
   > ```
   > 
   > Before this change:
   > 
   > ```
   > SELECT dashboards.uuid AS dashboards_uuid, dashboards.created_on AS 
dashboards_created_on, dashboards.changed_on AS dashboards_changed_on, 
dashboards.id AS dashboards_id, dashboards.dashboard_title AS 
dashboards_dashboard_title, dashboards.position_json AS 
dashboards_position_json, dashboards.description AS dashboards_description, 
dashboards.css AS dashboards_css, dashboards.certified_by AS 
dashboards_certified_by, dashboards.certification_details AS 
dashboards_certification_details, dashboards.json_metadata AS 
dashboards_json_metadata, dashboards.slug AS dashboards_slug, 
dashboards.published AS dashboards_published, dashboards.is_managed_externally 
AS dashboards_is_managed_externally, dashboards.external_url AS 
dashboards_external_url, dashboards.created_by_fk AS dashboards_created_by_fk, 
dashboards.changed_by_fk AS dashboards_changed_by_fk
   > superset_app             | FROM dashboards LEFT OUTER JOIN 
(dashboard_slices AS dashboard_slices_1 JOIN slices ON slices.id = 
dashboard_slices_1.slice_id) ON dashboards.id = dashboard_slices_1.dashboard_id 
LEFT OUTER JOIN tables ON slices.datasource_id = tables.id AND 
slices.datasource_type = %(datasource_type_1)s LEFT OUTER JOIN (dashboard_user 
AS dashboard_user_1 JOIN ab_user ON ab_user.id = dashboard_user_1.user_id) ON 
dashboards.id = dashboard_user_1.dashboard_id LEFT OUTER JOIN (dashboard_roles 
AS dashboard_roles_1 JOIN ab_role ON ab_role.id = dashboard_roles_1.role_id) ON 
dashboards.id = dashboard_roles_1.dashboard_id
   > superset_app             | WHERE dashboards.id = %(id_1)s
   > ```
   > 
   > ```
   > SELECT slices.uuid AS slices_uuid, slices.created_on AS slices_created_on, 
slices.changed_on AS slices_changed_on, slices.id AS slices_id, 
slices.slice_name AS slices_slice_name, slices.datasource_id AS 
slices_datasource_id, slices.datasource_type AS slices_datasource_type, 
slices.datasource_name AS slices_datasource_name, slices.viz_type AS 
slices_viz_type, slices.params AS slices_params, slices.query_context AS 
slices_query_context, slices.description AS slices_description, 
slices.cache_timeout AS slices_cache_timeout, slices.perm AS slices_perm, 
slices.schema_perm AS slices_schema_perm, slices.last_saved_at AS 
slices_last_saved_at, slices.last_saved_by_fk AS slices_last_saved_by_fk, 
slices.certified_by AS slices_certified_by, slices.certification_details AS 
slices_certification_details, slices.is_managed_externally AS 
slices_is_managed_externally, slices.external_url AS slices_external_url, 
slices.created_by_fk AS slices_created_by_fk, slices.changed_by_fk AS 
slices_changed_b
 y_fk
   > superset_app             | FROM slices, dashboard_slices
   > superset_app             | WHERE %(param_1)s = 
dashboard_slices.dashboard_id AND slices.id = dashboard_slices.slice_id
   > ```
   > 
   > ```
   > SELECT tables.uuid AS tables_uuid, tables.created_on AS tables_created_on, 
tables.changed_on AS tables_changed_on, tables.id AS tables_id, 
tables.description AS tables_description, tables.default_endpoint AS 
tables_default_endpoint, tables.is_featured AS tables_is_featured, 
tables.filter_select_enabled AS tables_filter_select_enabled, tables."offset" 
AS tables_offset, tables.cache_timeout AS tables_cache_timeout, tables.params 
AS tables_params, tables.perm AS tables_perm, tables.schema_perm AS 
tables_schema_perm, tables.is_managed_externally AS 
tables_is_managed_externally, tables.external_url AS tables_external_url, 
tables.table_name AS tables_table_name, tables.main_dttm_col AS 
tables_main_dttm_col, tables.database_id AS tables_database_id, 
tables.fetch_values_predicate AS tables_fetch_values_predicate, tables.schema 
AS tables_schema, tables.sql AS tables_sql, tables.is_sqllab_view AS 
tables_is_sqllab_view, tables.template_params AS tables_template_params, 
tables.extra AS tabl
 es_extra, tables.normalize_columns AS tables_normalize_columns, 
tables.created_by_fk AS tables_created_by_fk, tables.changed_by_fk AS 
tables_changed_by_fk, anon_1.slices_datasource_id AS 
anon_1_slices_datasource_id, anon_1.slices_datasource_type AS 
anon_1_slices_datasource_type
   > superset_app             | FROM (SELECT DISTINCT slices.datasource_id AS 
slices_datasource_id, slices.datasource_type AS slices_datasource_type
   > superset_app             | FROM slices, dashboard_slices
   > superset_app             | WHERE %(param_1)s = 
dashboard_slices.dashboard_id AND slices.id = dashboard_slices.slice_id) AS 
anon_1 JOIN tables ON anon_1.slices_datasource_id = tables.id AND 
anon_1.slices_datasource_type = %(datasource_type_1)s
   > ```
   
   Hello!
   I mean, when we join slices in the query, the number of rows returned 
corresponds to the number of slices in the dashboard. Each row contains the 
JSON of the dashboard. As a result, if the dashboard JSON is 1MB in size and 
there are 100 slices, it will return 100MB, not 1MB.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@superset.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@superset.apache.org
For additional commands, e-mail: notifications-h...@superset.apache.org

Reply via email to