micsbot commented on issue #20790:
URL: https://github.com/apache/superset/issues/20790#issuecomment-1241525802

   > > The error is solved by changing the method `get_joined_tables` in the 
file 
[38_a9422eeaae74_new_dataset_models_take_2.py](https://github.com/apache/superset/blob/master/superset/migrations/versions/2022-04-01_14-38_a9422eeaae74_new_dataset_models_take_2.py)
 at line 638 by next code:
   > > ```python
   > >     def get_joined_tables(offset, limit):
   > >         # Import aliased from sqlalchemy
   > >         from sqlalchemy.orm import aliased
   > >         # Create alias of NewColumn
   > >         new_column_alias = aliased(NewColumn)
   > >         # Get subquery and give it the alias "sl_colums_2"
   > >         subquery = 
session.query(new_column_alias).offset(offset).limit(limit).subquery("sl_columns_2")
   > >     
   > >         return (
   > >             sa.join(
   > >                 subquery,
   > >                 dataset_column_association_table,
   > >                 # Use column id from subquery 
   > >                 dataset_column_association_table.c.column_id == 
subquery.c.id,
   > >             )
   > >             .join(
   > >                 NewDataset,
   > >                 NewDataset.id == 
dataset_column_association_table.c.dataset_id,
   > >             )
   > >             .join(
   > >                 dataset_table_association_table,
   > >                 # Join tables with physical datasets
   > >                 and_(
   > >                     NewDataset.is_physical,
   > >                     dataset_table_association_table.c.dataset_id == 
NewDataset.id,
   > >                 ),
   > >                 isouter=True,
   > >             )
   > >             .join(Database, Database.id == NewDataset.database_id)
   > >             .join(
   > >                 TableColumn,
   > >                 # Use column uuid from subquery 
   > >                 TableColumn.uuid == subquery.c.uuid,
   > >                 isouter=True,
   > >             )
   > >             .join(
   > >                 SqlMetric,
   > >                 # Use column uuid from subquery 
   > >                 SqlMetric.uuid == subquery.c.uuid,
   > >                 isouter=True,
   > >             )
   > >         )
   > > ```
   > 
   > this query is killing python @snt1017 . Is it working?
   
   Tis query is not working, it is generating a cartesian join. We need to 
change te query to join NewColumn and the new subquery.
   ````
   SELECT sl_columns.id AS column_id, table_columns.column_name, 
sl_columns.changed_by_fk, sl_columns.changed_on, sl_columns.created_on, 
sl_columns.description, sql_metrics.d3format, sl_datasets.external_url, 
sl_columns.extra_json, sl_columns.is_dimensional, sl_columns.is_filterable, 
sl_datasets.is_managed_externally, sl_columns.is_physical, 
sql_metrics.metric_type, table_columns.python_date_format, dbs.sqlalchemy_uri, 
sl_dataset_tables.table_id, coalesce(table_columns.verbose_name, 
sql_metrics.verbose_name) AS verbose_name, sl_columns.warning_text 
   FROM sl_columns, 
        (
                SELECT sl_columns_1.uuid AS uuid, sl_columns_1.created_on AS 
created_on, sl_columns_1.changed_on AS changed_on, sl_columns_1.id AS id, 
sl_columns_1.table_id AS table_id, sl_columns_1.is_aggregation AS 
is_aggregation, sl_columns_1.is_additive AS is_additive, 
sl_columns_1.is_dimensional AS is_dimensional, sl_columns_1.is_filterable AS 
is_filterable, sl_columns_1.is_increase_desired AS is_increase_desired, 
sl_columns_1.is_managed_externally AS is_managed_externally, 
sl_columns_1.is_partition AS is_partition, sl_columns_1.is_physical AS 
is_physical, sl_columns_1.is_temporal AS is_temporal, sl_columns_1.is_spatial 
AS is_spatial, sl_columns_1.name AS name, sl_columns_1.type AS type, 
sl_columns_1.unit AS unit, sl_columns_1.expression AS expression, 
sl_columns_1.description AS description, sl_columns_1.warning_text AS 
warning_text, sl_columns_1.external_url AS external_url, 
sl_columns_1.extra_json AS extra_json, sl_columns_1.created_by_fk AS 
created_by_fk, sl_columns_1.changed_by_fk AS 
 changed_by_fk 
                FROM sl_columns AS sl_columns_1
                LIMIT 0 OFFSET 500
        ) AS sl_columns_2 JOIN sl_dataset_columns
                ON sl_dataset_columns.column_id = sl_columns_2.id JOIN 
sl_datasets
                ON sl_datasets.id = sl_dataset_columns.dataset_id LEFT OUTER 
JOIN sl_dataset_tables
                ON sl_datasets.is_physical AND sl_dataset_tables.dataset_id = 
sl_datasets.id JOIN dbs
                ON dbs.id = sl_datasets.database_id LEFT OUTER JOIN 
table_columns
                ON table_columns.uuid = sl_columns_2.uuid LEFT OUTER JOIN 
sql_metrics
                ON sql_metrics.uuid = sl_columns_2.uuid 
   WHERE sl_columns.is_physical OR
        table_columns.verbose_name IS NOT NULL OR
        table_columns.verbose_name IS NOT NULL OR
        sql_metrics.verbose_name IS NOT NULL OR
        sql_metrics.d3format IS NOT NULL OR
        sql_metrics.metric_type IS NOT NULL
   ````


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to