{
  "$schema": "https://docs.sqlparser.com/capabilities/v1/schema/dialect.schema.json",
  "dialect": "spark",
  "display_name": "Spark SQL",
  "aliases": ["sparksql"],
  "product": "General SQL Parser",
  "edition": "java",
  "version": "4.1.11",
  "measured_at": "2026-08-10T14:47:38.366768857Z",
  "provenance": {
    "kind": "measured",
    "artifact_sha256": "71895b6e5ab0",
    "corpus_commit": "dcd6212a9",
    "corpus_files": 70,
    "methodology_url": "https://docs.sqlparser.com/reference/sql-syntax/#methodology"
  },
  "parse_coverage": {
    "kind": "measured",
    "note": "Pass rates are over GSP's documented-example corpus for this dialect, not a percentage of the entire SQL dialect.",
    "constructs": {"passed": 69, "total": 70},
    "statements": {"passed": 241, "total": 243},
    "statement_classes": {
      "select": {"constructs": {"passed": 21, "total": 21}, "statements": {"passed": 93, "total": 93}},
      "dml": {"constructs": {"passed": 4, "total": 4}, "statements": {"passed": 17, "total": 17}},
      "stored_procedures": {"constructs": {"passed": 1, "total": 1}, "statements": {"passed": 3, "total": 3}}
    }
  },
  "keywords": {
    "kind": "measured",
    "measured_at": "2026-08-08T14:54:19Z",
    "total": 330,
    "allowed_as_identifier": 327,
    "context_specific": 2,
    "blocked": 1,
    "details_url": "https://docs.sqlparser.com/reference/sql-syntax/spark/keyword-compatibility/"
  },
  "docs_url": "https://docs.sqlparser.com/reference/sql-syntax/spark/",
  "constructs": [
    {"name": "ADD FILE", "category": "", "passed": 5, "total": 5, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-resource-mgmt-add-file.html"},
    {"name": "ADD JAR", "category": "", "passed": 4, "total": 4, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-resource-mgmt-add-jar.html"},
    {"name": "ALTER DATABASE", "category": "", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-alter-database.html"},
    {"name": "ALTER TABLE", "category": "", "passed": 5, "total": 7, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-alter-table.html"},
    {"name": "ALTER VIEW", "category": "", "passed": 4, "total": 4, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-alter-view.html"},
    {"name": "ANALYZE TABLE", "category": "", "passed": 4, "total": 4, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-analyze-table.html"},
    {"name": "CREATE DATABASE", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-create-database.html"},
    {"name": "CREATE FUNCTION", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-create-function.html"},
    {"name": "CREATE VIEW", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-create-view.html"},
    {"name": "DROP DATABASE", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-drop-database.html"},
    {"name": "DROP FUNCTION", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-drop-function.html"},
    {"name": "DROP TABLE", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-drop-table.html"},
    {"name": "DROP VIEW", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-drop-view.html"},
    {"name": "EXPLAIN", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-explain.html"},
    {"name": "LIST FILE", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-resource-mgmt-list-file.html"},
    {"name": "LIST JAR", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-resource-mgmt-list-jar.html"},
    {"name": "LOAD DATA", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-dml-load.html"},
    {"name": "REPAIR TABLE", "category": "", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-repair-table.html"},
    {"name": "RESET", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-conf-mgmt-reset.html"},
    {"name": "SELECT CASE", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-case.html"},
    {"name": "SELECT CLUSTER BY", "category": "", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-clusterby.html"},
    {"name": "SELECT Common Table Expression", "category": "", "passed": 5, "total": 5, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-cte.html"},
    {"name": "SELECT DISTRIBUTE BY", "category": "", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-distribute-by.html"},
    {"name": "SELECT File", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-file.html"},
    {"name": "SELECT GROUP BY", "category": "", "passed": 6, "total": 6, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-groupby.html"},
    {"name": "SELECT HAVING", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-having.html"},
    {"name": "SELECT Hints", "category": "", "passed": 14, "total": 14, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-hints.html"},
    {"name": "SELECT Inline Table", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-inline-table.html"},
    {"name": "SELECT JOIN", "category": "", "passed": 7, "total": 7, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-join.html"},
    {"name": "SELECT LATERAL VIEW", "category": "", "passed": 4, "total": 4, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-lateral-view.html"},
    {"name": "SELECT LIKE Predicate", "category": "", "passed": 10, "total": 10, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-where.html"},
    {"name": "SELECT LIMIT", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-limit.html"},
    {"name": "SELECT ORDER BY", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-orderby.html"},
    {"name": "SELECT PIVOT", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-pivot.html"},
    {"name": "SELECT Set Operators", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-setops.html"},
    {"name": "SELECT SORT BY", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-sortby.html"},
    {"name": "SELECT Table-valued Functions", "category": "", "passed": 9, "total": 9, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-tvf.html"},
    {"name": "SELECT TABLESAMPLE", "category": "", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-sampling.html"},
    {"name": "SELECT WHERE", "category": "", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-where.html"},
    {"name": "SELECT Window Functions", "category": "", "passed": 5, "total": 5, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-window.html"},
    {"name": "SET", "category": "", "passed": 4, "total": 4, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-conf-mgmt-set.html"},
    {"name": "SET TIME ZONE", "category": "", "passed": 5, "total": 5, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-conf-mgmt-set-timezone.html"},
    {"name": "TRUNCATE TABLE", "category": "", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-truncate-table.html"},
    {"name": "USE Database", "category": "", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-usedb.html"},
    {"name": "CACHE TABLE", "category": "CACHE", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-cache-cache-table.html"},
    {"name": "CLEAR CACHE", "category": "CACHE", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-cache-clear-cache.html"},
    {"name": "REFRESH", "category": "CACHE", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-cache-refresh.html"},
    {"name": "REFRESH FUNCTION", "category": "CACHE", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-cache-refresh-function.html"},
    {"name": "REFRESH TABLE", "category": "CACHE", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-cache-refresh-table.html"},
    {"name": "UNCACHE TABLE", "category": "CACHE", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-cache-uncache-table.html"},
    {"name": "CREATE DATASOURCE TABLE", "category": "CREATE DATASOURCE", "passed": 6, "total": 6, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-create-table-datasource.html"},
    {"name": "CREATE HIVEFORMAT TABLE", "category": "CREATE DATASOURCE", "passed": 11, "total": 11, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-create-table-hiveformat.html"},
    {"name": "CREATE TABLE LIKE", "category": "CREATE DATASOURCE", "passed": 4, "total": 4, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-create-table-like.html"},
    {"name": "DESCRIBE DATABASE", "category": "DESCRIBE", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-describe-database.html"},
    {"name": "DESCRIBE FUNCTION", "category": "DESCRIBE", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-describe-function.html"},
    {"name": "DESCRIBE QUERY", "category": "DESCRIBE", "passed": 4, "total": 4, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-describe-query.html"},
    {"name": "DESCRIBE TABLE", "category": "DESCRIBE", "passed": 5, "total": 5, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-describe-table.html"},
    {"name": "INSERT INTO", "category": "INSERT", "passed": 7, "total": 7, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-into.html"},
    {"name": "INSERT OVERWRITE", "category": "INSERT", "passed": 6, "total": 6, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-overwrite-table.html"},
    {"name": "INSERT OVERWRITE DIRECTORY", "category": "INSERT", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-overwrite-directory.html"},
    {"name": "INSERT OVERWRITE DIRECTORY with Hive format", "category": "INSERT", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-dml-insert-overwrite-directory-hive.html"},
    {"name": "SHOW COLUMNS", "category": "SHOW", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-columns.html"},
    {"name": "SHOW CREATE TABLE", "category": "SHOW", "passed": 1, "total": 1, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-create-table.html"},
    {"name": "SHOW DATABASES", "category": "SHOW", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-databases.html"},
    {"name": "SHOW FUNCTIONS", "category": "SHOW", "passed": 5, "total": 5, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-functions.html"},
    {"name": "SHOW PARTITIONS", "category": "SHOW", "passed": 4, "total": 4, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-partitions.html"},
    {"name": "SHOW TABLE EXTENDED", "category": "SHOW", "passed": 2, "total": 2, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-table.html"},
    {"name": "SHOW TABLES", "category": "SHOW", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-tables.html"},
    {"name": "SHOW TBLPROPERTIES", "category": "SHOW", "passed": 3, "total": 3, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-tblproperties.html"},
    {"name": "SHOW VIEWS", "category": "SHOW", "passed": 5, "total": 5, "source": "https://spark.apache.org/docs/latest/sql-ref-syntax-aux-show-views.html"}
  ]
}
