Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(sqla): Add explicit bidirectional performant relationships for SQLA model #22413

Conversation

john-bodley
Copy link
Member

@john-bodley john-bodley commented Dec 14, 2022

SUMMARY

This PR partially addresses recommendation #⁠1 in #14383 by defining the explicit bidirectional relationship mapping between the SqlaTable model (parent) and the corresponding SqlMetric and TableColumn models (children) to improve the performance of the GET /api/v1/dataset/{pk} endpoint—in conjunction with dpgaspar/Flask-AppBuilder#1961. This PR is a rehash of #22332 after it was discovered there were numerous shortcomings.

The motivation was driven by a specific (and somewhat atypical) virtual dataset at Airbnb which is comprised of over 7,000 columns and 30,000 metrics where previously the /api/v1/dataset/{pk} endpoint would timeout due to:

  1. FAB was using Joined Eager Loading which "eagerly" loads the children alongside the parent, however this results in a slew of LEFT OUTER JOINs which will rapidly result into a expansive interim result set—from a multiplicative combinatorial sense—given that the SqlaTable model has potentially multiple high cardinality relationships (owners, columns, metrics). Furthermore the result set—which is repetitive in nature—requires further overhead by SQLAlchemy to de-duplicate the rows against the actual model record.
  2. Superset was using lazy loading (see this Slack thread) when back referencing the TableColumn.table field when evaluating the columns.type_generic field which resulted in a SELECT statement per column, i.e., for each column it would execute a SQL statement to fetch the corresponding table ID.

The first issue is partially addressed in dpgaspar/Flask-AppBuilder#1961 in conjunction with this change—as FAB defers the relationship loading logic to Superset—which meant that the response time (excluding downloading of the payload) went from timing out to ~ 20 seconds. The second issue was addressed by defining eager loading of the back (parent) references which are pre-defined whilst fetching the SqlaTable model. This further reduced the response time to ~ 5 seconds. Note this PR is safe to merge prior to the FAB change as in the context of FAB the selectin—a more extensible form of select which can be used when fetching multiple SqlaTable columns—relationship loading technique is ignored given that FAB is using an explicit joinedload which is akin to lazy="joined".

Note to further improve the performance of the GET /api/v1/dataset/{pk} endpoint all requests should likely provide a filter which includes only the subset of the columns required. This should both reduce the backend complexity as well as reduce the size of the response payload.

BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

TESTING INSTRUCTIONS

CI. Tested locally.

ADDITIONAL INFORMATION

  • Has associated issue: [SIP-64] Migrate filter_box to Dashboard Native Filter Component #14383
  • Required feature flags:
  • Changes UI
  • Includes DB Migration (follow approval process in SIP-59)
    • Migration is atomic, supports rollback & is backwards-compatible
    • Confirm DB migration upgrade and downgrade tested
    • Runtime estimates and downtime expectations provided
  • Introduces new feature or API
  • Removes existing feature or API

@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch from f5105a6 to 653ebd2 Compare December 14, 2022 04:41
backref=backref("columns", cascade="all, delete-orphan"),
foreign_keys=[table_id],
back_populates="columns",
lazy="joined", # Eager loading for efficient parent referencing.
Copy link
Member Author

@john-bodley john-bodley Dec 14, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The default is lazy="select" which results in lazy loading and a SELECT statement per column.

Copy link
Member

@ktmud ktmud left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👏 👏 I swear I've dealt with these join magic somewhere but I can't remember where lol

@john-bodley john-bodley changed the title chore: Add explicit bidirectional relationships for SQLA model chore: Add explicit bidirectional performant relationships for SQLA model Dec 14, 2022
@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch 3 times, most recently from 76b1471 to b4695e8 Compare December 14, 2022 07:27
@pull-request-size pull-request-size bot added size/M and removed size/S labels Dec 14, 2022
@villebro
Copy link
Member

@john-bodley this is super deep stuff, so I really need to dig into some docs before being able to review this properly. I'll do my best to have this reviewed before Friday morning PST.

@dpgaspar
Copy link
Member

I do like the non explicit change on FAB, but it may have some consequences. I want to check some get list performance on dashboards, charts, datasets, currently CI is failling also

@@ -226,8 +226,8 @@ class TableColumn(Model, BaseColumn, CertificationMixin):
table_id = Column(Integer, ForeignKey("tables.id"))
table: SqlaTable = relationship(
"SqlaTable",
backref=backref("columns", cascade="all, delete-orphan"),
foreign_keys=[table_id],
back_populates="columns",
Copy link
Member Author

@john-bodley john-bodley Dec 14, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

backrefs, per here, is deemed legacy though is used in some instances—such as the database <> table relationship given how/where the code is defined.

@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch from b4695e8 to 3063597 Compare December 14, 2022 21:18
Copy link
Member

@dpgaspar dpgaspar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

posting some test findings performed locally with examples data:

Without this PR and without the FAB change:

/api/v1/dashboard/: Response time avg: ~27ms

  • Query:
SELECT anon_1.created_by_id,
       anon_1.created_by_first_name,
       anon_1.created_by_last_name,
       anon_1.changed_by_id,
       anon_1.changed_by_first_name,
       anon_1.changed_by_last_name,
       anon_1.changed_by_username,
       anon_1.dashboards_created_on,
       anon_1.dashboards_changed_on,
       anon_1.dashboards_id,
       anon_1.dashboards_dashboard_title,
       anon_1.dashboards_position_json,
       anon_1.dashboards_css,
       anon_1.dashboards_certified_by,
       anon_1.dashboards_certification_details,
       anon_1.dashboards_json_metadata,
       anon_1.dashboards_slug,
       anon_1.dashboards_published,
       anon_1.dashboards_is_managed_externally,
       anon_1.dashboards_created_by_fk,
       anon_1.dashboards_changed_by_fk,
       ab_user_1.id,
       ab_user_1.first_name,
       ab_user_1.last_name,
       ab_user_1.username,
       ab_user_1.email,
       ab_role_1.id AS id_1,
       ab_role_1.name
FROM   (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,
               changed_by.id                    AS changed_by_id,
               changed_by.first_name            AS changed_by_first_name,
               changed_by.last_name             AS changed_by_last_name,
               changed_by.username              AS changed_by_username,
               changed_by.password              AS changed_by_password,
               changed_by.active                AS changed_by_active,
               changed_by.email                 AS changed_by_email,
               changed_by.last_login            AS changed_by_last_login,
               changed_by.login_count           AS changed_by_login_count,
               changed_by.fail_login_count      AS changed_by_fail_login_count,
               changed_by.created_on            AS changed_by_created_on,
               changed_by.changed_on            AS changed_by_changed_on,
               changed_by.created_by_fk         AS changed_by_created_by_fk,
               changed_by.changed_by_fk         AS changed_by_changed_by_fk,
               created_by.id                    AS created_by_id,
               created_by.first_name            AS created_by_first_name,
               created_by.last_name             AS created_by_last_name,
               created_by.username              AS created_by_username,
               created_by.password              AS created_by_password,
               created_by.active                AS created_by_active,
               created_by.email                 AS created_by_email,
               created_by.last_login            AS created_by_last_login,
               created_by.login_count           AS created_by_login_count,
               created_by.fail_login_count      AS created_by_fail_login_count,
               created_by.created_on            AS created_by_created_on,
               created_by.changed_on            AS created_by_changed_on,
               created_by.created_by_fk         AS created_by_created_by_fk,
               created_by.changed_by_fk         AS created_by_changed_by_fk
        FROM   dashboards
               LEFT OUTER JOIN ab_user AS changed_by
                            ON dashboards.changed_by_fk = changed_by.id
               LEFT OUTER JOIN ab_user AS created_by
                            ON dashboards.created_by_fk = created_by.id
        ORDER  BY dashboards.changed_on DESC
        LIMIT  :param_1) AS anon_1
       LEFT OUTER JOIN (dashboard_user AS dashboard_user_1
                        JOIN ab_user AS ab_user_1
                          ON ab_user_1.id = dashboard_user_1.user_id)
                    ON anon_1.dashboards_id = dashboard_user_1.dashboard_id
       LEFT OUTER JOIN (dashboard_roles AS dashboard_roles_1
                        JOIN ab_role AS ab_role_1
                          ON ab_role_1.id = dashboard_roles_1.role_id)
                    ON anon_1.dashboards_id = dashboard_roles_1.dashboard_id
ORDER  BY anon_1.dashboards_changed_on DESC 

/api/v1/dataset/1: Response time avg: ~2300ms

  • Query:
SELECT anon_1.database_id,
       anon_1.database_database_name,
       anon_1.created_by_id,
       anon_1.created_by_first_name,
       anon_1.created_by_last_name,
       anon_1.changed_by_id,
       anon_1.changed_by_first_name,
       anon_1.changed_by_last_name,
       anon_1.tables_created_on,
       anon_1.tables_changed_on,
       anon_1.tables_id,
       anon_1.tables_description,
       anon_1.tables_default_endpoint,
       anon_1.tables_filter_select_enabled,
       anon_1.tables_offset,
       anon_1.tables_cache_timeout,
       anon_1.tables_table_name,
       anon_1.tables_main_dttm_col,
       anon_1.tables_database_id,
       anon_1.tables_fetch_values_predicate,
       anon_1.tables_schema,
       anon_1.tables_sql,
       anon_1.tables_is_sqllab_view,
       anon_1.tables_template_params,
       anon_1.tables_extra,
       anon_1.tables_created_by_fk,
       anon_1.tables_changed_by_fk,
       ab_user_1.id,
       ab_user_1.first_name,
       ab_user_1.last_name,
       ab_user_1.username,
       table_columns_1.uuid,
       table_columns_1.created_on,
       table_columns_1.changed_on,
       table_columns_1.id         AS id_1,
       table_columns_1.column_name,
       table_columns_1.verbose_name,
       table_columns_1.is_active,
       table_columns_1.type,
       table_columns_1.advanced_data_type,
       table_columns_1.groupby,
       table_columns_1.filterable,
       table_columns_1.description,
       table_columns_1.is_dttm,
       table_columns_1.expression,
       table_columns_1.python_date_format,
       table_columns_1.extra,
       sql_metrics_1.created_on   AS created_on_1,
       sql_metrics_1.changed_on   AS changed_on_1,
       sql_metrics_1.id           AS id_2,
       sql_metrics_1.metric_name,
       sql_metrics_1.verbose_name AS verbose_name_1,
       sql_metrics_1.metric_type,
       sql_metrics_1.description  AS description_1,
       sql_metrics_1.d3format,
       sql_metrics_1.warning_text,
       sql_metrics_1.expression   AS expression_1,
       sql_metrics_1.extra        AS extra_1
FROM   (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 tables_extra,
               tables.created_by_fk               AS tables_created_by_fk,
               tables.changed_by_fk               AS tables_changed_by_fk,
               database.uuid                      AS database_uuid,
               database.created_on                AS database_created_on,
               database.changed_on                AS database_changed_on,
               database.id                        AS database_id,
               database.verbose_name              AS database_verbose_name,
               database.database_name             AS database_database_name,
               database.sqlalchemy_uri            AS database_sqlalchemy_uri,
               database.password                  AS database_password,
               database.cache_timeout             AS database_cache_timeout,
               database.select_as_create_table_as AS
               database_select_as_create_table_as
                      ,
               database.expose_in_sqllab          AS
                      database_expose_in_sqllab,
               database.configuration_method      AS
               database_configuration_method,
               database.allow_run_async           AS database_allow_run_async,
               database.allow_file_upload         AS database_allow_file_upload,
               database.allow_ctas                AS database_allow_ctas,
               database.allow_cvas                AS database_allow_cvas,
               database.allow_dml                 AS database_allow_dml,
               database.force_ctas_schema         AS database_force_ctas_schema,
               database.extra                     AS database_extra,
               database.encrypted_extra           AS database_encrypted_extra,
               database.impersonate_user          AS database_impersonate_user,
               database.server_cert               AS database_server_cert,
               database.is_managed_externally     AS
               database_is_managed_externally,
               database.external_url              AS database_external_url,
               database.created_by_fk             AS database_created_by_fk,
               database.changed_by_fk             AS database_changed_by_fk,
               created_by.id                      AS created_by_id,
               created_by.first_name              AS created_by_first_name,
               created_by.last_name               AS created_by_last_name,
               created_by.username                AS created_by_username,
               created_by.password                AS created_by_password,
               created_by.active                  AS created_by_active,
               created_by.email                   AS created_by_email,
               created_by.last_login              AS created_by_last_login,
               created_by.login_count             AS created_by_login_count,
               created_by.fail_login_count        AS created_by_fail_login_count
               ,
               created_by.created_on              AS
               created_by_created_on,
               created_by.changed_on              AS created_by_changed_on,
               created_by.created_by_fk           AS created_by_created_by_fk,
               created_by.changed_by_fk           AS created_by_changed_by_fk,
               changed_by.id                      AS changed_by_id,
               changed_by.first_name              AS changed_by_first_name,
               changed_by.last_name               AS changed_by_last_name,
               changed_by.username                AS changed_by_username,
               changed_by.password                AS changed_by_password,
               changed_by.active                  AS changed_by_active,
               changed_by.email                   AS changed_by_email,
               changed_by.last_login              AS changed_by_last_login,
               changed_by.login_count             AS changed_by_login_count,
               changed_by.fail_login_count        AS changed_by_fail_login_count
               ,
               changed_by.created_on              AS
               changed_by_created_on,
               changed_by.changed_on              AS changed_by_changed_on,
               changed_by.created_by_fk           AS changed_by_created_by_fk,
               changed_by.changed_by_fk           AS changed_by_changed_by_fk
        FROM   tables
               LEFT OUTER JOIN dbs AS database
                            ON tables.database_id = database.id
               LEFT OUTER JOIN ab_user AS created_by
                            ON tables.created_by_fk = created_by.id
               LEFT OUTER JOIN ab_user AS changed_by
                            ON tables.changed_by_fk = changed_by.id
        WHERE  tables.id = :id_3) AS anon_1
       LEFT OUTER JOIN (sqlatable_user AS sqlatable_user_1
                        JOIN ab_user AS ab_user_1
                          ON ab_user_1.id = sqlatable_user_1.user_id)
                    ON anon_1.tables_id = sqlatable_user_1.table_id
       LEFT OUTER JOIN table_columns AS table_columns_1
                    ON anon_1.tables_id = table_columns_1.table_id
       LEFT OUTER JOIN sql_metrics AS sql_metrics_1
                    ON anon_1.tables_id = sql_metrics_1.table_id 

Without this PR and with the FAB change:

/api/v1/dashboard/: Response time avg: ~61ms

  • Query:
SELECT anon_1.created_by_id,
       anon_1.created_by_first_name,
       anon_1.created_by_last_name,
       anon_1.changed_by_id,
       anon_1.changed_by_first_name,
       anon_1.changed_by_last_name,
       anon_1.changed_by_username,
       anon_1.dashboards_created_on,
       anon_1.dashboards_changed_on,
       anon_1.dashboards_id,
       anon_1.dashboards_dashboard_title,
       anon_1.dashboards_position_json,
       anon_1.dashboards_css,
       anon_1.dashboards_certified_by,
       anon_1.dashboards_certification_details,
       anon_1.dashboards_json_metadata,
       anon_1.dashboards_slug,
       anon_1.dashboards_published,
       anon_1.dashboards_is_managed_externally,
       anon_1.dashboards_created_by_fk,
       anon_1.dashboards_changed_by_fk
FROM   (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,
               changed_by.id                    AS changed_by_id,
               changed_by.first_name            AS changed_by_first_name,
               changed_by.last_name             AS changed_by_last_name,
               changed_by.username              AS changed_by_username,
               changed_by.password              AS changed_by_password,
               changed_by.active                AS changed_by_active,
               changed_by.email                 AS changed_by_email,
               changed_by.last_login            AS changed_by_last_login,
               changed_by.login_count           AS changed_by_login_count,
               changed_by.fail_login_count      AS changed_by_fail_login_count,
               changed_by.created_on            AS changed_by_created_on,
               changed_by.changed_on            AS changed_by_changed_on,
               changed_by.created_by_fk         AS changed_by_created_by_fk,
               changed_by.changed_by_fk         AS changed_by_changed_by_fk,
               created_by.id                    AS created_by_id,
               created_by.first_name            AS created_by_first_name,
               created_by.last_name             AS created_by_last_name,
               created_by.username              AS created_by_username,
               created_by.password              AS created_by_password,
               created_by.active                AS created_by_active,
               created_by.email                 AS created_by_email,
               created_by.last_login            AS created_by_last_login,
               created_by.login_count           AS created_by_login_count,
               created_by.fail_login_count      AS created_by_fail_login_count,
               created_by.created_on            AS created_by_created_on,
               created_by.changed_on            AS created_by_changed_on,
               created_by.created_by_fk         AS created_by_created_by_fk,
               created_by.changed_by_fk         AS created_by_changed_by_fk
        FROM   dashboards
               LEFT OUTER JOIN ab_user AS changed_by
                            ON dashboards.changed_by_fk = changed_by.id
               LEFT OUTER JOIN ab_user AS created_by
                            ON dashboards.created_by_fk = created_by.id
        ORDER  BY dashboards.changed_on DESC
        LIMIT  :param_1) AS anon_1
ORDER  BY anon_1.dashboards_changed_on DESC 

/api/v1/dataset/1: Response time avg: ~875ms

  • Query:
SELECT anon_1.database_id,
       anon_1.database_database_name,
       anon_1.created_by_id,
       anon_1.created_by_first_name,
       anon_1.created_by_last_name,
       anon_1.changed_by_id,
       anon_1.changed_by_first_name,
       anon_1.changed_by_last_name,
       anon_1.tables_created_on,
       anon_1.tables_changed_on,
       anon_1.tables_id,
       anon_1.tables_description,
       anon_1.tables_default_endpoint,
       anon_1.tables_filter_select_enabled,
       anon_1.tables_offset,
       anon_1.tables_cache_timeout,
       anon_1.tables_table_name,
       anon_1.tables_main_dttm_col,
       anon_1.tables_database_id,
       anon_1.tables_fetch_values_predicate,
       anon_1.tables_schema,
       anon_1.tables_sql,
       anon_1.tables_is_sqllab_view,
       anon_1.tables_template_params,
       anon_1.tables_extra,
       anon_1.tables_created_by_fk,
       anon_1.tables_changed_by_fk
FROM   (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 tables_extra,
               tables.created_by_fk               AS tables_created_by_fk,
               tables.changed_by_fk               AS tables_changed_by_fk,
               database.uuid                      AS database_uuid,
               database.created_on                AS database_created_on,
               database.changed_on                AS database_changed_on,
               database.id                        AS database_id,
               database.verbose_name              AS database_verbose_name,
               database.database_name             AS database_database_name,
               database.sqlalchemy_uri            AS database_sqlalchemy_uri,
               database.password                  AS database_password,
               database.cache_timeout             AS database_cache_timeout,
               database.select_as_create_table_as AS
               database_select_as_create_table_as
                      ,
               database.expose_in_sqllab          AS
                      database_expose_in_sqllab,
               database.configuration_method      AS
               database_configuration_method,
               database.allow_run_async           AS database_allow_run_async,
               database.allow_file_upload         AS database_allow_file_upload,
               database.allow_ctas                AS database_allow_ctas,
               database.allow_cvas                AS database_allow_cvas,
               database.allow_dml                 AS database_allow_dml,
               database.force_ctas_schema         AS database_force_ctas_schema,
               database.extra                     AS database_extra,
               database.encrypted_extra           AS database_encrypted_extra,
               database.impersonate_user          AS database_impersonate_user,
               database.server_cert               AS database_server_cert,
               database.is_managed_externally     AS
               database_is_managed_externally,
               database.external_url              AS database_external_url,
               database.created_by_fk             AS database_created_by_fk,
               database.changed_by_fk             AS database_changed_by_fk,
               created_by.id                      AS created_by_id,
               created_by.first_name              AS created_by_first_name,
               created_by.last_name               AS created_by_last_name,
               created_by.username                AS created_by_username,
               created_by.password                AS created_by_password,
               created_by.active                  AS created_by_active,
               created_by.email                   AS created_by_email,
               created_by.last_login              AS created_by_last_login,
               created_by.login_count             AS created_by_login_count,
               created_by.fail_login_count        AS created_by_fail_login_count
               ,
               created_by.created_on              AS
               created_by_created_on,
               created_by.changed_on              AS created_by_changed_on,
               created_by.created_by_fk           AS created_by_created_by_fk,
               created_by.changed_by_fk           AS created_by_changed_by_fk,
               changed_by.id                      AS changed_by_id,
               changed_by.first_name              AS changed_by_first_name,
               changed_by.last_name               AS changed_by_last_name,
               changed_by.username                AS changed_by_username,
               changed_by.password                AS changed_by_password,
               changed_by.active                  AS changed_by_active,
               changed_by.email                   AS changed_by_email,
               changed_by.last_login              AS changed_by_last_login,
               changed_by.login_count             AS changed_by_login_count,
               changed_by.fail_login_count        AS changed_by_fail_login_count
               ,
               changed_by.created_on              AS
               changed_by_created_on,
               changed_by.changed_on              AS changed_by_changed_on,
               changed_by.created_by_fk           AS changed_by_created_by_fk,
               changed_by.changed_by_fk           AS changed_by_changed_by_fk
        FROM   tables
               LEFT OUTER JOIN dbs AS database
                            ON tables.database_id = database.id
               LEFT OUTER JOIN ab_user AS created_by
                            ON tables.created_by_fk = created_by.id
               LEFT OUTER JOIN ab_user AS changed_by
                            ON tables.changed_by_fk = changed_by.id
        WHERE  tables.id = :id_1) AS anon_1 

With this PR and with the FAB change:

/api/v1/dashboard/: Response time avg: ~61ms

  • Query: Same has without this PR and with the FAB change

/api/v1/dataset/1: Response time avg: ~610ms

  • Query:
SELECT anon_1.database_id,
       anon_1.database_database_name,
       anon_1.created_by_id,
       anon_1.created_by_first_name,
       anon_1.created_by_last_name,
       anon_1.changed_by_id,
       anon_1.changed_by_first_name,
       anon_1.changed_by_last_name,
       anon_1.tables_created_on,
       anon_1.tables_changed_on,
       anon_1.tables_id,
       anon_1.tables_description,
       anon_1.tables_default_endpoint,
       anon_1.tables_filter_select_enabled,
       anon_1.tables_offset,
       anon_1.tables_cache_timeout,
       anon_1.tables_table_name,
       anon_1.tables_main_dttm_col,
       anon_1.tables_database_id,
       anon_1.tables_fetch_values_predicate,
       anon_1.tables_schema,
       anon_1.tables_sql,
       anon_1.tables_is_sqllab_view,
       anon_1.tables_template_params,
       anon_1.tables_extra,
       anon_1.tables_created_by_fk,
       anon_1.tables_changed_by_fk
FROM   (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 tables_extra,
               tables.created_by_fk               AS tables_created_by_fk,
               tables.changed_by_fk               AS tables_changed_by_fk,
               database.uuid                      AS database_uuid,
               database.created_on                AS database_created_on,
               database.changed_on                AS database_changed_on,
               database.id                        AS database_id,
               database.verbose_name              AS database_verbose_name,
               database.database_name             AS database_database_name,
               database.sqlalchemy_uri            AS database_sqlalchemy_uri,
               database.password                  AS database_password,
               database.cache_timeout             AS database_cache_timeout,
               database.select_as_create_table_as AS
               database_select_as_create_table_as
                      ,
               database.expose_in_sqllab          AS
                      database_expose_in_sqllab,
               database.configuration_method      AS
               database_configuration_method,
               database.allow_run_async           AS database_allow_run_async,
               database.allow_file_upload         AS database_allow_file_upload,
               database.allow_ctas                AS database_allow_ctas,
               database.allow_cvas                AS database_allow_cvas,
               database.allow_dml                 AS database_allow_dml,
               database.force_ctas_schema         AS database_force_ctas_schema,
               database.extra                     AS database_extra,
               database.encrypted_extra           AS database_encrypted_extra,
               database.impersonate_user          AS database_impersonate_user,
               database.server_cert               AS database_server_cert,
               database.is_managed_externally     AS
               database_is_managed_externally,
               database.external_url              AS database_external_url,
               database.created_by_fk             AS database_created_by_fk,
               database.changed_by_fk             AS database_changed_by_fk,
               created_by.id                      AS created_by_id,
               created_by.first_name              AS created_by_first_name,
               created_by.last_name               AS created_by_last_name,
               created_by.username                AS created_by_username,
               created_by.password                AS created_by_password,
               created_by.active                  AS created_by_active,
               created_by.email                   AS created_by_email,
               created_by.last_login              AS created_by_last_login,
               created_by.login_count             AS created_by_login_count,
               created_by.fail_login_count        AS created_by_fail_login_count
               ,
               created_by.created_on              AS
               created_by_created_on,
               created_by.changed_on              AS created_by_changed_on,
               created_by.created_by_fk           AS created_by_created_by_fk,
               created_by.changed_by_fk           AS created_by_changed_by_fk,
               changed_by.id                      AS changed_by_id,
               changed_by.first_name              AS changed_by_first_name,
               changed_by.last_name               AS changed_by_last_name,
               changed_by.username                AS changed_by_username,
               changed_by.password                AS changed_by_password,
               changed_by.active                  AS changed_by_active,
               changed_by.email                   AS changed_by_email,
               changed_by.last_login              AS changed_by_last_login,
               changed_by.login_count             AS changed_by_login_count,
               changed_by.fail_login_count        AS changed_by_fail_login_count
               ,
               changed_by.created_on              AS
               changed_by_created_on,
               changed_by.changed_on              AS changed_by_changed_on,
               changed_by.created_by_fk           AS changed_by_created_by_fk,
               changed_by.changed_by_fk           AS changed_by_changed_by_fk
        FROM   tables
               LEFT OUTER JOIN dbs AS database
                            ON tables.database_id = database.id
               LEFT OUTER JOIN ab_user AS created_by
                            ON tables.created_by_fk = created_by.id
               LEFT OUTER JOIN ab_user AS changed_by
                            ON tables.changed_by_fk = changed_by.id
        WHERE  tables.id = :id_1) AS anon_1 

Has expected the FAB change will default outer joins to lazy, this will cause general impact on get list since nested responses will generate N+1 queries on this case. I still like your change but it needs to be an opt in feature, example use a config key or a new ModelRestApi attribute.

Regarding specifically /api/v1/dataset/<id> I think that the problem is on the fact that we are nesting a big payload that is not paginated, so your approach with /api/v1/dataset/<id>/column/ is more desirable but with pagination included. On this case we should remove the metrics, columns nested payload out of /api/v1/dataset/<id> and adapt the frontend accordingly. Nested payloads are fine has long has the childs are not way bigger then their parents.

Ultimately do note that we can always implement our own custom endpoints on top of any get or get_list, with our own specific queries, yet the problem with huge non paginated nested payloads will still apply.

@john-bodley
Copy link
Member Author

john-bodley commented Dec 20, 2022

Thanks @dpgaspar for the detailed analysis. BTW I'm not sure that the two queries which include the FAB change (and their associated timings) are complete as they don't include the additional SELECT statements for fetching the columns and metrics.

The TL;DR—regarding performance—from you analysis is:

FAB Superset (FWD) Superset (BWD) Endpoint Response Time Difference
joined joined* select /api/v1/dashboard/ ~ 27 ms N/A
joined joined * select /api/v1/dashboard/1 ~ 2,300 ms N/A
default select select /api/v1/dashboard/ ~ 61 ms + 34 ms (+ 126%)
default select select /api/v1/dashboard/1 ~ 875 ms - 1,425 ms (- 62%)
default selectin joined /api/v1/dashboard/ ~ 61 ms + 34 ms (+ 126%)
default selectin joined /api/v1/dashboard/1 ~ 610 ms - 1,690 ms (- 73.5%)

* By enforcement via FAB.

which indicates that there is a performance hit (albeit relatively small from an absolute perspective) for the /api/v1/dashboard/ endpoint, however there is a signification performance improvement (from both an absolute and relative perspective) for the /api/v1/dashboard/1 endpoint, i.e., the results seem quite favorable.

Regarding the get list concern—generating N + 1 queries—I'm not sure if this will materialize given we're using the selectin` eager loading which mentions that,

In most cases, selectin loading is the most simple and efficient way to eagerly load collections of objects.

i.e., though multiple SELECT statements will exists, the number is determined via the number of relationships as opposed to the number of items in the list/collection.

Additionally with regards to #22332, which added the /api/v1/dataset/<id>/column/ endpoint, per #22332 (comment), I realized that this wasn't suffice given what is required by the frontent.

@dpgaspar
Copy link
Member

dpgaspar commented Jan 3, 2023

Thanks @dpgaspar for the detailed analysis. BTW I'm not sure that the two queries which include the FAB change (and their associated timings) are complete as they don't include the additional SELECT statements for fetching the columns and metrics.

The TL;DR—regarding performance—from you analysis is:

FAB Superset (FWD) Superset (BWD) Endpoint Response Time Difference
joined joined* select /api/v1/dashboard/ ~ 27 ms N/A
joined joined * select /api/v1/dashboard/1 ~ 2,300 ms N/A
default select select /api/v1/dashboard/ ~ 61 ms + 34 ms (+ 126%)
default select select /api/v1/dashboard/1 ~ 875 ms - 1,425 ms (- 62%)
default selectin joined /api/v1/dashboard/ ~ 61 ms + 34 ms (+ 126%)
default selectin joined /api/v1/dashboard/1 ~ 610 ms - 1,690 ms (- 73.5%)

  • By enforcement via FAB.

which indicates that there is a performance hit (albeit relatively small from an absolute perspective) for the /api/v1/dashboard/ endpoint, however there is a signification performance improvement (from both an absolute and relative perspective) for the /api/v1/dashboard/1 endpoint, i.e., the results seem quite favorable.

Regarding the get list concern—generating N + 1 queries—I'm not sure if this will materialize given we're using the selectin` eager loading which mentions that,

In most cases, selectin loading is the most simple and efficient way to eagerly load collections of objects.

i.e., though multiple SELECT statements will exists, the number is determined via the number of relationships as opposed to the number of items in the list/collection.

Additionally with regards to #22332, which added the /api/v1/dataset/<id>/column/ endpoint, per #22332 (comment), I realized that this wasn't suffice given what is required by the frontent.

Ok, I've added a small change on FAB on top of your PR there, now we can have the best from both worlds: dpgaspar/Flask-AppBuilder#1971

This is included on 4.2.0

So use:
show_outer_default_load = True RestModelApi attr when needed to improve performance /api/v1/dataset/<id>

@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch 4 times, most recently from abbd1de to f745b8c Compare January 4, 2023 22:10
@codecov
Copy link

codecov bot commented Jan 4, 2023

Codecov Report

Merging #22413 (897bf24) into master (1fe4a71) will decrease coverage by 1.82%.
The diff coverage is 100.00%.

❗ Current head 897bf24 differs from pull request most recent head d46ae83. Consider uploading reports for the commit d46ae83 to get more accurate results

@@            Coverage Diff             @@
##           master   #22413      +/-   ##
==========================================
- Coverage   67.28%   65.46%   -1.82%     
==========================================
  Files        1877     1876       -1     
  Lines       72002    71811     -191     
  Branches     7893     7863      -30     
==========================================
- Hits        48444    47011    -1433     
- Misses      21530    22774    +1244     
+ Partials     2028     2026       -2     
Flag Coverage Δ
hive ?
mysql 78.04% <100.00%> (-0.54%) ⬇️
postgres 78.11% <100.00%> (-0.54%) ⬇️
presto ?
python 78.16% <100.00%> (-3.72%) ⬇️
sqlite ?
unit ?

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
superset/models/dashboard.py 76.22% <ø> (-0.39%) ⬇️
superset/connectors/sqla/models.py 88.57% <100.00%> (-0.80%) ⬇️
superset/datasets/api.py 87.50% <100.00%> (+0.10%) ⬆️
superset/examples/birth_names.py 70.00% <100.00%> (ø)
superset/models/helpers.py 38.09% <100.00%> (+0.06%) ⬆️
superset/db_engines/hive.py 0.00% <0.00%> (-85.19%) ⬇️
...set/advanced_data_type/plugins/internet_address.py 16.32% <0.00%> (-79.60%) ⬇️
superset/utils/pandas_postprocessing/boxplot.py 20.51% <0.00%> (-79.49%) ⬇️
superset/charts/post_processing.py 11.76% <0.00%> (-77.95%) ⬇️
...perset/advanced_data_type/plugins/internet_port.py 18.75% <0.00%> (-77.09%) ⬇️
... and 138 more

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch from f745b8c to 8e09467 Compare January 5, 2023 21:46
@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch from 9deedee to 4df0dcb Compare January 5, 2023 23:22
@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch 2 times, most recently from f391e24 to 953f3cc Compare January 16, 2023 19:08

type = "table"
query_language = "sql"
is_rls_supported = True
columns: List[TableColumn] = []
metrics: List[SqlMetric] = []
columns: Mapped[List[TableColumn]] = relationship(
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally we would use lazy="selectin" rather than lazy="select" (default) but this seems to be causing downstream issues with the associated sqlatable_user table. My current hunch is the selectin option is rather new and there's been a number of reported issues.

@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch 3 times, most recently from 125b84d to 767ffbe Compare January 16, 2023 23:42
@@ -1315,9 +1315,10 @@ def test_import_chart(self):

chart.owners = []
dataset.owners = []
database.owners = []
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Databases don't have owners.

db.session.delete(chart)
db.session.commit()
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was running into a similar issue to this which only happens when I set the lazy="selectin" relationship property which—somewhat peculiarly—only ensures eager loading for the bidirectional relationships when the reciprocal is lazy="joined", i.e., if lazy="select", SQLAlchemy performs N queries for when selecting the TableColumn.table/SqlMetric.table field.

The TL;DR is I've tried a slew of things and the only success—per the Stack Overflow post—was to commit between deleting the dataset and chart. Note this doesn't seem to be an issue in production (per my manual tests) given that one doesn't delete both a dataset/database at the same time.

@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch 3 times, most recently from ff69b45 to d322f0c Compare January 17, 2023 00:59
@john-bodley john-bodley force-pushed the john-bodley--chore-optimal-sqlatable-relationships branch from d322f0c to d46ae83 Compare January 20, 2023 04:28
@john-bodley john-bodley merged commit 92cdb8c into apache:master Jan 20, 2023
@john-bodley john-bodley deleted the john-bodley--chore-optimal-sqlatable-relationships branch January 20, 2023 21:18
john-bodley added a commit to airbnb/superset-fork that referenced this pull request Feb 2, 2023
@john-bodley john-bodley changed the title chore: Add explicit bidirectional performant relationships for SQLA model chore(sqla): Add explicit bidirectional performant relationships for SQLA model Feb 2, 2023
@john-bodley
Copy link
Member Author

john-bodley commented Feb 17, 2023

Note I've discovered a performance regression with the /api/v1/explore/?slice_id={pk} RESTful API endpoint which is likley associated with change which I'm currently investigating.

sebastiankruk added a commit to sebastiankruk/superset that referenced this pull request Mar 16, 2023
* feat: add ssh tunneling to dynamic form for Database Connection UI (apache#22689)

Co-authored-by: Antonio Rivero Martinez <38889534+Antonio-RiveroMartnez@users.noreply.github.com>
Co-authored-by: Antonio Rivero <antonioriverocode@gmail.com>
Co-authored-by: Elizabeth Thompson <eschutho@gmail.com>
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>

* chore(dashboard): Log events for download as image (apache#22793)

* docs: link docker readme in docker config section (apache#22796)

* chore: Add explicit bidirectional performant relationships for SQLA model (apache#22413)

* fix: better logic to extract errors on databricks (apache#22792)

* fix(hive): Regression in apache#21794 (apache#22794)

* fix: Unexpected error on simple filter (apache#22814)

* feat(docker): Build multiple python version images (apache#22770)

Co-authored-by: Daniel Draper <daniel.draper@understand.ai>

* fix: allow CSV upload in Other db (apache#22807)

* chore: Convert direct uses of antd icons to 'Icons' component (apache#22516)

* fix(sqllab): type error on renderBigIntStr (apache#22813)

* chore: upgrade react-datetime, react-intersection-observer and react-checkbox-tree  (apache#22585)

* feat(helm): Add ability to customize affinity per deployment (apache#22827)

* chore(issue templates): discouraging Issues for feature requests (apache#22617)

* docs(alerts & reports): add, prune, reorganize (apache#20872)

* chore(tests): Streamline Cypress login to fix fails/flakes (apache#22844)

* feat: export/import `allow_dml` flag (apache#22806)

* chore: Migrate /superset/recent_activity/<user_id>/ to /api/v1/ (apache#22789)

* test: Fix act errors in DatasourceControl test (apache#22845)

* test: Fix act errors in DatabaseModal test (apache#22846)

* feat: Move cross filters to Dashboard (apache#22785)

* fix(cpq): Add `schema` to Query.data() payload (apache#22791)

* fix(Annotation Layers): Error when render options with renamed columns (apache#22453)

* build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.48.2 to 5.49.0 in /superset-websocket (apache#22838)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(misc): Spelling (apache#19678)

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>

* build(deps): bump ua-parser-js from 0.7.31 to 0.7.33 in /docs (apache#22858)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs(cache): update doc strings (apache#22865)

* chore: migrate react-diff-viewer to react-diff-viewer-continued for react 18 upgrade (apache#22834)

* chore: upgrade react-table for react 18 upgrade (apache#22780)

* chore: upgrade react-reverse-portal for react upgrade (apache#22779)

* chore: removing unnecessary double spaces, a.k.a. "shotgun holes" (apache#22852)

* fix: Convert TIMESTAMP_* to TIMESTAMP in Snowflake (apache#22872)

* fix(sqllab): reverts apache#22695 (apache#22861)

* feat(ssh_tunnel): Add feature flag to SSH Tunnel API (apache#22805)

* fix: revert RESTful apis and react view for RLS (apache#22818)

* chore: deprecate /superset/slice_json/<int:slice_id> and /superset/annotation_json/<int:layer_id> (apache#22496)

* chore: add statsd support to base API and refactor (apache#22887)

* chore: Migrate /superset/queries/<last_updated_ms> to API v1 (apache#22611)

* docs: add Skyscanner to users list (apache#22888)

Co-authored-by: Calum <calum.leslie@skyscanner.net>

* feat: Add excel export (apache#22006)

Co-authored-by: Igor Șincariov <igorsinc@pm.me>
Co-authored-by: EugeneTorap <evgenykrutpro@gmail.com>

* build(deps): bump moment from 2.29.2 to 2.29.4 in /docs (apache#22891)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump underscore from 1.12.0 to 1.12.1 in /superset-frontend (apache#22892)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: deprecate /superset/filter/... endpoint, migrate to apiv1 (apache#22882)

* fix: bump isort to fix pre-commit CI (apache#22907)

* chore: migrate /sql_json and /results to apiv1 (apache#22809)

* chore: Localization of superset pt. 2 (apache#22772)

* fix: edit pyarrow stringify to better handle emojis and accents (apache#22881)

* fix(sqllab): inconsistent addNewQueryEditor behavior (apache#21999)

* fix(i18n): greatly optimize Chinese translation (apache#22036)

* chore: skip puppeteer chromium download (apache#22623)

* fix(dependency): update cryptography import (apache#22744)

Co-authored-by: Daniel Draper <daniel.draper@understand.ai>

* feat: add pyproject.toml file to project (apache#20291)

* chore(db_engine_specs): clean up column spec logic and add tests (apache#22871)

* feat: Adds the ECharts Sunburst chart (apache#22833)

* fix: Time range filter applied on a dashboard is not persisting to the chart explore (apache#22920)

* fix(fab): Fix regression on FAB dropdowns (apache#22889)

* chore: migrate @vx/responsive to @visx/responsive for react 18 upgrade (apache#22815)

* fix: fix warning in ssh tunnel (apache#22912)

* chore: upgrade packages for react v17 upgrade (apache#22914)

* chore: upgrade react-router-dom to 5.3.4 (apache#22878)

* build(deps-dev): bump eslint from 8.32.0 to 8.33.0 in /superset-websocket (apache#22902)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(helm): Make Chart.AppVersion default value for image tag (apache#22854)

* chore: Migrate /superset/tables/* to API v1 (apache#22501)

* fix(native-filters): Ensure that time range filter loses focus after closing modal (apache#22937)

* fix: Remove button is broken for metrics on Explore (apache#22940)

* feat: Enable new dataset creation flow II (apache#22835)

* fix(datasets): Fix property selection on JSON response (apache#22944)

* fix: Improve performance of CSV download (apache#22929)

* test: Clean up AdhocFilterOption test warnings (apache#22915)

* chore: Bump Flask-AppBuilder constraints (apache#22927)

* chore(welcome): change default last tab to "all" (apache#22798)

* fix(explore): Time comparison in Mixed Chart in GENERIC_CHART_AXES not working (apache#22945)

* chore(superset-ui-chart-controls): refactor pivot and rename operator (apache#22963)

* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /superset-frontend (apache#22958)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(explore): unable to update linked charts (apache#22896)

* chore(frontend): Spelling (apache#19676)

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>

* chore: add waitress for win32 platform (apache#22935)

* fix(datasets): Include expression and description in duplicated dataset columns (apache#22943)

* feat: add tabs to edit dataset page (apache#22043)

Co-authored-by: AAfghahi <48933336+AAfghahi@users.noreply.github.com>
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
Co-authored-by: lyndsiWilliams <kcatgirl@gmail.com>

* docs: add Caizin to the user list (apache#22961)

* test: Fix act errors in DatabaseList test (apache#22970)

* test: Clean up QueryList test warnings (apache#22972)

* fix(native-filters): Don't include description icon in truncation calc (apache#22941)

* fix: Prevents last temporal filter removal (apache#22982)

* fix(explore): Mark time range dashboard filter with warning icon (apache#22984)

* docs(alerts & reports): clarify nature of "-dev" labeled container images (apache#22988)

* chore: bump python version to 3.8.16 in Dockerfile (apache#22934)

* fix: Form data was not being passed to save/update slice (apache#22989)

* feat(ssh_tunnel): SSH Tunnel Switch extension (apache#22967)

* chore: Fix grammar (apache#22831)

* docs: added Orange inside the inthewild.md doc (apache#22986)

* fix: add new config to allow for specific import data urls (apache#22942)

* build(deps): bump pre-commit from 2.20.0 to 3.0.4 in /requirements (apache#22996)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(explore): Save button incorrectly disabled when adding new metric with dnd (apache#23000)

* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /docs (apache#22956)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: Make cte_alias a property of db engine spec (apache#22947)

* fix(migrations): Flask-Migrate output is not logged during alembic migrations apache#17991 (apache#22991)

* fix(dashboard): export & import chart description and certification details (apache#22471)

* chore: updating link to sandbox.js (apache#23005)

* fix(sqllab): clean unwanted scrollbar (apache#22990)

* chore: Localization of superset pt. 3 (apache#22938)

Co-authored-by: Evan Rusackas <evan@preset.io>

* chore(deps): bump ajv and react-jsonschema-form in /superset-frontend (apache#21809)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump eslint-config-prettier from 7.2.0 to 8.6.0 in /superset-websocket (apache#22767)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /superset-frontend/cypress-base (apache#22955)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump @types/node from 18.11.13 to 18.11.19 in /superset-websocket (apache#22997)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(datasets): Populate Usage tab in Edit Dataset view (apache#22670)

* build(deps-dev): bump @typescript-eslint/parser from 5.48.1 to 5.51.0 in /superset-websocket (apache#23013)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump typescript from 4.9.4 to 4.9.5 in /superset-websocket (apache#22933)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(tests): Cypress optimizations to help with fails (apache#23023)

* chore: refactor SliceAdder for react 17 and react 18 (apache#23009)

* fix(explore): Enable saving metric after changing title (apache#23020)

* fix: dataset import error message (apache#23025)

* fix(ssh_tunnel): Fix bug on database edition for databases with ssh tunnels (apache#23006)

Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>

* fix: Handles disabled options on Select All (apache#22830)

* fix(dashboard): Stop updating chart owners for charts removed from dashboard (apache#21720)

Co-authored-by: Michael S. Molina <michael.s.molina@gmail.com>

* docs(teradata): fix connection string (apache#23051)

* fix: Time Column on Generic X-axis (apache#23021)

* fix: Menu items are not disappearing when deleting a dashboard (apache#23039)

* fix(i18n): improve Russian translation (apache#22939)

* fix(sqllab): Invalid schema fetch by deprecated value (apache#22968)

* chore: Removes icon warnings from tests (apache#23054)

* feat(sqllab): Add event logger (apache#23040)

* chore(datasets): Refactor DatasetDAO update to leverage bulk logic for create, update, and delete operations (apache#22957)

* chore: remove db_engines (apache#22444)

* feat(helm): allow persisting nodePort for services (apache#22713)

Signed-off-by: DASTC\gupta_rajan <rajan.gupta@stengg.com>
Co-authored-by: DASTC\gupta_rajan <rajan.gupta@stengg.com>

* build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.49.0 to 5.52.0 in /superset-websocket (apache#23073)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump hot-shots from 9.3.0 to 10.0.0 in /superset-websocket (apache#23031)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump prettier from 2.8.3 to 2.8.4 in /superset-websocket (apache#23030)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump @types/node from 18.11.19 to 18.13.0 in /superset-websocket (apache#23029)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: cache warmup solution non legacy charts. (apache#23012)

* docs: remove duplicate navbar item (apache#22486)

Signed-off-by: tison <wander4096@gmail.com>

* chore: Migrate get_or_create_table endpoint to api v1 (apache#22931)

* chore: Migrate /superset/csv/<client_id> to API v1 (apache#22913)

* fix: css template permissions for gamma role (apache#23083)

* build(deps): bump ws from 8.12.0 to 8.12.1 in /superset-websocket (apache#23080)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump eslint from 8.33.0 to 8.34.0 in /superset-websocket (apache#23079)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(style): make brand icon max width customizable (apache#23081)

* chore: Remove dependency warnings from SqlEditorLeftBar/index.tsx (apache#22975)

* chore: Remove dependency warnings from SqlEditor/index.jsx (apache#22974)

* chore: Remove dependency warnings from DatasetList.tsx (apache#22973)

* test: Convert DatasetList test from jsx to tsx (apache#22971)

* test: Clean up SelectAsyncControl test warnings (apache#22969)

* chore: move dashboard screenshot standalone logic (apache#23003)

* fix: dict bug on QueryContextFactory (apache#23093)

Co-authored-by: ok9897 <ok9897@krafton.com>

* chore: Improve greeting message (apache#23077)

* chore: Updating connection URI for MS SQL Server (apache#22903)

Co-authored-by: Evan Rusackas <evan@preset.io>

* chore: increment statsd as warn (apache#23041)

* fix: removing pyproject.toml (apache#23101)

* chore: change AlertQueryError to 400 (apache#23102)

* fix: missing __init__ on module sqllab commands (apache#23107)

* #21 preparing for linux deployment

* chore(backend): Spelling (apache#19677)

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
Co-authored-by: Evan Rusackas <evan@preset.io>

* chore: Remove yarn.lock from the root folder (apache#23108)

* chore(sqla): Address performance tradeoff with eager loading (apache#23113)

* fix(ci): explicity set yaml Loader (apache#23126)

* fix: Validate jinja rendered query (apache#22851)

* fix: reorganize role permissions (apache#23096)

* fix: gamma sql_json test (apache#23135)

* fix(dashboard): Chart's empty state not centered (apache#23022)

* feat: Frontend tagging (apache#20876)

Co-authored-by: cccs-nik <68961854+cccs-nik@users.noreply.github.com>
Co-authored-by: GITHUB_USERNAME <EMAIL>

* feat: return UUID on database creation (apache#23143)

* chore: Add docs for ssh tunneling (apache#23131)

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>

* feat: Enable cross fitlers in WorldMap and Graph charts (apache#22886)

* chore: Bump cryptography to 39.0.1 (apache#23158)

* feat(dashboard): Add cross filter from context menu (apache#23141)

* chore: revert "feat(native_filter_migration): add transition mode (apache#16992)" (apache#23144)

* build: Add helm chart option to deploy sidecars with node and worker (apache#23160)

* fix(rbac): show objects accessible by database access perm (apache#23118)

* fix: bump FAB to 4.3.0 (apache#23184)

* fix(clickhouse): add clickhouse connect driver (apache#23185)

* fix(clickhouse): add missing default format (apache#23192)

* feat(ssh_tunnel): Import/Export Databases with SSHTunnel credentials (apache#23099)

* chore: refactor SparklineCell for react 17 and react 18 upgrade (apache#23145)

* fix(ssh_tunnel): Display SSHTunnel Switch when editing a DB that was created with the Dynamic Form (apache#23195)

* fix(sshtunnel): argument params to properly setting `server_port` (apache#23196)

* fix(ssh-tunnel): add password to `from_private_key` function (apache#23175)

* fix: Pagination of VirtualTable (apache#23130)

* fix(dashboard): Focusing charts and native filters from filters badge (apache#23190)

* fix(docs): Change postgres to postgresql in brew install command (apache#23202)

* build(deps-dev): bump @typescript-eslint/parser from 5.51.0 to 5.53.0 in /superset-websocket (apache#23133)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump @types/node from 18.13.0 to 18.14.1 in /superset-websocket (apache#23180)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* test: Remove test playgrounds (apache#23203)

* build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.52.0 to 5.53.0 in /superset-websocket (apache#23132)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump express and @applitools/eyes-cypress in /superset-frontend/cypress-base (apache#22342)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs: fix typo (apache#23207)

* feat: Cross Filters in FilterBar (apache#23138)

Co-authored-by: Kamil Gabryjelski <kamil.gabryjelski@gmail.com>

* fix(dashboard): Page crashing when cross filter applied on adhoc column (apache#23215)

* fix: memoized decorator memory leak (apache#23139)

* build(deps-dev): bump @types/uuid from 9.0.0 to 9.0.1 in /superset-websocket (apache#23152)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump eslint from 8.34.0 to 8.35.0 in /superset-websocket (apache#23211)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: adding code owners for github actions/workflows (apache#23201)

* build(deps): bump ua-parser-js from 0.7.28 to 0.7.33 in /superset-frontend (apache#22859)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump pre-commit from 3.0.4 to 3.1.0 in /requirements (apache#23168)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: add disallowed query params for engines specs (apache#23217)

Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>

* chore: Add statsd logger for ssh tunneling creation (apache#23225)

* fix(dashboard): Don't show cross filters checkbox to users without write permissions (apache#23237)

* docs: update installation docs to include frontend asset build (apache#23199)

* build(deps): bump pip-compile-multi from 2.6.1 to 2.6.2 in /requirements (apache#23122)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(dashboard): Cross-filters not working properly for new dashboards (apache#23194)

* fix: refuse to start with default secret on non debug envs (apache#23186)

* fix(dao): use explicit id filter (apache#23246)

* fix(explore): Dashboard filters on adhoc cols not working in Explore (apache#23239)

* refactor: Organizes the pages in their own folder (apache#23241)

* fix: Video Game Sales dashboard default filters (apache#23242)

* chore: Deprecate show_native_filters (apache#23228)

* chore: Remove the ability to add filter-box charts when DASHBOARD_NATIVE_FILTERS feature is enabled (apache#23142)

* fix(dashboard): Cross-filter search icon in filter bar (apache#23250)

* chore(webdriver): Tuning the Webdriver logging a bit (apache#23255)

* fix: customize tab on heatmap chart is blank (apache#23243)

* fix(dashboard): Missing filter card styles (apache#23256)

* fix: ignore ts warnings from older typescript versions (apache#23262)

* chore(cache): Tuning logging in cache manager (apache#23266)

* fix(dashboard): Charts crashing when cross filter on adhoc column is applied (apache#23238)

Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>

* fix(plugin-chart-echarts): render horizontal categories from top (apache#23273)

* feat(generic-x-axis): add x sorting on series limit metric (apache#23274)

* fix(dashboard): Allow selecting text in cells in Table and PivotTable without triggering cross filters (apache#23283)

* fix(migration): Address issue in apache#23228 (apache#23276)

* chore(dashboard): Cleanup example dashboard filter scopes (apache#23260)

* fix(dashboard): Infinite load when filter with default first value is out of scope (apache#23299)

* fix(clickhouse):  Update to working clickhouse-connect version (apache#23296)

* chore: upgrade @ant-design/icons for react upgrade (apache#22890)

* docs: typo 'admnistrators' in security.mdx (apache#23166)

* build(deps-dev): bump eslint-config-prettier from 8.6.0 to 8.7.0 in /superset-websocket (apache#23292)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump @types/node from 18.14.1 to 18.14.6 in /superset-websocket (apache#23281)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: bump docusaurus to latest stable (apache#23317)

* docs: add lost _filters param docs (apache#23316)

* feat(docs): adds BugHerd to documentation site. (apache#23287)

* chore: log different selenium timeout errors differently (apache#23290)

* docs: improve API v1 migration documentation (apache#23298)

* docs(alerts and reports): Update ExecutorType class (apache#23323)

* build(deps-dev): bump @typescript-eslint/parser from 5.53.0 to 5.54.1 in /superset-websocket (apache#23294)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(dashboard): Refactor FiltersBadge (apache#23286)

* chore: use util test env for init check (apache#23325)

* fix(trino): normalize non-iso timestamps (apache#23339)

* fix(dashboard): Cross filters with time shifted series (apache#23347)

* feat(dashboard): Change default opacity of icon in FiltersBadge (apache#23350)

* fix: dashboard DAO small code improvement (apache#23348)

* chore: Remove Cross Filter scoping modal (apache#23216)

* fix(dashboard): deepmerge htmlSchemaOverrides (apache#23329)

* fix(trino): Disallow alias to source column (apache#23324)

* fix(examples): Cleanup granularity_sqla column (apache#23322)

* fix(sqllab): empty large query results from localStorage (apache#23302)

* chore: Update pre-commit packages (apache#23173)

* fix(safari): remove autocomplete in table select (apache#23361)

* fix(chart-controls): Error if x_axis_sort and timeseries_limit_metric are included in main metrics (apache#23365)

* feat(native-filters): allow cascading from time and numeric filters (apache#23319)

* build(deps-dev): bump @types/node from 18.14.6 to 18.15.3 in /superset-websocket (apache#23360)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(native-filters): Caching scope (apache#23314)

* #56 sync to fix security issues

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Signed-off-by: DASTC\gupta_rajan <rajan.gupta@stengg.com>
Signed-off-by: tison <wander4096@gmail.com>
Co-authored-by: Hugh A. Miles II <hughmil3s@gmail.com>
Co-authored-by: Antonio Rivero Martinez <38889534+Antonio-RiveroMartnez@users.noreply.github.com>
Co-authored-by: Antonio Rivero <antonioriverocode@gmail.com>
Co-authored-by: Elizabeth Thompson <eschutho@gmail.com>
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
Co-authored-by: JUST.in DO IT <justin.park@airbnb.com>
Co-authored-by: ʈᵃᵢ <tdupreetan@gmail.com>
Co-authored-by: John Bodley <4567245+john-bodley@users.noreply.github.com>
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
Co-authored-by: Daniel Draper <Germandrummer92@gmail.com>
Co-authored-by: Daniel Draper <daniel.draper@understand.ai>
Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>
Co-authored-by: Cody Leff <cody@preset.io>
Co-authored-by: Lily Kuang <lily@preset.io>
Co-authored-by: Sergey Shevchenko <sergeyshevchdevelop@gmail.com>
Co-authored-by: Evan Rusackas <evan@preset.io>
Co-authored-by: Sam Firke <sfirke@users.noreply.github.com>
Co-authored-by: Jack Fragassi <jfragassi98@gmail.com>
Co-authored-by: Geido <60598000+geido@users.noreply.github.com>
Co-authored-by: Stepan <66589759+Always-prog@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
Co-authored-by: Cemre Mengu <cemremengu@gmail.com>
Co-authored-by: Mayur <mayurnewase111@gmail.com>
Co-authored-by: Diego Medina <diegomedina24@gmail.com>
Co-authored-by: Daniel Vaz Gaspar <danielvazgaspar@gmail.com>
Co-authored-by: cleslie <cjaleslie@gmail.com>
Co-authored-by: Calum <calum.leslie@skyscanner.net>
Co-authored-by: Igor Șincariov <102555782+igorsinc@users.noreply.github.com>
Co-authored-by: Igor Șincariov <igorsinc@pm.me>
Co-authored-by: EugeneTorap <evgenykrutpro@gmail.com>
Co-authored-by: Artem Shumeiko <53895552+artemonsh@users.noreply.github.com>
Co-authored-by: 王一川 <wj2247689442@gmail.com>
Co-authored-by: nisheldo <njsheldon@me.com>
Co-authored-by: Leo Schick <67712864+leo-schick@users.noreply.github.com>
Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>
Co-authored-by: Arash Afghahi <48933336+AAfghahi@users.noreply.github.com>
Co-authored-by: Denis Krivenko <dnskrv88@gmail.com>
Co-authored-by: Kamil Gabryjelski <kamil.gabryjelski@gmail.com>
Co-authored-by: Erik Ritter <erik.ritter@airbnb.com>
Co-authored-by: Phillip Kelley-Dotson <pkelleydotson@yahoo.com>
Co-authored-by: lyndsiWilliams <kcatgirl@gmail.com>
Co-authored-by: tejaskatariya <42517374+tejaskatariya@users.noreply.github.com>
Co-authored-by: Adrian <icsu@users.noreply.github.com>
Co-authored-by: alexclavel-ocient <111374753+alexclavel-ocient@users.noreply.github.com>
Co-authored-by: Trey Gilliland <treygilliland3@gmail.com>
Co-authored-by: Michael S. Molina <michael.s.molina@gmail.com>
Co-authored-by: Rajan Gupta <rajan0493@gmail.com>
Co-authored-by: DASTC\gupta_rajan <rajan.gupta@stengg.com>
Co-authored-by: Dheeraj Jaiswal <118437694+dheeraj-jaiswal-lowes@users.noreply.github.com>
Co-authored-by: tison <wander4096@gmail.com>
Co-authored-by: Changhoon Oh <81631424+okayhooni@users.noreply.github.com>
Co-authored-by: ok9897 <ok9897@krafton.com>
Co-authored-by: kuruv <kuruv@users.noreply.github.com>
Co-authored-by: Zef Lin <zef@preset.io>
Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>
Co-authored-by: cccs-nik <68961854+cccs-nik@users.noreply.github.com>
Co-authored-by: mkramer5454 <52328004+mkramer5454@users.noreply.github.com>
Co-authored-by: Vivek Kumar <49686162+vivekDebugs@users.noreply.github.com>
Co-authored-by: Craig Rueda <craig@craigrueda.com>
Co-authored-by: Geoff Genz <geoff@clickhouse.com>
Co-authored-by: Cameron Gregor <cgregor@securecodewarrior.com>
Co-authored-by: Íñigo Álvaro Sáenz <i.saenz@stuart.com>
cccs-RyanK added a commit to CybercentreCanada/superset that referenced this pull request Apr 27, 2023
* feat: add ssh tunneling to dynamic form for Database Connection UI (apache#22689)

Co-authored-by: Antonio Rivero Martinez <38889534+Antonio-RiveroMartnez@users.noreply.github.com>
Co-authored-by: Antonio Rivero <antonioriverocode@gmail.com>
Co-authored-by: Elizabeth Thompson <eschutho@gmail.com>
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>

* chore(dashboard): Log events for download as image (apache#22793)

* docs: link docker readme in docker config section (apache#22796)

* chore: Add explicit bidirectional performant relationships for SQLA model (apache#22413)

* fix: better logic to extract errors on databricks (apache#22792)

* fix(hive): Regression in apache#21794 (apache#22794)

* fix: Unexpected error on simple filter (apache#22814)

* feat(docker): Build multiple python version images (apache#22770)

Co-authored-by: Daniel Draper <daniel.draper@understand.ai>

* fix: allow CSV upload in Other db (apache#22807)

* chore: Convert direct uses of antd icons to 'Icons' component (apache#22516)

* fix(sqllab): type error on renderBigIntStr (apache#22813)

* chore: upgrade react-datetime, react-intersection-observer and react-checkbox-tree  (apache#22585)

* feat(helm): Add ability to customize affinity per deployment (apache#22827)

* chore(issue templates): discouraging Issues for feature requests (apache#22617)

* docs(alerts & reports): add, prune, reorganize (apache#20872)

* chore(tests): Streamline Cypress login to fix fails/flakes (apache#22844)

* feat: export/import `allow_dml` flag (apache#22806)

* chore: Migrate /superset/recent_activity/<user_id>/ to /api/v1/ (apache#22789)

* test: Fix act errors in DatasourceControl test (apache#22845)

* test: Fix act errors in DatabaseModal test (apache#22846)

* feat: Move cross filters to Dashboard (apache#22785)

* fix(cpq): Add `schema` to Query.data() payload (apache#22791)

* fix(Annotation Layers): Error when render options with renamed columns (apache#22453)

* build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.48.2 to 5.49.0 in /superset-websocket (apache#22838)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(misc): Spelling (apache#19678)

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>

* build(deps): bump ua-parser-js from 0.7.31 to 0.7.33 in /docs (apache#22858)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs(cache): update doc strings (apache#22865)

* chore: migrate react-diff-viewer to react-diff-viewer-continued for react 18 upgrade (apache#22834)

* chore: upgrade react-table for react 18 upgrade (apache#22780)

* chore: upgrade react-reverse-portal for react upgrade (apache#22779)

* chore: removing unnecessary double spaces, a.k.a. "shotgun holes" (apache#22852)

* fix: Convert TIMESTAMP_* to TIMESTAMP in Snowflake (apache#22872)

* fix(sqllab): reverts apache#22695 (apache#22861)

* feat(ssh_tunnel): Add feature flag to SSH Tunnel API (apache#22805)

* fix: revert RESTful apis and react view for RLS (apache#22818)

* chore: deprecate /superset/slice_json/<int:slice_id> and /superset/annotation_json/<int:layer_id> (apache#22496)

* chore: add statsd support to base API and refactor (apache#22887)

* chore: Migrate /superset/queries/<last_updated_ms> to API v1 (apache#22611)

* docs: add Skyscanner to users list (apache#22888)

Co-authored-by: Calum <calum.leslie@skyscanner.net>

* feat: Add excel export (apache#22006)

Co-authored-by: Igor Șincariov <igorsinc@pm.me>
Co-authored-by: EugeneTorap <evgenykrutpro@gmail.com>

* build(deps): bump moment from 2.29.2 to 2.29.4 in /docs (apache#22891)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump underscore from 1.12.0 to 1.12.1 in /superset-frontend (apache#22892)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: deprecate /superset/filter/... endpoint, migrate to apiv1 (apache#22882)

* fix: bump isort to fix pre-commit CI (apache#22907)

* chore: migrate /sql_json and /results to apiv1 (apache#22809)

* chore: Localization of superset pt. 2 (apache#22772)

* fix: edit pyarrow stringify to better handle emojis and accents (apache#22881)

* fix(sqllab): inconsistent addNewQueryEditor behavior (apache#21999)

* fix(i18n): greatly optimize Chinese translation (apache#22036)

* chore: skip puppeteer chromium download (apache#22623)

* fix(dependency): update cryptography import (apache#22744)

Co-authored-by: Daniel Draper <daniel.draper@understand.ai>

* feat: add pyproject.toml file to project (apache#20291)

* chore(db_engine_specs): clean up column spec logic and add tests (apache#22871)

* feat: Adds the ECharts Sunburst chart (apache#22833)

* fix: Time range filter applied on a dashboard is not persisting to the chart explore (apache#22920)

* fix(fab): Fix regression on FAB dropdowns (apache#22889)

* chore: migrate @vx/responsive to @visx/responsive for react 18 upgrade (apache#22815)

* fix: fix warning in ssh tunnel (apache#22912)

* chore: upgrade packages for react v17 upgrade (apache#22914)

* chore: upgrade react-router-dom to 5.3.4 (apache#22878)

* build(deps-dev): bump eslint from 8.32.0 to 8.33.0 in /superset-websocket (apache#22902)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(helm): Make Chart.AppVersion default value for image tag (apache#22854)

* chore: Migrate /superset/tables/* to API v1 (apache#22501)

* fix(native-filters): Ensure that time range filter loses focus after closing modal (apache#22937)

* fix: Remove button is broken for metrics on Explore (apache#22940)

* feat: Enable new dataset creation flow II (apache#22835)

* fix(datasets): Fix property selection on JSON response (apache#22944)

* fix: Improve performance of CSV download (apache#22929)

* test: Clean up AdhocFilterOption test warnings (apache#22915)

* chore: Bump Flask-AppBuilder constraints (apache#22927)

* chore(welcome): change default last tab to "all" (apache#22798)

* fix(explore): Time comparison in Mixed Chart in GENERIC_CHART_AXES not working (apache#22945)

* chore(superset-ui-chart-controls): refactor pivot and rename operator (apache#22963)

* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /superset-frontend (apache#22958)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(explore): unable to update linked charts (apache#22896)

* chore(frontend): Spelling (apache#19676)

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>

* chore: add waitress for win32 platform (apache#22935)

* fix(datasets): Include expression and description in duplicated dataset columns (apache#22943)

* feat: add tabs to edit dataset page (apache#22043)

Co-authored-by: AAfghahi <48933336+AAfghahi@users.noreply.github.com>
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
Co-authored-by: lyndsiWilliams <kcatgirl@gmail.com>

* docs: add Caizin to the user list (apache#22961)

* test: Fix act errors in DatabaseList test (apache#22970)

* test: Clean up QueryList test warnings (apache#22972)

* fix(native-filters): Don't include description icon in truncation calc (apache#22941)

* fix: Prevents last temporal filter removal (apache#22982)

* fix(explore): Mark time range dashboard filter with warning icon (apache#22984)

* docs(alerts & reports): clarify nature of "-dev" labeled container images (apache#22988)

* chore: bump python version to 3.8.16 in Dockerfile (apache#22934)

* fix: Form data was not being passed to save/update slice (apache#22989)

* feat(ssh_tunnel): SSH Tunnel Switch extension (apache#22967)

* chore: Fix grammar (apache#22831)

* docs: added Orange inside the inthewild.md doc (apache#22986)

* fix: add new config to allow for specific import data urls (apache#22942)

* build(deps): bump pre-commit from 2.20.0 to 3.0.4 in /requirements (apache#22996)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(explore): Save button incorrectly disabled when adding new metric with dnd (apache#23000)

* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /docs (apache#22956)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: Make cte_alias a property of db engine spec (apache#22947)

* fix(migrations): Flask-Migrate output is not logged during alembic migrations apache#17991 (apache#22991)

* fix(dashboard): export & import chart description and certification details (apache#22471)

* chore: updating link to sandbox.js (apache#23005)

* fix(sqllab): clean unwanted scrollbar (apache#22990)

* chore: Localization of superset pt. 3 (apache#22938)

Co-authored-by: Evan Rusackas <evan@preset.io>

* chore(deps): bump ajv and react-jsonschema-form in /superset-frontend (apache#21809)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump eslint-config-prettier from 7.2.0 to 8.6.0 in /superset-websocket (apache#22767)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /superset-frontend/cypress-base (apache#22955)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump @types/node from 18.11.13 to 18.11.19 in /superset-websocket (apache#22997)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(datasets): Populate Usage tab in Edit Dataset view (apache#22670)

* build(deps-dev): bump @typescript-eslint/parser from 5.48.1 to 5.51.0 in /superset-websocket (apache#23013)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump typescript from 4.9.4 to 4.9.5 in /superset-websocket (apache#22933)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(tests): Cypress optimizations to help with fails (apache#23023)

* chore: refactor SliceAdder for react 17 and react 18 (apache#23009)

* fix(explore): Enable saving metric after changing title (apache#23020)

* fix: dataset import error message (apache#23025)

* fix(ssh_tunnel): Fix bug on database edition for databases with ssh tunnels (apache#23006)

Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>

* fix: Handles disabled options on Select All (apache#22830)

* fix(dashboard): Stop updating chart owners for charts removed from dashboard (apache#21720)

Co-authored-by: Michael S. Molina <michael.s.molina@gmail.com>

* docs(teradata): fix connection string (apache#23051)

* fix: Time Column on Generic X-axis (apache#23021)

* fix: Menu items are not disappearing when deleting a dashboard (apache#23039)

* fix(i18n): improve Russian translation (apache#22939)

* fix(sqllab): Invalid schema fetch by deprecated value (apache#22968)

* chore: Removes icon warnings from tests (apache#23054)

* feat(sqllab): Add event logger (apache#23040)

* chore(datasets): Refactor DatasetDAO update to leverage bulk logic for create, update, and delete operations (apache#22957)

* chore: remove db_engines (apache#22444)

* feat(helm): allow persisting nodePort for services (apache#22713)

Signed-off-by: DASTC\gupta_rajan <rajan.gupta@stengg.com>
Co-authored-by: DASTC\gupta_rajan <rajan.gupta@stengg.com>

* build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.49.0 to 5.52.0 in /superset-websocket (apache#23073)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump hot-shots from 9.3.0 to 10.0.0 in /superset-websocket (apache#23031)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump prettier from 2.8.3 to 2.8.4 in /superset-websocket (apache#23030)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump @types/node from 18.11.19 to 18.13.0 in /superset-websocket (apache#23029)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: cache warmup solution non legacy charts. (apache#23012)

* docs: remove duplicate navbar item (apache#22486)

Signed-off-by: tison <wander4096@gmail.com>

* chore: Migrate get_or_create_table endpoint to api v1 (apache#22931)

* chore: Migrate /superset/csv/<client_id> to API v1 (apache#22913)

* fix: css template permissions for gamma role (apache#23083)

* build(deps): bump ws from 8.12.0 to 8.12.1 in /superset-websocket (apache#23080)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump eslint from 8.33.0 to 8.34.0 in /superset-websocket (apache#23079)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(style): make brand icon max width customizable (apache#23081)

* chore: Remove dependency warnings from SqlEditorLeftBar/index.tsx (apache#22975)

* chore: Remove dependency warnings from SqlEditor/index.jsx (apache#22974)

* chore: Remove dependency warnings from DatasetList.tsx (apache#22973)

* test: Convert DatasetList test from jsx to tsx (apache#22971)

* test: Clean up SelectAsyncControl test warnings (apache#22969)

* chore: move dashboard screenshot standalone logic (apache#23003)

* fix: dict bug on QueryContextFactory (apache#23093)

Co-authored-by: ok9897 <ok9897@krafton.com>

* chore: Improve greeting message (apache#23077)

* chore: Updating connection URI for MS SQL Server (apache#22903)

Co-authored-by: Evan Rusackas <evan@preset.io>

* chore: increment statsd as warn (apache#23041)

* fix: removing pyproject.toml (apache#23101)

* chore: change AlertQueryError to 400 (apache#23102)

* fix: missing __init__ on module sqllab commands (apache#23107)

* updating package json

* post merge fixes

* [cccs-2.0] updating docker file (#188)

* [CLDN-1565] Fixing bugs (#189)

* [CLDN-1565] Fixing bugs

* removing uneeded import

* Feature/cldn 1565 (#192)

* [CLDN-1565] Fixing bugs

* removing uneeded import

* [CLDN-1565] Adding new image

* Feature/cldn 1609 (#195)

* Add row number option to CCCS-Grid (#181)

* Add row number option to CCCS-Grid

* Have row numbers show by default

Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>

Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>

* Use new build agent (#187)

* Use new build agent

* Remove quotes

* Display datahub link for datasets with defined URN (#177)

* Display datahub link for datasets with defined URN

* Add datahub SVG

* Reorder imports

* Add datahub link to dashboards

* Convert to camel case

* Add tests for DatasetList

* Add tests for dashboard header

* Provide explanation for empty catch

* [CLDN-1540] Added ability for multiple user emails to be filtered on at once

* [CLDN-1540] temp update to docker image tag so that we can deploy code changes to PB-stg

* [CLDN-1540] revert of temp update to docker image tag so that we can deploy code changes to PB-stg

* Add path to url (#193)

* [CLDN-1609] Fixing post merge build errors

* Update cccs-build/superset-base/azure-pipelines.yml

Co-authored-by: Reese <10563996+reesercollins@users.noreply.github.com>

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-at-a-glance-user-id/src/styles.js

Co-authored-by: Reese <10563996+reesercollins@users.noreply.github.com>

Co-authored-by: Reese <10563996+reesercollins@users.noreply.github.com>
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>

* [CLDN-1609] Updating image (#196)

* [CLDN-1620] Making rendering use advanced type (#197)

* updating image (#198)

* [CLDN-1609] Fixing all QA bugs (#201)

* [CLDN-1609] Fixing all QA bugs

* [CLDN-1609] Fixing build errors

* [CLDN-1609] adding additional fixes

* [CLDN-1609] Removing log files

* [CLDN-1609] Fixing build error

Co-authored-by: reesercollins <10563996+reesercollins@users.noreply.github.com>

* Feature/cldn 1541 (#200)

* [CLDN-1541] Added the ability to filter on multiple user ID's and IP's at the same time in the Application Links custom viz

* Temp update to image for deploying to PB-stg

* Reverting change to image

* [CLDN-1541] Added a tooltip to the Alfred icon

* Temp update to base image

* Reverting temporary change to image tag

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-application-links/src/ApplicationLinks.tsx

Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-application-links/src/ApplicationLinks.tsx

Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>

* [CLDN-1541] Changed the logic around creating the proper links/URL

* Temp update to img

* Undo temp img change

Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>

* [CLDN-1609] Updating docker image (#202)

* [cccs-2.0] Fixing case sensitivity (#203)

* [cccs-2.0] Fixing case sensitivity

* [cccs-2.0] Pusing temp image

* [cccs-2.0] fixing two order bys

* [cccs-2.0] fixing verbose names, fixing sizing, fixing ordering

* [cccs-2.0] fixing build error

* [cccs-2.0] updating image

* [cccs-2.0] fixing time columns

* [cccs-2.0] Fixing build errors

* [cccs-2.0] updating docker file

* [cccs-2.0] Fixing time column to populate default time col

* Fixing default time col

* [cccs-2.0] updating image

* Fix issue where datasets without a date/datetime column would not load in the explore view

* Time column dropdown list is now properly populated with either the default temporal column, or the first temporal column (if a default is not set)

* Temp update to base image tag

* Fixed the bug where when there are no dttm columns, the non-dttm columns were being displayed

* Temp update to base image tag

* Reverting changes to the img

Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>

* Fix/cccs 2.0 (#204)

* [cccs-2.0] Fixing case sensitivity

* [cccs-2.0] Pusing temp image

* [cccs-2.0] fixing two order bys

* [cccs-2.0] fixing verbose names, fixing sizing, fixing ordering

* [cccs-2.0] fixing build error

* [cccs-2.0] updating image

* [cccs-2.0] fixing time columns

* [cccs-2.0] Fixing build errors

* [cccs-2.0] updating docker file

* [cccs-2.0] Fixing time column to populate default time col

* Fixing default time col

* [cccs-2.0] updating image

* Fix issue where datasets without a date/datetime column would not load in the explore view

* Time column dropdown list is now properly populated with either the default temporal column, or the first temporal column (if a default is not set)

* Temp update to base image tag

* Fixed the bug where when there are no dttm columns, the non-dttm columns were being displayed

* Temp update to base image tag

* Reverting changes to the img

* Updating image tag

Co-authored-by: cccs-RyanS <71385290+cccs-RyanS@users.noreply.github.com>

* Fixed issue with Typescript (#205)

* Fix cccs 2.0 (#206)

* Fixed issue with Typescript

* Update image tag

* Feature/cldn 1563 (#207)

* Ran pre-commit hook on the front-end

* Removed unused file & removed duplicate method

* Made changes so that the pre-commit hook would pass all tests

* Temp update to build img

* revert temp change to build img

* Updated image (#208)

* [CLDN-1683] Added code to show column descriptions as tooltips in the… (#209)

* [CLDN-1683] Added code to show column descriptions as tooltips in the Hogwarts Table custom visualisation

* [CLDN-1683] Temp update to build image

* [CLDN-1683] Revert update to image tag

* Feature/cldn 1676 (#210)

* [CLDN-1676] Added ability to search for the IPv4 rendered value of an IP address instead of the raw value

* [CLDN-1676] Temp update to img for deploying to UDev

* [CLDN-1676] Undo temp update to img for deploying to UDev

* Updating Superset Base Image Tag (#211)

* added adhoc filter plugin files

* Made sure that adhoc filter uses the adhoc filter object

* added adhocfiltercontrol to native adhoc filter

* fixed hook that made too many requests

* fixed applied filter label

* removed duplicate files

* Removed uneeded functions

* Removed uneeded functions and variables

* Removed unused props variables

* modifying base image tag

* Removed unused config settings

* removed column for filter config form

* Improved the applied filter(s) modal

* Temp update to build image

* fixed string formatting issue:

* updating superset base image tag

* added setFocused hooks to filter when hovering

* Fixed the right click to emit dashboard cross-filters (#213)

* Fixed the right click to emit filters through the context menu as it was not working

* Temp update to build image

* Revert temp update to build image

* Updated superset base image (#214)

* fixed unused declaration error

* updating image

* Prevent invalid filter values from being saved (#215)

By assuming that all input is invalid until the api tells us otherwise,
we can prevent the user from clicking the save button in the time between
the value being entered and the api returning.

* [cccs-2.0] fixing trino req (#216)

* updating superset-base image tag

* added option to emit a filter from a default column for a row in ag grid

* Update trino python client (#219)

* Updated trino python client from 0.316.0 to 0.318.0

* Temp update to base image tag

* Removing temp change to build image

* Updated superset's base image tag (#221)

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/CccsGrid.tsx

Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>

* changed control panel to plural

* disallow columns that are not a part of the chart to be selected as default emit filters

* updated image tag

* updated control panel logic for agg mode

* update image tag

* fixed issues

* updating base image

* fixed refactor error

* updating base image

* fixed so that option disables properly

* updating base image

* Add users API to get and delete users (#223)

* Add users API to get and delete users

* Allow browser login for users api

* updating image

* Update cccs-build/superset/Dockerfile

Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>

* Added ability to certify entities with multiple values (#224)

* Added ability to certify entities with multiple values

* Update description text to reflect new feature

* Add tests for multiple certified by values

* Feature/cldn 1749 (#222)

* [CLDN-1749] adding new viz

* chanigng to work with standard filters

* Adding generic filter extraction

* Removing unused imports

* [CLDN-1749] Cleaning up code for reusablility

* [CLDN-1749] removing unused files

* [CLDN-1746] fixing case

* [CLDN-1749] adding parameter validation

* [CLDN-1749] adding error message and prefix parameter

* [CLDN-1749] removing unused files

* [CLDN-1749] adding temp base image for docker deployment

* [CLDN-1749] Better error handling and new icon

* [CLDN-1749] remove unused imports

* temp dockerfile change

* [CLDN-1749] Adding the adhoc filters back in

* [CLDN-1749] Updating image

* [CLDN-1749] Adding new thumbnail

* Updating dockerfile

* [CLDN-1749] Removing uneeded control panel elements

* [CLDN-1749] Fixing build errors

* [CLDN-1749] New image

* Change to use data from dataset

* Removing unsed function

* Fixing typos

* renove unused import

* updating image

* error message and label fixes

* updating image

* Update cccs-build/superset/Dockerfile

Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-iframe/src/plugin/transformProps.ts

Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-iframe/src/plugin/transformProps.ts

Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>

Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>

* Prevent non-admins from using users api (#236)

* Prevent non-admins from using users api

* Add tests

* added styles to highlight adhoc filter when focused and fix awkward empty header

* removed suggestions from popping up

* added comment

* fixed unused import error

* updating base image

* Update Dockerfile

* [CLDN-1829] fixing principle filter logic with state (#234) (#244)

* [CLDN-1829] fixing principle filter logic with state

* [CLDN-1829] Fixing build error

* [cccs-2.0] Updating image (#245)

* value set to empty list instead of undefined

* updating base image

* Feature/cldn 1748 (#243)

* [CLDN-1748] adding base component

* [CLDN-1748] changing state to use advanced data type

* [CLDN-1748] add multi select for musiness type

* [CLDN-1748] adding config manager

* [CLDN-1748] fixing build errors

* temp update of base image

* [CLDN-1748] Fixing Url parameter encoding and show name of dashboard drilling to

* temp update of image

* Pulling extra data from dashboard endpoint

* Adding more data to filters object

* [CLDN-1748] passing mroe fitler information

* [CLDN-1748] QA feedback

* [CLDN-1748] Fixing build issues

* [CLDN-1748] Updating dockerfile

* [CLDN-1748] Updating dockerfile

* fixing props name

* update image

* updating docker file

* [CLDN-1748] Name changes

* [CLDN-1748] updating image

* [CLDN-1748] Adding icon

* [CLDN-1748] fixing build errors

* [CLDN-1748] update image

* [CLDN-1748] fixing context menue to renderering

* UPdating docker file

* CLDN-1710 including schema in search columns for datasets api (#253)

* Update Dockerfile

* CLDN-1710 tag update (#255)

* update image tag

* updating image tag

* Update vault image to get new CAs

* update image tag

* Update Dockerfile

* Update Dockerfile

* Feature/cldn 1773 (#269)

* [CLDN-1773] Adding default group by

* Updating DockerFile

* Fixing Groupby

* Updating base image

* [CLDN-1773] Saving Group by order

* Updating dockerfile

* Update controlPanel.tsx

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts

Co-authored-by: cccs-tom <59839056+cccs-tom@users.noreply.github.com>

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts

Co-authored-by: cccs-tom <59839056+cccs-tom@users.noreply.github.com>

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts

Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>

---------

Co-authored-by: cccs-tom <59839056+cccs-tom@users.noreply.github.com>
Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>

* Updating docker file (#270)

* Feature/cldn 1968 (Display JSON data inline) (#268)

* Add buttons to expand and minimize JSON data as well as ability to expand and/or collapse all rows in a certain column

* [CLDN-1968] Added expand button for full row

* [CLDN-1968] Resize JSON columns

* [CLDN-1968] Added new array which tracks JSON cell state

* Revert "[CLDN-1968] Added new array which tracks JSON cell state"

This reverts commit dabc3da.

* [CLDN-1968] Added ability for row level expand all button to track if cells are expanded or not

* [CLDN-1968] Ran pre-commit hook

* [CLDN-1968] Improved UI

* [CLDN-1968] Update image tag for testing

* [CLDN-1968] Revert image tag for testing

* [CLDN-1968] Added multiple UI/UX changes based on QA feedback

* [CLDN-1968] Added more UI/UX changes based on QA feedback

* [CLDN-1968] Temp change to image

* Revert "[CLDN-1968] Temp change to image"

This reverts commit 57490bd.

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/CccsGrid.tsx

Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>

* [CLDN-1968] Remove 'TODO's as they are no longer needed

* [CLDN-1968] Changed a variable name, and condensed a few lines

* [CLDN-1968] Modified a setState so that only one is needed instead of 2

---------

Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>

* Feature/cldn 1968 (#272)

* Add buttons to expand and minimize JSON data as well as ability to expand and/or collapse all rows in a certain column

* [CLDN-1968] Added expand button for full row

* [CLDN-1968] Resize JSON columns

* [CLDN-1968] Added new array which tracks JSON cell state

* Revert "[CLDN-1968] Added new array which tracks JSON cell state"

This reverts commit dabc3da.

* [CLDN-1968] Added ability for row level expand all button to track if cells are expanded or not

* [CLDN-1968] Ran pre-commit hook

* [CLDN-1968] Improved UI

* [CLDN-1968] Update image tag for testing

* [CLDN-1968] Revert image tag for testing

* [CLDN-1968] Added multiple UI/UX changes based on QA feedback

* [CLDN-1968] Added more UI/UX changes based on QA feedback

* [CLDN-1968] Temp change to image

* Revert "[CLDN-1968] Temp change to image"

This reverts commit 57490bd.

* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/CccsGrid.tsx

Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>

* [CLDN-1968] Remove 'TODO's as they are no longer needed

* [CLDN-1968] Changed a variable name, and condensed a few lines

* [CLDN-1968] Modified a setState so that only one is needed instead of 2

* Update superset base image

---------

Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>

* post merge fixes

* updating package lock

* fix npm install

* npm fixes

* updating base image tag

* fixed typing extensions version

* grabbing cldn 2076 changes

* fixed dev version number

* updating base image

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Signed-off-by: DASTC\gupta_rajan <rajan.gupta@stengg.com>
Signed-off-by: tison <wander4096@gmail.com>
Co-authored-by: Hugh A. Miles II <hughmil3s@gmail.com>
Co-authored-by: Antonio Rivero Martinez <38889534+Antonio-RiveroMartnez@users.noreply.github.com>
Co-authored-by: Antonio Rivero <antonioriverocode@gmail.com>
Co-authored-by: Elizabeth Thompson <eschutho@gmail.com>
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
Co-authored-by: JUST.in DO IT <justin.park@airbnb.com>
Co-authored-by: ʈᵃᵢ <tdupreetan@gmail.com>
Co-authored-by: John Bodley <4567245+john-bodley@users.noreply.github.com>
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
Co-authored-by: Daniel Draper <Germandrummer92@gmail.com>
Co-authored-by: Daniel Draper <daniel.draper@understand.ai>
Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>
Co-authored-by: Cody Leff <cody@preset.io>
Co-authored-by: Lily Kuang <lily@preset.io>
Co-authored-by: Sergey Shevchenko <sergeyshevchdevelop@gmail.com>
Co-authored-by: Evan Rusackas <evan@preset.io>
Co-authored-by: Sam Firke <sfirke@users.noreply.github.com>
Co-authored-by: Jack Fragassi <jfragassi98@gmail.com>
Co-authored-by: Geido <60598000+geido@users.noreply.github.com>
Co-authored-by: Stepan <66589759+Always-prog@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
Co-authored-by: Cemre Mengu <cemremengu@gmail.com>
Co-authored-by: Mayur <mayurnewase111@gmail.com>
Co-authored-by: Diego Medina <diegomedina24@gmail.com>
Co-authored-by: Daniel Vaz Gaspar <danielvazgaspar@gmail.com>
Co-authored-by: cleslie <cjaleslie@gmail.com>
Co-authored-by: Calum <calum.leslie@skyscanner.net>
Co-authored-by: Igor Șincariov <102555782+igorsinc@users.noreply.github.com>
Co-authored-by: Igor Șincariov <igorsinc@pm.me>
Co-authored-by: EugeneTorap <evgenykrutpro@gmail.com>
Co-authored-by: Artem Shumeiko <53895552+artemonsh@users.noreply.github.com>
Co-authored-by: 王一川 <wj2247689442@gmail.com>
Co-authored-by: nisheldo <njsheldon@me.com>
Co-authored-by: Leo Schick <67712864+leo-schick@users.noreply.github.com>
Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>
Co-authored-by: Arash Afghahi <48933336+AAfghahi@users.noreply.github.com>
Co-authored-by: Denis Krivenko <dnskrv88@gmail.com>
Co-authored-by: Kamil Gabryjelski <kamil.gabryjelski@gmail.com>
Co-authored-by: Erik Ritter <erik.ritter@airbnb.com>
Co-authored-by: Phillip Kelley-Dotson <pkelleydotson@yahoo.com>
Co-authored-by: lyndsiWilliams <kcatgirl@gmail.com>
Co-authored-by: tejaskatariya <42517374+tejaskatariya@users.noreply.github.com>
Co-authored-by: Adrian <icsu@users.noreply.github.com>
Co-authored-by: alexclavel-ocient <111374753+alexclavel-ocient@users.noreply.github.com>
Co-authored-by: Trey Gilliland <treygilliland3@gmail.com>
Co-authored-by: Michael S. Molina <michael.s.molina@gmail.com>
Co-authored-by: Rajan Gupta <rajan0493@gmail.com>
Co-authored-by: DASTC\gupta_rajan <rajan.gupta@stengg.com>
Co-authored-by: Dheeraj Jaiswal <118437694+dheeraj-jaiswal-lowes@users.noreply.github.com>
Co-authored-by: tison <wander4096@gmail.com>
Co-authored-by: Changhoon Oh <81631424+okayhooni@users.noreply.github.com>
Co-authored-by: ok9897 <ok9897@krafton.com>
Co-authored-by: kuruv <kuruv@users.noreply.github.com>
Co-authored-by: Zef Lin <zef@preset.io>
Co-authored-by: cccs-RyanS <71385290+cccs-RyanS@users.noreply.github.com>
Co-authored-by: Reese <10563996+reesercollins@users.noreply.github.com>
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
Co-authored-by: GITHUB_USERNAME <EMAIL>
Co-authored-by: cccs-nik <68961854+cccs-nik@users.noreply.github.com>
Co-authored-by: cccs-tom <59839056+cccs-tom@users.noreply.github.com>
@mistercrunch mistercrunch added 🏷️ bot A label used by `supersetbot` to keep track of which PR where auto-tagged with release labels 🚢 2.1.0 and removed 🚢 2.1.3 labels Mar 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🏷️ bot A label used by `supersetbot` to keep track of which PR where auto-tagged with release labels size/M 🚢 2.1.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants