mirror of
https://github.com/apache/superset.git
synced 2026-04-18 23:55:00 +00:00
docs(db_engine_specs): restructure feature table for GitHub rendering (#35809)
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -51,68 +51,510 @@ Note that DB engine specs are completely optional. Superset can connect to any d
|
||||
|
||||
## Features
|
||||
|
||||
The table below (generated via `python superset/db_engine_specs/lib.py`) summarizes the information about the status of all DB engine specs in Superset (note that this excludes 3rd party DB engine specs):
|
||||
The tables below (generated via `python superset/db_engine_specs/lib.py`) summarize the status of all DB engine specs in Superset, organized by feature category for easier navigation (note that this excludes 3rd party DB engine specs).
|
||||
|
||||
| Feature | Amazon Athena | Amazon DynamoDB | Amazon Redshift | Apache Drill | Apache Druid | Apache Hive | Apache Impala | Apache Kylin | Apache Pinot | Apache Solr | Apache Spark SQL | Ascend | Aurora MySQL (Data API) | Aurora PostgreSQL (Data API) | Azure Synapse | ClickHouse | ClickHouse Connect (Superset) | CockroachDB | CrateDB | Databricks | Databricks Interactive Cluster | Databricks SQL Endpoint | Dremio | DuckDB | ElasticSearch (OpenDistro SQL) | ElasticSearch (SQL API) | Exasol | Firebird | Firebolt | Google BigQuery | Google Sheets | IBM Db2 | IBM Netezza Performance Server | KustoKQL | KustoSQL | Microsoft SQL Server | MySQL | Ocient | Oracle | PostgreSQL | Presto | RisingWave | SAP HANA | SQLite | Shillelagh | Snowflake | StarRocks | Teradata | Trino | Vertica | base |
|
||||
| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---|
|
||||
| Module | superset.db_engine_specs.athena | superset.db_engine_specs.dynamodb | superset.db_engine_specs.redshift | superset.db_engine_specs.drill | superset.db_engine_specs.druid | superset.db_engine_specs.hive | superset.db_engine_specs.impala | superset.db_engine_specs.kylin | superset.db_engine_specs.pinot | superset.db_engine_specs.solr | superset.db_engine_specs.spark | superset.db_engine_specs.ascend | superset.db_engine_specs.aurora | superset.db_engine_specs.aurora | superset.db_engine_specs.mssql | superset.db_engine_specs.clickhouse | superset.db_engine_specs.clickhouse | superset.db_engine_specs.cockroachdb | superset.db_engine_specs.crate | superset.db_engine_specs.databricks | superset.db_engine_specs.databricks | superset.db_engine_specs.databricks | superset.db_engine_specs.dremio | superset.db_engine_specs.duckdb | superset.db_engine_specs.elasticsearch | superset.db_engine_specs.elasticsearch | superset.db_engine_specs.exasol | superset.db_engine_specs.firebird | superset.db_engine_specs.firebolt | superset.db_engine_specs.bigquery | superset.db_engine_specs.gsheets | superset.db_engine_specs.db2 | superset.db_engine_specs.netezza | superset.db_engine_specs.kusto | superset.db_engine_specs.kusto | superset.db_engine_specs.mssql | superset.db_engine_specs.mysql | superset.db_engine_specs.ocient | superset.db_engine_specs.oracle | superset.db_engine_specs.postgres | superset.db_engine_specs.presto | superset.db_engine_specs.risingwave | superset.db_engine_specs.hana | superset.db_engine_specs.sqlite | superset.db_engine_specs.shillelagh | superset.db_engine_specs.snowflake | superset.db_engine_specs.starrocks | superset.db_engine_specs.teradata | superset.db_engine_specs.trino | superset.db_engine_specs.vertica | superset.db_engine_specs.presto |
|
||||
| Method used to limit the rows in the subquery | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | WRAP_SQL | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FETCH_MANY | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | WRAP_SQL | FORCE_LIMIT | WRAP_SQL | WRAP_SQL | WRAP_SQL | FORCE_LIMIT | FORCE_LIMIT | WRAP_SQL | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | WRAP_SQL | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT | WRAP_SQL | FORCE_LIMIT | FORCE_LIMIT | FORCE_LIMIT |
|
||||
| Supports JOINs | True | True | True | True | False | True | True | True | False | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Supports subqueries | True | True | True | True | True | True | True | True | False | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Allows aliases in the SELECT statement | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Allows referencing aliases in the ORDER BY statement | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Supports secondary time columns | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Allows omitting time filters from inline GROUP BYs | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Able to use source column when an alias overshadows it | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | True | False | False |
|
||||
| Allows aggregations in ORDER BY not present in the SELECT | True | True | True | True | True | False | True | True | True | True | False | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Allows expressions in ORDER BY | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Allows CTE as a subquery | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Allows LIMIT clause (instead of TOP) | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | False | True | True | True |
|
||||
| Maximum column name | None | None | 127 | None | None | 767 | None | None | None | None | 767 | None | 64 | 63 | 128 | None | None | 63 | None | None | 767 | None | None | None | None | None | 128 | None | None | 128 | None | 30 | None | None | None | 128 | 64 | 30 | 30 | None | None | 63 | None | 30 | None | None | 256 | 64 | 30 | None | None | None |
|
||||
| Allows comments | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | False | True | True | True | True | True | True | True | False | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Colons must be escaped | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Has time grain SECOND | True | True | True | True | True | True | False | True | True | False | True | True | True | True | True | False | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | True | True | True |
|
||||
| Has time grain FIVE_SECONDS | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False |
|
||||
| Has time grain THIRTY_SECONDS | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False |
|
||||
| Has time grain MINUTE | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Has time grain FIVE_MINUTES | False | False | False | False | True | False | False | False | True | False | False | False | False | False | True | True | True | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | True | True | False | False | False | False | False | False | False | False | True | True | True | False | False | False | False | False |
|
||||
| Has time grain TEN_MINUTES | False | False | False | False | True | False | False | False | True | False | False | False | False | False | True | True | True | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | True | True | False | False | False | False | False | False | False | False | True | True | True | False | False | False | False | False |
|
||||
| Has time grain FIFTEEN_MINUTES | False | False | False | True | True | False | False | False | True | False | False | False | False | False | True | True | True | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | True | True | False | False | False | False | False | False | False | False | True | True | True | False | False | False | False | False |
|
||||
| Has time grain THIRTY_MINUTES | False | False | False | True | True | False | False | False | True | False | False | False | False | False | True | True | True | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | True | False | False | False | False | False | False | False | False | True | True | True | False | False | False | False | False |
|
||||
| Has time grain HALF_HOUR | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | True | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False |
|
||||
| Has time grain HOUR | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Has time grain SIX_HOURS | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False |
|
||||
| Has time grain DAY | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Has time grain WEEK | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | False | True | False | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True |
|
||||
| Has time grain WEEK_STARTING_SUNDAY | True | True | False | False | True | True | False | False | False | False | True | False | False | False | True | False | False | False | False | True | True | True | False | False | False | False | False | False | False | False | True | False | False | False | True | True | False | False | False | False | True | False | False | False | True | True | False | False | False | True | False | True |
|
||||
| Has time grain WEEK_STARTING_MONDAY | False | True | False | False | False | False | False | False | False | False | False | False | True | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | True | True | True | False | False | False | True | False | False | False | True | True | False | True | False | True | False | True |
|
||||
| Has time grain WEEK_ENDING_SATURDAY | True | True | False | False | True | True | False | False | False | False | True | False | False | False | False | False | False | False | False | True | True | True | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | True | True | False | False | False | True | False | True |
|
||||
| Has time grain WEEK_ENDING_SUNDAY | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | True | True | False | False | False | True | False | True |
|
||||
| Has time grain MONTH | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Has time grain QUARTER | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | False | True | False | True | True | True | True | True | False | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Has time grain QUARTER_YEAR | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | True | False | False | False | False | False | False | True | True | False | False | False | False | False | False |
|
||||
| Has time grain YEAR | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Masks/unmasks encrypted_extra | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Has column type mappings | False | False | False | False | False | True | False | False | False | False | True | False | True | True | True | True | True | True | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | True | False | False | False | True | True | False | False | False | False | False | True | False | True | False | True |
|
||||
| Returns a list of function names | False | False | False | False | False | True | False | False | False | False | True | False | False | False | False | True | True | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | True | True | False | False | False | True | False | True |
|
||||
| Supports user impersonation | False | False | False | True | False | True | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | True | False | True | False | False |
|
||||
| Support file upload | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | False | True | True | True | True | True | True | True | True | True | True | True | True | True | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Returns extra table metadata | False | False | False | False | False | True | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | True | False | False |
|
||||
| Maps driver exceptions to Superset exceptions | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Parses error messages and returns Superset errors | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Supports changing the schema per-query | False | False | False | True | False | True | False | False | False | False | True | False | True | True | False | False | False | True | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | True | True | False | False | False | False | True | True | False | True | False | True |
|
||||
| Supports catalogs | False | False | True | False | False | False | False | False | False | False | False | False | False | True | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | True | False | False | True | False | False | False | False | False | False | True | False | True | False | True | False | False | True | False | False | False | True | False |
|
||||
| Supports changing the catalog per-query | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Can be connected thru an SSH tunnel | False | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | True | False | False | True | True | True | True | True | True | True | True | True | True | True | True | True | False | False | True | True | True | True | True | True |
|
||||
| Allows query to be canceled | False | False | True | False | False | True | True | False | False | False | True | True | True | True | False | False | False | True | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | True | False | False | True | True | False | False | False | False | True | True | False | True | False | False |
|
||||
| Returns additional metrics on dataset creation | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Supports querying the latest partition only | False | False | False | False | False | True | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | True | False | True |
|
||||
| Expands complex types (arrays, structs) into rows/columns | False | False | False | False | False | True | False | False | False | False | True | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Supports query cost estimation | False | False | False | False | False | True | False | False | False | False | True | False | False | True | False | False | False | True | False | False | True | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | True | True | False | False | False | False | False | False | False | True | False | True |
|
||||
| Supports validating SQL before running query | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | False | True | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Score | 20 | 32 | 48 | 50 | 37 | 120 | 37 | 28 | 32 | 20 | 120 | 38 | 59 | 88 | 44 | 41 | 41 | 78 | 28 | 40 | 120 | 30 | 28 | 28 | 26 | 26 | 28 | 26 | 28 | 63 | 61 | 28 | 38 | 26 | 44 | 44 | 59 | 38 | 28 | 38 | 132 | 78 | 28 | 37 | 41 | 41 | 62 | 59 | 27 | 112 | 38 | 82 |
|
||||
### Quick Navigation
|
||||
|
||||
(Note, this table is generated via: `python superset/db_engine_specs/lib.py`.)
|
||||
- [Feature Overview](#feature-overview) - High-level summary of support across all databases
|
||||
- [Database Information](#database-information) - Module paths and core metadata
|
||||
- [SQL Capabilities](#sql-capabilities) - SQL language features and capabilities
|
||||
- [Time Grains – Common](#time-grains--common) - Standard time granularity support
|
||||
- [Time Grains – Extended](#time-grains--extended) - Sub-hour and week variant time grains
|
||||
- [Core Platform & Metadata Features](#core-platform--metadata-features) - Platform integration and metadata capabilities
|
||||
- [Operational & Advanced Features](#operational--advanced-features) - Advanced operational capabilities
|
||||
|
||||
### Feature Overview
|
||||
|
||||
| Database | Score | SQL Basics | Advanced SQL | Common Time Grains | Extended Time Grains | Integrations | Advanced Features |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| Presto | 159 | Supported | Partial | Supported | Partial | Partial | Supported |
|
||||
| Trino | 149 | Supported | Partial | Supported | Partial | Partial | Partial |
|
||||
| Apache Hive | 140 | Supported | Not supported | Supported | Partial | Partial | Partial |
|
||||
| Apache Spark SQL | 140 | Supported | Not supported | Supported | Partial | Partial | Partial |
|
||||
| Databricks Interactive Cluster | 140 | Supported | Not supported | Supported | Partial | Partial | Partial |
|
||||
| base | 109 | Supported | Partial | Supported | Partial | Partial | Partial |
|
||||
| Aurora PostgreSQL (Data API) | 104 | Supported | Partial | Supported | Partial | Partial | Partial |
|
||||
| CockroachDB | 94 | Supported | Partial | Supported | Partial | Partial | Partial |
|
||||
| RisingWave | 94 | Supported | Partial | Supported | Partial | Partial | Partial |
|
||||
| Google BigQuery | 83 | Supported | Partial | Supported | Partial | Partial | Partial |
|
||||
| Apache Doris | 79 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Snowflake | 72 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Databricks | 70 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Databricks (legacy) | 70 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| StarRocks | 69 | Supported | Partial | Supported | Partial | Partial | Partial |
|
||||
| SingleStore | 68 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| ClickHouse Connect (Superset) | 61 | Supported | Partial | Partial | Partial | Partial | Not supported |
|
||||
| Google Sheets | 61 | Supported | Partial | Supported | Supported | Partial | Partial |
|
||||
| Aurora MySQL (Data API) | 59 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| MariaDB | 59 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| MySQL | 59 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| OceanBase | 59 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| MotherDuck | 58 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| KustoSQL | 54 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| ClickHouse | 51 | Supported | Partial | Partial | Partial | Partial | Not supported |
|
||||
| Databend | 51 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Apache Drill | 50 | Supported | Partial | Supported | Partial | Partial | Partial |
|
||||
| Apache Druid | 47 | Partial | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Amazon Redshift | 44 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Azure Synapse | 44 | Partial | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Microsoft SQL Server | 44 | Partial | Partial | Supported | Partial | Partial | Not supported |
|
||||
| SQLite | 41 | Supported | Partial | Supported | Supported | Not supported | Not supported |
|
||||
| Shillelagh | 41 | Supported | Partial | Supported | Supported | Not supported | Not supported |
|
||||
| KustoKQL | 40 | Supported | Partial | Partial | Partial | Partial | Not supported |
|
||||
| Ascend | 38 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| DuckDB | 38 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| IBM Db2 | 38 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| IBM Db2 for i | 38 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| Ocient | 38 | Partial | Partial | Partial | Partial | Partial | Not supported |
|
||||
| Apache Impala | 37 | Supported | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| ElasticSearch (SQL API) | 37 | Partial | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| PostgreSQL | 34 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Vertica | 34 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Amazon DynamoDB | 32 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Apache Pinot | 32 | Partial | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Superset meta database | 31 | Supported | Partial | Supported | Supported | Not supported | Not supported |
|
||||
| Databricks SQL Endpoint | 30 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Apache Kylin | 28 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| CrateDB | 28 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| Dremio | 28 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| Exasol | 28 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| Firebolt | 28 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| IBM Netezza Performance Server | 28 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| Oracle | 28 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| Parseable | 28 | Supported | Partial | Supported | Not supported | Partial | Not supported |
|
||||
| Couchbase | 27 | Partial | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| Denodo | 27 | Supported | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| SAP HANA | 27 | Supported | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| Teradata | 27 | Supported | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| ElasticSearch (OpenDistro SQL) | 26 | Partial | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| Firebird | 26 | Supported | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| TDengine | 25 | Supported | Partial | Partial | Not supported | Partial | Not supported |
|
||||
| YDB | 23 | Supported | Partial | Supported | Partial | Partial | Not supported |
|
||||
| Amazon Athena | 20 | Supported | Partial | Supported | Partial | Not supported | Not supported |
|
||||
| Apache Solr | 20 | Partial | Partial | Not supported | Not supported | Partial | Not supported |
|
||||
|
||||
### Database Information
|
||||
|
||||
| Database | Module | Limit Method | Limit Clause | Max Column Name |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Amazon Athena | superset.db_engine_specs.athena | FORCE_LIMIT | True | None |
|
||||
| Amazon DynamoDB | superset.db_engine_specs.dynamodb | FORCE_LIMIT | True | None |
|
||||
| Amazon Redshift | superset.db_engine_specs.redshift | FORCE_LIMIT | True | 127 |
|
||||
| Apache Doris | superset.db_engine_specs.doris | FORCE_LIMIT | True | 64 |
|
||||
| Apache Drill | superset.db_engine_specs.drill | FORCE_LIMIT | True | None |
|
||||
| Apache Druid | superset.db_engine_specs.druid | FORCE_LIMIT | True | None |
|
||||
| Apache Hive | superset.db_engine_specs.hive | FORCE_LIMIT | True | 767 |
|
||||
| Apache Impala | superset.db_engine_specs.impala | FORCE_LIMIT | True | None |
|
||||
| Apache Kylin | superset.db_engine_specs.kylin | FORCE_LIMIT | True | None |
|
||||
| Apache Pinot | superset.db_engine_specs.pinot | FORCE_LIMIT | True | None |
|
||||
| Apache Solr | superset.db_engine_specs.solr | FORCE_LIMIT | True | None |
|
||||
| Apache Spark SQL | superset.db_engine_specs.spark | FORCE_LIMIT | True | 767 |
|
||||
| Ascend | superset.db_engine_specs.ascend | FORCE_LIMIT | True | None |
|
||||
| Aurora MySQL (Data API) | superset.db_engine_specs.aurora | FORCE_LIMIT | True | 64 |
|
||||
| Aurora PostgreSQL (Data API) | superset.db_engine_specs.aurora | FORCE_LIMIT | True | 63 |
|
||||
| Azure Synapse | superset.db_engine_specs.mssql | FORCE_LIMIT | True | 128 |
|
||||
| ClickHouse | superset.db_engine_specs.clickhouse | FORCE_LIMIT | True | None |
|
||||
| ClickHouse Connect (Superset) | superset.db_engine_specs.clickhouse | FORCE_LIMIT | True | None |
|
||||
| CockroachDB | superset.db_engine_specs.cockroachdb | FORCE_LIMIT | True | 63 |
|
||||
| Couchbase | superset.db_engine_specs.couchbase | FORCE_LIMIT | True | None |
|
||||
| CrateDB | superset.db_engine_specs.crate | FORCE_LIMIT | True | None |
|
||||
| Databend | superset.db_engine_specs.databend | FORCE_LIMIT | True | None |
|
||||
| Databricks | superset.db_engine_specs.databricks | FORCE_LIMIT | True | None |
|
||||
| Databricks (legacy) | superset.db_engine_specs.databricks | FORCE_LIMIT | True | None |
|
||||
| Databricks Interactive Cluster | superset.db_engine_specs.databricks | FORCE_LIMIT | True | 767 |
|
||||
| Databricks SQL Endpoint | superset.db_engine_specs.databricks | FORCE_LIMIT | True | None |
|
||||
| Denodo | superset.db_engine_specs.denodo | FORCE_LIMIT | True | None |
|
||||
| Dremio | superset.db_engine_specs.dremio | FORCE_LIMIT | True | None |
|
||||
| DuckDB | superset.db_engine_specs.duckdb | FORCE_LIMIT | True | None |
|
||||
| ElasticSearch (OpenDistro SQL) | superset.db_engine_specs.elasticsearch | FORCE_LIMIT | True | None |
|
||||
| ElasticSearch (SQL API) | superset.db_engine_specs.elasticsearch | FORCE_LIMIT | True | None |
|
||||
| Exasol | superset.db_engine_specs.exasol | FORCE_LIMIT | True | 128 |
|
||||
| Firebird | superset.db_engine_specs.firebird | FETCH_MANY | True | None |
|
||||
| Firebolt | superset.db_engine_specs.firebolt | FORCE_LIMIT | True | None |
|
||||
| Google BigQuery | superset.db_engine_specs.bigquery | FORCE_LIMIT | True | 128 |
|
||||
| Google Sheets | superset.db_engine_specs.gsheets | FORCE_LIMIT | True | None |
|
||||
| IBM Db2 | superset.db_engine_specs.db2 | WRAP_SQL | True | 30 |
|
||||
| IBM Db2 for i | superset.db_engine_specs.ibmi | WRAP_SQL | True | 128 |
|
||||
| IBM Netezza Performance Server | superset.db_engine_specs.netezza | FORCE_LIMIT | True | None |
|
||||
| KustoKQL | superset.db_engine_specs.kusto | FORCE_LIMIT | True | None |
|
||||
| KustoSQL | superset.db_engine_specs.kusto | WRAP_SQL | True | None |
|
||||
| MariaDB | superset.db_engine_specs.mariadb | FORCE_LIMIT | True | 64 |
|
||||
| Microsoft SQL Server | superset.db_engine_specs.mssql | FORCE_LIMIT | True | 128 |
|
||||
| MotherDuck | superset.db_engine_specs.duckdb | FORCE_LIMIT | True | None |
|
||||
| MySQL | superset.db_engine_specs.mysql | FORCE_LIMIT | True | 64 |
|
||||
| OceanBase | superset.db_engine_specs.oceanbase | FORCE_LIMIT | True | 128 |
|
||||
| Ocient | superset.db_engine_specs.ocient | FORCE_LIMIT | True | 30 |
|
||||
| Oracle | superset.db_engine_specs.oracle | FORCE_LIMIT | True | 128 |
|
||||
| Parseable | superset.db_engine_specs.parseable | FORCE_LIMIT | True | None |
|
||||
| PostgreSQL | superset.db_engine_specs.postgres | FORCE_LIMIT | True | None |
|
||||
| Presto | superset.db_engine_specs.presto | FORCE_LIMIT | True | None |
|
||||
| RisingWave | superset.db_engine_specs.risingwave | FORCE_LIMIT | True | 63 |
|
||||
| SAP HANA | superset.db_engine_specs.hana | WRAP_SQL | True | 30 |
|
||||
| SQLite | superset.db_engine_specs.sqlite | FORCE_LIMIT | True | None |
|
||||
| Shillelagh | superset.db_engine_specs.shillelagh | FORCE_LIMIT | True | None |
|
||||
| SingleStore | superset.db_engine_specs.singlestore | FORCE_LIMIT | True | 256 |
|
||||
| Snowflake | superset.db_engine_specs.snowflake | FORCE_LIMIT | True | 256 |
|
||||
| StarRocks | superset.db_engine_specs.starrocks | FORCE_LIMIT | True | 64 |
|
||||
| Superset meta database | superset.db_engine_specs.superset | FORCE_LIMIT | True | None |
|
||||
| TDengine | superset.db_engine_specs.tdengine | FORCE_LIMIT | True | 64 |
|
||||
| Teradata | superset.db_engine_specs.teradata | FORCE_LIMIT | True | 30 |
|
||||
| Trino | superset.db_engine_specs.trino | FORCE_LIMIT | True | None |
|
||||
| Vertica | superset.db_engine_specs.vertica | FORCE_LIMIT | True | None |
|
||||
| YDB | superset.db_engine_specs.ydb | FORCE_LIMIT | True | None |
|
||||
| base | superset.db_engine_specs.presto | FORCE_LIMIT | True | None |
|
||||
|
||||
### SQL Capabilities
|
||||
|
||||
| Database | JOINs | Subqueries | Aliases in SELECT | Aliases in ORDER BY | CTEs | Comments | Escaped Colons | Inline Time Groupby | Source Column When Aliased | Aggregations in ORDER BY | Expressions in ORDER BY |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| Amazon Athena | True | True | True | True | True | True | False | False | False | True | False |
|
||||
| Amazon DynamoDB | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Amazon Redshift | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Apache Doris | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Apache Drill | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Apache Druid | False | True | True | True | True | True | True | False | False | True | False |
|
||||
| Apache Hive | True | True | True | True | True | True | True | False | False | False | False |
|
||||
| Apache Impala | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Apache Kylin | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Apache Pinot | False | False | False | False | True | True | True | False | False | True | False |
|
||||
| Apache Solr | False | False | True | True | True | True | True | False | False | True | False |
|
||||
| Apache Spark SQL | True | True | True | True | True | True | True | False | False | False | False |
|
||||
| Ascend | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Aurora MySQL (Data API) | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Aurora PostgreSQL (Data API) | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Azure Synapse | True | True | True | True | False | True | True | False | False | True | False |
|
||||
| ClickHouse | True | True | True | True | True | True | True | True | False | True | False |
|
||||
| ClickHouse Connect (Superset) | True | True | True | True | True | True | True | True | False | True | False |
|
||||
| CockroachDB | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Couchbase | False | False | True | True | True | True | True | False | False | True | False |
|
||||
| CrateDB | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Databend | True | True | True | True | True | True | True | True | False | True | False |
|
||||
| Databricks | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Databricks (legacy) | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Databricks Interactive Cluster | True | True | True | True | True | True | True | False | False | False | False |
|
||||
| Databricks SQL Endpoint | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Denodo | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Dremio | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| DuckDB | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| ElasticSearch (OpenDistro SQL) | False | True | True | True | True | False | True | True | False | True | False |
|
||||
| ElasticSearch (SQL API) | False | True | True | True | True | False | True | True | False | True | False |
|
||||
| Exasol | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Firebird | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Firebolt | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Google BigQuery | True | True | True | True | True | True | True | False | False | True | True |
|
||||
| Google Sheets | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| IBM Db2 | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| IBM Db2 for i | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| IBM Netezza Performance Server | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| KustoKQL | True | True | True | True | True | False | True | True | False | True | False |
|
||||
| KustoSQL | True | True | True | True | True | False | True | True | False | True | False |
|
||||
| MariaDB | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Microsoft SQL Server | True | True | True | True | False | True | True | False | False | True | False |
|
||||
| MotherDuck | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| MySQL | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| OceanBase | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Ocient | True | True | True | True | False | True | True | False | False | True | False |
|
||||
| Oracle | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Parseable | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| PostgreSQL | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Presto | True | True | True | True | True | True | True | False | True | True | False |
|
||||
| RisingWave | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| SAP HANA | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| SQLite | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Shillelagh | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| SingleStore | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Snowflake | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| StarRocks | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Superset meta database | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| TDengine | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Teradata | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| Trino | True | True | True | True | True | True | True | False | True | True | False |
|
||||
| Vertica | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| YDB | True | True | True | True | True | True | True | False | False | True | False |
|
||||
| base | True | True | True | True | True | True | True | False | False | True | False |
|
||||
|
||||
### Time Grains – Common
|
||||
|
||||
| Database | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| Amazon Athena | True | True | True | True | True | True | True | True |
|
||||
| Amazon DynamoDB | True | True | True | True | True | True | True | True |
|
||||
| Amazon Redshift | True | True | True | True | True | True | True | True |
|
||||
| Apache Doris | True | True | True | True | True | True | True | True |
|
||||
| Apache Drill | True | True | True | True | True | True | True | True |
|
||||
| Apache Druid | True | True | True | True | True | True | True | True |
|
||||
| Apache Hive | True | True | True | True | True | True | True | True |
|
||||
| Apache Impala | False | True | True | True | True | True | True | True |
|
||||
| Apache Kylin | True | True | True | True | True | True | True | True |
|
||||
| Apache Pinot | True | True | True | True | True | True | True | True |
|
||||
| Apache Solr | False | False | False | False | False | False | False | False |
|
||||
| Apache Spark SQL | True | True | True | True | True | True | True | True |
|
||||
| Ascend | True | True | True | True | True | True | True | True |
|
||||
| Aurora MySQL (Data API) | True | True | True | True | True | True | True | True |
|
||||
| Aurora PostgreSQL (Data API) | True | True | True | True | True | True | True | True |
|
||||
| Azure Synapse | True | True | True | True | True | True | True | True |
|
||||
| ClickHouse | False | True | True | True | True | True | True | True |
|
||||
| ClickHouse Connect (Superset) | False | True | True | True | True | True | True | True |
|
||||
| CockroachDB | True | True | True | True | True | True | True | True |
|
||||
| Couchbase | True | True | True | True | False | True | True | True |
|
||||
| CrateDB | True | True | True | True | True | True | True | True |
|
||||
| Databend | True | True | True | True | True | True | True | True |
|
||||
| Databricks | True | True | True | True | True | True | True | True |
|
||||
| Databricks (legacy) | True | True | True | True | True | True | True | True |
|
||||
| Databricks Interactive Cluster | True | True | True | True | True | True | True | True |
|
||||
| Databricks SQL Endpoint | True | True | True | True | True | True | True | True |
|
||||
| Denodo | False | True | True | True | True | True | True | True |
|
||||
| Dremio | True | True | True | True | True | True | True | True |
|
||||
| DuckDB | True | True | True | True | True | True | True | True |
|
||||
| ElasticSearch (OpenDistro SQL) | True | True | True | True | False | True | False | True |
|
||||
| ElasticSearch (SQL API) | True | True | True | True | True | True | False | True |
|
||||
| Exasol | True | True | True | True | True | True | True | True |
|
||||
| Firebird | True | True | True | True | False | True | False | True |
|
||||
| Firebolt | True | True | True | True | True | True | True | True |
|
||||
| Google BigQuery | True | True | True | True | True | True | True | True |
|
||||
| Google Sheets | True | True | True | True | True | True | True | True |
|
||||
| IBM Db2 | True | True | True | True | True | True | True | True |
|
||||
| IBM Db2 for i | True | True | True | True | True | True | True | True |
|
||||
| IBM Netezza Performance Server | True | True | True | True | True | True | True | True |
|
||||
| KustoKQL | True | True | True | True | True | True | False | True |
|
||||
| KustoSQL | True | True | True | True | True | True | True | True |
|
||||
| MariaDB | True | True | True | True | True | True | True | True |
|
||||
| Microsoft SQL Server | True | True | True | True | True | True | True | True |
|
||||
| MotherDuck | True | True | True | True | True | True | True | True |
|
||||
| MySQL | True | True | True | True | True | True | True | True |
|
||||
| OceanBase | True | True | True | True | True | True | True | True |
|
||||
| Ocient | True | True | True | True | True | True | False | True |
|
||||
| Oracle | True | True | True | True | True | True | True | True |
|
||||
| Parseable | True | True | True | True | True | True | True | True |
|
||||
| PostgreSQL | True | True | True | True | True | True | True | True |
|
||||
| Presto | True | True | True | True | True | True | True | True |
|
||||
| RisingWave | True | True | True | True | True | True | True | True |
|
||||
| SAP HANA | True | True | True | True | False | True | True | True |
|
||||
| SQLite | True | True | True | True | True | True | True | True |
|
||||
| Shillelagh | True | True | True | True | True | True | True | True |
|
||||
| SingleStore | True | True | True | True | True | True | True | True |
|
||||
| Snowflake | True | True | True | True | True | True | True | True |
|
||||
| StarRocks | True | True | True | True | True | True | True | True |
|
||||
| Superset meta database | True | True | True | True | True | True | True | True |
|
||||
| TDengine | True | True | True | True | True | False | False | False |
|
||||
| Teradata | False | True | True | True | True | True | True | True |
|
||||
| Trino | True | True | True | True | True | True | True | True |
|
||||
| Vertica | True | True | True | True | True | True | True | True |
|
||||
| YDB | True | True | True | True | True | True | True | True |
|
||||
| base | True | True | True | True | True | True | True | True |
|
||||
|
||||
### Time Grains – Extended
|
||||
|
||||
| Database | FIVE_SECONDS | THIRTY_SECONDS | FIVE_MINUTES | TEN_MINUTES | FIFTEEN_MINUTES | THIRTY_MINUTES | HALF_HOUR | SIX_HOURS | WEEK_STARTING_SUNDAY | WEEK_STARTING_MONDAY | WEEK_ENDING_SATURDAY | WEEK_ENDING_SUNDAY | QUARTER_YEAR |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| Amazon Athena | False | False | False | False | False | False | False | False | True | False | True | False | False |
|
||||
| Amazon DynamoDB | False | False | False | False | False | False | False | False | True | True | True | True | False |
|
||||
| Amazon Redshift | True | True | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| Apache Doris | False | False | False | False | False | False | False | False | False | True | False | False | False |
|
||||
| Apache Drill | False | False | False | False | True | True | False | False | False | False | False | False | False |
|
||||
| Apache Druid | True | True | True | True | True | True | False | True | True | False | True | False | False |
|
||||
| Apache Hive | False | False | False | False | False | False | False | False | True | False | True | False | False |
|
||||
| Apache Impala | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Apache Kylin | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Apache Pinot | False | False | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| Apache Solr | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Apache Spark SQL | False | False | False | False | False | False | False | False | True | False | True | False | False |
|
||||
| Ascend | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Aurora MySQL (Data API) | False | False | False | False | False | False | False | False | False | True | False | False | False |
|
||||
| Aurora PostgreSQL (Data API) | True | True | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| Azure Synapse | False | False | True | True | True | True | False | False | True | True | False | False | False |
|
||||
| ClickHouse | False | False | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| ClickHouse Connect (Superset) | False | False | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| CockroachDB | True | True | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| Couchbase | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| CrateDB | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Databend | False | False | True | True | True | False | False | False | False | False | False | False | False |
|
||||
| Databricks | False | False | False | False | False | False | False | False | True | False | True | False | False |
|
||||
| Databricks (legacy) | False | False | False | False | False | False | False | False | True | False | True | False | False |
|
||||
| Databricks Interactive Cluster | False | False | False | False | False | False | False | False | True | False | True | False | False |
|
||||
| Databricks SQL Endpoint | False | False | False | False | False | False | False | False | True | False | True | False | False |
|
||||
| Denodo | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Dremio | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| DuckDB | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| ElasticSearch (OpenDistro SQL) | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| ElasticSearch (SQL API) | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Exasol | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Firebird | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Firebolt | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Google BigQuery | False | False | True | True | True | True | False | False | False | True | False | False | False |
|
||||
| Google Sheets | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| IBM Db2 | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| IBM Db2 for i | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| IBM Netezza Performance Server | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| KustoKQL | False | True | True | False | False | True | False | False | False | False | False | False | False |
|
||||
| KustoSQL | False | False | True | True | True | False | True | False | True | True | False | False | False |
|
||||
| MariaDB | False | False | False | False | False | False | False | False | False | True | False | False | False |
|
||||
| Microsoft SQL Server | False | False | True | True | True | True | False | False | True | True | False | False | False |
|
||||
| MotherDuck | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| MySQL | False | False | False | False | False | False | False | False | False | True | False | False | False |
|
||||
| OceanBase | False | False | False | False | False | False | False | False | False | True | False | False | False |
|
||||
| Ocient | False | False | False | False | False | False | False | False | False | False | False | False | True |
|
||||
| Oracle | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Parseable | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| PostgreSQL | True | True | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| Presto | True | True | True | True | True | False | True | True | True | True | True | True | False |
|
||||
| RisingWave | True | True | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| SAP HANA | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| SQLite | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| Shillelagh | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| SingleStore | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Snowflake | False | False | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| StarRocks | False | False | False | False | False | False | False | False | False | True | False | False | False |
|
||||
| Superset meta database | True | True | True | True | True | True | True | True | True | True | True | True | True |
|
||||
| TDengine | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Teradata | False | False | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| Trino | True | True | True | True | True | False | True | True | True | True | True | True | False |
|
||||
| Vertica | True | True | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| YDB | False | True | True | True | True | True | False | False | False | False | False | False | False |
|
||||
| base | True | True | True | True | True | False | True | True | True | True | True | True | False |
|
||||
|
||||
### Core Platform & Metadata Features
|
||||
|
||||
|
||||
Integration with platform features and metadata handling.
|
||||
|
||||
| Database | Masked Encrypted Extra | Column Type Mappings | Function Names | File Upload | Dynamic Schema | Catalog | Dynamic Catalog | SSH Tunneling | Latest Partition | Query Cancellation | Get Metrics | Extra Table Metadata | Exception Mapping | Custom Errors |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| Amazon Athena | False | False | False | True | False | False | False | False | False | False | False | False | False | False |
|
||||
| Amazon DynamoDB | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Amazon Redshift | False | False | False | True | False | False | False | True | False | True | False | False | False | False |
|
||||
| Apache Doris | False | True | False | True | True | True | True | True | False | True | False | False | False | False |
|
||||
| Apache Drill | False | False | False | True | True | False | False | True | False | False | False | False | False | False |
|
||||
| Apache Druid | False | False | False | True | False | False | False | True | False | False | False | False | True | False |
|
||||
| Apache Hive | False | True | True | True | True | True | True | True | True | True | False | True | False | False |
|
||||
| Apache Impala | False | False | False | True | False | False | False | True | False | True | False | False | False | False |
|
||||
| Apache Kylin | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Apache Pinot | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Apache Solr | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Apache Spark SQL | False | True | True | True | True | True | True | True | True | True | False | True | False | False |
|
||||
| Ascend | False | False | False | True | False | False | False | True | False | True | False | False | False | False |
|
||||
| Aurora MySQL (Data API) | False | True | False | True | True | False | False | True | False | True | False | False | False | False |
|
||||
| Aurora PostgreSQL (Data API) | False | True | False | True | True | True | True | True | False | True | False | False | False | False |
|
||||
| Azure Synapse | False | True | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| ClickHouse | False | True | True | False | False | False | False | True | False | False | False | False | True | False |
|
||||
| ClickHouse Connect (Superset) | False | True | True | False | True | False | False | True | False | False | False | False | True | False |
|
||||
| CockroachDB | False | True | False | True | True | True | True | True | False | True | False | False | False | False |
|
||||
| Couchbase | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| CrateDB | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Databend | False | True | True | False | False | False | False | True | False | False | False | False | True | False |
|
||||
| Databricks | False | False | False | True | True | True | True | True | False | False | False | False | False | True |
|
||||
| Databricks (legacy) | False | False | False | True | True | True | True | True | False | False | False | False | False | True |
|
||||
| Databricks Interactive Cluster | False | True | True | True | True | True | True | True | True | True | False | True | False | False |
|
||||
| Databricks SQL Endpoint | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Denodo | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Dremio | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| DuckDB | False | True | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| ElasticSearch (OpenDistro SQL) | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| ElasticSearch (SQL API) | False | False | False | True | False | False | False | True | False | False | False | False | True | False |
|
||||
| Exasol | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Firebird | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Firebolt | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Google BigQuery | False | False | False | True | False | True | True | False | True | False | False | True | True | False |
|
||||
| Google Sheets | False | False | True | True | False | False | False | False | False | False | False | True | False | False |
|
||||
| IBM Db2 | False | False | False | True | True | False | False | True | False | False | False | False | False | False |
|
||||
| IBM Db2 for i | False | False | False | True | True | False | False | True | False | False | False | False | False | False |
|
||||
| IBM Netezza Performance Server | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| KustoKQL | False | False | False | True | False | False | False | True | False | False | False | False | True | False |
|
||||
| KustoSQL | False | True | False | True | False | False | False | True | False | False | False | False | True | False |
|
||||
| MariaDB | False | True | False | True | True | False | False | True | False | True | False | False | False | False |
|
||||
| Microsoft SQL Server | False | True | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| MotherDuck | False | True | False | True | False | True | True | True | False | False | False | False | False | False |
|
||||
| MySQL | False | True | False | True | True | False | False | True | False | True | False | False | False | False |
|
||||
| OceanBase | False | True | False | True | True | False | False | True | False | True | False | False | False | False |
|
||||
| Ocient | False | False | False | True | False | False | False | True | False | True | False | False | False | False |
|
||||
| Oracle | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Parseable | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| PostgreSQL | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Presto | False | True | True | True | True | True | True | True | True | True | False | True | False | False |
|
||||
| RisingWave | False | True | False | True | True | True | True | True | False | True | False | False | False | False |
|
||||
| SAP HANA | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| SQLite | False | False | True | True | False | False | False | False | False | False | False | False | False | False |
|
||||
| Shillelagh | False | False | True | True | False | False | False | False | False | False | False | False | False | False |
|
||||
| SingleStore | False | True | True | True | True | False | False | True | False | True | False | False | False | False |
|
||||
| Snowflake | False | False | False | True | True | True | True | True | False | True | False | False | False | False |
|
||||
| StarRocks | False | True | False | True | True | False | False | True | False | True | False | False | False | False |
|
||||
| Superset meta database | False | False | True | False | False | False | False | False | False | False | False | False | False | False |
|
||||
| TDengine | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Teradata | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| Trino | False | True | True | True | True | True | True | True | True | True | False | True | True | False |
|
||||
| Vertica | False | False | False | True | False | False | False | True | False | False | False | False | False | False |
|
||||
| YDB | False | False | False | False | False | False | False | True | False | False | False | False | False | False |
|
||||
| base | False | True | True | True | True | True | True | True | True | False | False | False | False | False |
|
||||
|
||||
### Operational & Advanced Features
|
||||
|
||||
| Database | User Impersonation | Expand Data | Cost Estimation | SQL Validation |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Amazon Athena | False | False | False | False |
|
||||
| Amazon DynamoDB | False | False | False | False |
|
||||
| Amazon Redshift | False | False | False | False |
|
||||
| Apache Doris | False | False | False | False |
|
||||
| Apache Drill | True | False | False | False |
|
||||
| Apache Druid | False | False | False | False |
|
||||
| Apache Hive | True | True | True | False |
|
||||
| Apache Impala | False | False | False | False |
|
||||
| Apache Kylin | False | False | False | False |
|
||||
| Apache Pinot | False | False | False | False |
|
||||
| Apache Solr | False | False | False | False |
|
||||
| Apache Spark SQL | True | True | True | False |
|
||||
| Ascend | False | False | False | False |
|
||||
| Aurora MySQL (Data API) | False | False | False | False |
|
||||
| Aurora PostgreSQL (Data API) | False | False | True | True |
|
||||
| Azure Synapse | False | False | False | False |
|
||||
| ClickHouse | False | False | False | False |
|
||||
| ClickHouse Connect (Superset) | False | False | False | False |
|
||||
| CockroachDB | False | False | True | False |
|
||||
| Couchbase | False | False | False | False |
|
||||
| CrateDB | False | False | False | False |
|
||||
| Databend | False | False | False | False |
|
||||
| Databricks | False | False | False | False |
|
||||
| Databricks (legacy) | False | False | False | False |
|
||||
| Databricks Interactive Cluster | True | True | True | False |
|
||||
| Databricks SQL Endpoint | False | False | False | False |
|
||||
| Denodo | False | False | False | False |
|
||||
| Dremio | False | False | False | False |
|
||||
| DuckDB | False | False | False | False |
|
||||
| ElasticSearch (OpenDistro SQL) | False | False | False | False |
|
||||
| ElasticSearch (SQL API) | False | False | False | False |
|
||||
| Exasol | False | False | False | False |
|
||||
| Firebird | False | False | False | False |
|
||||
| Firebolt | False | False | False | False |
|
||||
| Google BigQuery | False | False | True | False |
|
||||
| Google Sheets | True | False | False | False |
|
||||
| IBM Db2 | False | False | False | False |
|
||||
| IBM Db2 for i | False | False | False | False |
|
||||
| IBM Netezza Performance Server | False | False | False | False |
|
||||
| KustoKQL | False | False | False | False |
|
||||
| KustoSQL | False | False | False | False |
|
||||
| MariaDB | False | False | False | False |
|
||||
| Microsoft SQL Server | False | False | False | False |
|
||||
| MotherDuck | False | False | False | False |
|
||||
| MySQL | False | False | False | False |
|
||||
| OceanBase | False | False | False | False |
|
||||
| Ocient | False | False | False | False |
|
||||
| Oracle | False | False | False | False |
|
||||
| Parseable | False | False | False | False |
|
||||
| PostgreSQL | False | False | False | False |
|
||||
| Presto | True | True | True | True |
|
||||
| RisingWave | False | False | True | False |
|
||||
| SAP HANA | False | False | False | False |
|
||||
| SQLite | False | False | False | False |
|
||||
| Shillelagh | False | False | False | False |
|
||||
| SingleStore | False | False | False | False |
|
||||
| Snowflake | False | False | False | False |
|
||||
| StarRocks | True | False | False | False |
|
||||
| Superset meta database | False | False | False | False |
|
||||
| TDengine | False | False | False | False |
|
||||
| Teradata | False | False | False | False |
|
||||
| Trino | True | False | True | False |
|
||||
| Vertica | False | False | False | False |
|
||||
| YDB | False | False | False | False |
|
||||
| base | False | False | True | False |
|
||||
|
||||
## Database information
|
||||
|
||||
|
||||
@@ -120,6 +120,7 @@ def diagnose(spec: type[BaseEngineSpec]) -> dict[str, Any]:
|
||||
{
|
||||
"module": spec.__module__,
|
||||
"limit_method": spec.limit_method.value,
|
||||
"limit_clause": getattr(spec, "allow_limit_clause", True),
|
||||
"joins": spec.allows_joins,
|
||||
"subqueries": spec.allows_subqueries,
|
||||
"alias_in_select": spec.allows_alias_in_select,
|
||||
@@ -209,9 +210,374 @@ def get_name(spec: type[BaseEngineSpec]) -> str:
|
||||
return spec.engine_name or spec.engine
|
||||
|
||||
|
||||
def format_markdown_table(headers: list[str], rows: list[list[Any]]) -> str:
|
||||
"""
|
||||
Format headers and rows into a markdown table.
|
||||
"""
|
||||
lines = []
|
||||
lines.append("| " + " | ".join(headers) + " |")
|
||||
lines.append("| " + " | ".join(["---"] * len(headers)) + " |")
|
||||
for row in rows:
|
||||
lines.append("| " + " | ".join(str(col) for col in row) + " |")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def generate_focused_table(
|
||||
info: dict[str, dict[str, Any]],
|
||||
feature_keys: list[str],
|
||||
column_labels: list[str],
|
||||
filter_fn: Any = None,
|
||||
value_extractor: Any = None,
|
||||
preserve_order: bool = False,
|
||||
) -> tuple[str, list[str]]:
|
||||
"""
|
||||
Generate a focused markdown table with databases as rows.
|
||||
|
||||
Args:
|
||||
info: Dictionary mapping database names to their feature info
|
||||
feature_keys: List of feature keys to extract from db_info
|
||||
column_labels: List of column header labels
|
||||
filter_fn: Optional function to filter databases (receives db_info dict)
|
||||
value_extractor: Optional function to extract value (receives db_info, key)
|
||||
|
||||
Returns:
|
||||
Tuple of (markdown table string, list of excluded database names)
|
||||
"""
|
||||
# Filter databases if filter function provided
|
||||
filtered_info = {}
|
||||
excluded_dbs = []
|
||||
|
||||
for db_name, db_info in info.items():
|
||||
if filter_fn is None or filter_fn(db_info):
|
||||
filtered_info[db_name] = db_info
|
||||
else:
|
||||
excluded_dbs.append(db_name)
|
||||
|
||||
if not filtered_info:
|
||||
return "", excluded_dbs
|
||||
|
||||
# Build headers: Database + feature columns
|
||||
headers = ["Database"] + column_labels
|
||||
|
||||
# Build rows
|
||||
rows = []
|
||||
# Sort by database name unless preserve_order is True
|
||||
db_names = (
|
||||
list(filtered_info.keys()) if preserve_order else sorted(filtered_info.keys())
|
||||
)
|
||||
|
||||
for db_name in db_names:
|
||||
db_info = filtered_info[db_name]
|
||||
row = [db_name]
|
||||
|
||||
for key in feature_keys:
|
||||
if value_extractor:
|
||||
value = value_extractor(db_info, key)
|
||||
else:
|
||||
value = db_info.get(key, "")
|
||||
row.append(value)
|
||||
|
||||
rows.append(row)
|
||||
|
||||
return format_markdown_table(headers, rows), excluded_dbs
|
||||
|
||||
|
||||
def calculate_support_level(db_info: dict[str, Any], feature_keys: list[str]) -> str:
|
||||
"""
|
||||
Calculate support level for a group of features.
|
||||
|
||||
Returns: "Supported", "Partial", or "Not supported"
|
||||
"""
|
||||
if not feature_keys:
|
||||
return "Not supported"
|
||||
|
||||
# Handle time grain features specially
|
||||
if all(k.startswith("time_grains.") for k in feature_keys):
|
||||
grain_keys = [k.split(".", 1)[1] for k in feature_keys]
|
||||
supported = sum(
|
||||
1 for grain in grain_keys if db_info["time_grains"].get(grain, False)
|
||||
)
|
||||
else:
|
||||
supported = sum(1 for k in feature_keys if db_info.get(k, False))
|
||||
|
||||
total = len(feature_keys)
|
||||
if supported == 0:
|
||||
return "Not supported"
|
||||
elif supported == total:
|
||||
return "Supported"
|
||||
else:
|
||||
return "Partial"
|
||||
|
||||
|
||||
def generate_feature_tables() -> str:
|
||||
"""
|
||||
Generate multiple focused markdown tables organized by feature categories.
|
||||
|
||||
Returns a complete markdown document with 7 tables optimized for readability.
|
||||
"""
|
||||
info = {}
|
||||
for spec in sorted(load_engine_specs(), key=get_name):
|
||||
info[get_name(spec)] = diagnose(spec)
|
||||
|
||||
# remove 3rd party DB engine specs
|
||||
info = {k: v for k, v in info.items() if v["module"].startswith("superset")}
|
||||
|
||||
# Sort by score descending for overview table
|
||||
sorted_info = dict(sorted(info.items(), key=lambda x: x[1]["score"], reverse=True))
|
||||
|
||||
output = []
|
||||
|
||||
# Table 1: Feature Overview
|
||||
output.append("### Feature Overview\n")
|
||||
|
||||
# Define feature groups for summary
|
||||
sql_basics = [
|
||||
"joins",
|
||||
"subqueries",
|
||||
"alias_in_select",
|
||||
"alias_in_orderby",
|
||||
"cte_in_subquery",
|
||||
]
|
||||
advanced_sql = [
|
||||
"time_groupby_inline",
|
||||
"alias_to_source_column",
|
||||
"order_by_not_in_select",
|
||||
"expressions_in_orderby",
|
||||
]
|
||||
common_grains = [
|
||||
f"time_grains.{g}"
|
||||
for g in ["SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR"]
|
||||
]
|
||||
extended_grains = [
|
||||
f"time_grains.{g}"
|
||||
for g in [
|
||||
"FIVE_SECONDS",
|
||||
"THIRTY_SECONDS",
|
||||
"FIVE_MINUTES",
|
||||
"TEN_MINUTES",
|
||||
"FIFTEEN_MINUTES",
|
||||
"THIRTY_MINUTES",
|
||||
"HALF_HOUR",
|
||||
"SIX_HOURS",
|
||||
"WEEK_STARTING_SUNDAY",
|
||||
"WEEK_STARTING_MONDAY",
|
||||
"WEEK_ENDING_SATURDAY",
|
||||
"WEEK_ENDING_SUNDAY",
|
||||
"QUARTER_YEAR",
|
||||
]
|
||||
]
|
||||
integrations = [
|
||||
"ssh_tunneling",
|
||||
"query_cancelation",
|
||||
"get_metrics",
|
||||
"get_extra_table_metadata",
|
||||
"dbapi_exception_mapping",
|
||||
"custom_errors",
|
||||
"dynamic_schema",
|
||||
"where_latest_partition",
|
||||
]
|
||||
advanced_features = [
|
||||
"user_impersonation",
|
||||
"expand_data",
|
||||
"query_cost_estimation",
|
||||
"sql_validation",
|
||||
]
|
||||
|
||||
headers = [
|
||||
"Database",
|
||||
"Score",
|
||||
"SQL Basics",
|
||||
"Advanced SQL",
|
||||
"Common Time Grains",
|
||||
"Extended Time Grains",
|
||||
"Integrations",
|
||||
"Advanced Features",
|
||||
]
|
||||
rows = []
|
||||
for db_name, db_info in sorted_info.items():
|
||||
row = [
|
||||
db_name,
|
||||
db_info["score"],
|
||||
calculate_support_level(db_info, sql_basics),
|
||||
calculate_support_level(db_info, advanced_sql),
|
||||
calculate_support_level(db_info, common_grains),
|
||||
calculate_support_level(db_info, extended_grains),
|
||||
calculate_support_level(db_info, integrations),
|
||||
calculate_support_level(db_info, advanced_features),
|
||||
]
|
||||
rows.append(row)
|
||||
output.append(format_markdown_table(headers, rows))
|
||||
|
||||
# Table 2: Database Information
|
||||
output.append("\n### Database Information\n")
|
||||
|
||||
# Custom value extractor for database info to handle limit_method enum
|
||||
def extract_db_info(db_info: dict[str, Any], key: str) -> str:
|
||||
if key == "limit_method":
|
||||
# Convert enum value to name
|
||||
from superset.sql.parse import LimitMethod
|
||||
|
||||
return LimitMethod(db_info[key]).name
|
||||
return db_info.get(key, "")
|
||||
|
||||
table, _ = generate_focused_table(
|
||||
info,
|
||||
feature_keys=["module", "limit_method", "limit_clause", "max_column_name"],
|
||||
column_labels=["Module", "Limit Method", "Limit Clause", "Max Column Name"],
|
||||
value_extractor=extract_db_info,
|
||||
)
|
||||
output.append(table)
|
||||
|
||||
# Table 3: SQL Capabilities (combined SQL Capabilities + Advanced SQL)
|
||||
output.append("\n### SQL Capabilities\n")
|
||||
table, _ = generate_focused_table(
|
||||
info,
|
||||
feature_keys=[
|
||||
"joins",
|
||||
"subqueries",
|
||||
"alias_in_select",
|
||||
"alias_in_orderby",
|
||||
"cte_in_subquery",
|
||||
"sql_comments",
|
||||
"escaped_colons",
|
||||
"time_groupby_inline",
|
||||
"alias_to_source_column",
|
||||
"order_by_not_in_select",
|
||||
"expressions_in_orderby",
|
||||
],
|
||||
column_labels=[
|
||||
"JOINs",
|
||||
"Subqueries",
|
||||
"Aliases in SELECT",
|
||||
"Aliases in ORDER BY",
|
||||
"CTEs",
|
||||
"Comments",
|
||||
"Escaped Colons",
|
||||
"Inline Time Groupby",
|
||||
"Source Column When Aliased",
|
||||
"Aggregations in ORDER BY",
|
||||
"Expressions in ORDER BY",
|
||||
],
|
||||
)
|
||||
output.append(table)
|
||||
|
||||
# Helper to extract time grain values
|
||||
def extract_time_grain(db_info: dict[str, Any], grain_name: str) -> str:
|
||||
return db_info["time_grains"].get(grain_name, False)
|
||||
|
||||
# Table 4: Time Grains – Common
|
||||
output.append("\n### Time Grains – Common\n")
|
||||
common_grains = [
|
||||
"SECOND",
|
||||
"MINUTE",
|
||||
"HOUR",
|
||||
"DAY",
|
||||
"WEEK",
|
||||
"MONTH",
|
||||
"QUARTER",
|
||||
"YEAR",
|
||||
]
|
||||
table, _ = generate_focused_table(
|
||||
info,
|
||||
feature_keys=common_grains,
|
||||
column_labels=common_grains,
|
||||
value_extractor=extract_time_grain,
|
||||
)
|
||||
output.append(table)
|
||||
|
||||
# Table 5: Time Grains – Extended
|
||||
output.append("\n### Time Grains – Extended\n")
|
||||
extended_grains = [
|
||||
"FIVE_SECONDS",
|
||||
"THIRTY_SECONDS",
|
||||
"FIVE_MINUTES",
|
||||
"TEN_MINUTES",
|
||||
"FIFTEEN_MINUTES",
|
||||
"THIRTY_MINUTES",
|
||||
"HALF_HOUR",
|
||||
"SIX_HOURS",
|
||||
"WEEK_STARTING_SUNDAY",
|
||||
"WEEK_STARTING_MONDAY",
|
||||
"WEEK_ENDING_SATURDAY",
|
||||
"WEEK_ENDING_SUNDAY",
|
||||
"QUARTER_YEAR",
|
||||
]
|
||||
table, _ = generate_focused_table(
|
||||
info,
|
||||
feature_keys=extended_grains,
|
||||
column_labels=extended_grains,
|
||||
value_extractor=extract_time_grain,
|
||||
)
|
||||
output.append(table)
|
||||
|
||||
# Table 6: Core Platform & Metadata Features
|
||||
output.append("\n### Core Platform & Metadata Features\n")
|
||||
output.append("\nIntegration with platform features and metadata handling.\n")
|
||||
table, _ = generate_focused_table(
|
||||
info,
|
||||
feature_keys=[
|
||||
"masked_encrypted_extra",
|
||||
"column_type_mapping",
|
||||
"function_names",
|
||||
"file_upload",
|
||||
"dynamic_schema",
|
||||
"catalog",
|
||||
"dynamic_catalog",
|
||||
"ssh_tunneling",
|
||||
"where_latest_partition",
|
||||
"query_cancelation",
|
||||
"get_metrics",
|
||||
"get_extra_table_metadata",
|
||||
"dbapi_exception_mapping",
|
||||
"custom_errors",
|
||||
],
|
||||
column_labels=[
|
||||
"Masked Encrypted Extra",
|
||||
"Column Type Mappings",
|
||||
"Function Names",
|
||||
"File Upload",
|
||||
"Dynamic Schema",
|
||||
"Catalog",
|
||||
"Dynamic Catalog",
|
||||
"SSH Tunneling",
|
||||
"Latest Partition",
|
||||
"Query Cancellation",
|
||||
"Get Metrics",
|
||||
"Extra Table Metadata",
|
||||
"Exception Mapping",
|
||||
"Custom Errors",
|
||||
],
|
||||
)
|
||||
output.append(table)
|
||||
|
||||
# Table 7: Operational & Advanced Features
|
||||
output.append("\n### Operational & Advanced Features\n")
|
||||
table, _ = generate_focused_table(
|
||||
info,
|
||||
feature_keys=[
|
||||
"user_impersonation",
|
||||
"expand_data",
|
||||
"query_cost_estimation",
|
||||
"sql_validation",
|
||||
],
|
||||
column_labels=[
|
||||
"User Impersonation",
|
||||
"Expand Data",
|
||||
"Cost Estimation",
|
||||
"SQL Validation",
|
||||
],
|
||||
)
|
||||
output.append(table)
|
||||
|
||||
return "\n".join(output)
|
||||
|
||||
|
||||
def generate_table() -> list[list[Any]]:
|
||||
"""
|
||||
Generate a table showing info for all DB engine specs.
|
||||
|
||||
DEPRECATED: This function is kept for backward compatibility.
|
||||
Use generate_feature_tables() instead for better readability.
|
||||
"""
|
||||
info = {}
|
||||
for spec in sorted(load_engine_specs(), key=get_name):
|
||||
@@ -301,10 +667,6 @@ if __name__ == "__main__":
|
||||
|
||||
app = create_app()
|
||||
with app.app_context():
|
||||
rows = generate_table()
|
||||
output = generate_feature_tables()
|
||||
|
||||
headers = rows.pop(0)
|
||||
print("| " + " | ".join(headers) + " |")
|
||||
print("| " + " ---| " * len(headers))
|
||||
for row in rows:
|
||||
print("| " + " | ".join(str(col) for col in row) + " |")
|
||||
print(output)
|
||||
|
||||
Reference in New Issue
Block a user