Repository: sqlfluff/sqlfluff
Issue category: Feature Request

Cannot parse except(a.b) in databricks
### Search before asking

- [X] I searched the [issues](https://github.com/sqlfluff/sqlfluff/issues) and found no similar issues.


### Links or command line

The `databricks` dialect does not support EXCEPT clauses on specific columns that are annotated with their source table. I would like it to support this.


### Issue/Suggested Improvement

### How to reproduce
```
echo " select a.* except (a.b) from a  " > test.sql
sqlfluff parse --dialect databricks test.sql

== [test.sql] FAIL
L:   1 | P:  13 |  PRS | Line 1, Position 13: Found unparsable section: 'except
                       | (a.b)'
WARNING: Parsing errors found and dialect is set to 'databricks'. Have you configured your dialect correctly?
All Finished 📜 🎉!
```

I am guessing this has to do with me selecting `a.b` since this works as expected
```
echo " select a.* except (b) from a  " > test.sql
sqlfluff lint --dialect databricks test.sql
```

### Dialect
Databricks

### Version
2.3.2

### Configuration
None

### Are you willing to work on and submit a PR to address the issue?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/sqlfluff/sqlfluff/blob/main/CODE_OF_CONDUCT.md)



Functions to edit:
src/sqlfluff/dialects/dialect_sparksql.py:ExceptClauseSegment

Patch:
diff --git a/src/sqlfluff/dialects/dialect_sparksql.py b/src/sqlfluff/dialects/dialect_sparksql.py
index bc60c9002b2..b0bac5ba9d6 100644
--- a/src/sqlfluff/dialects/dialect_sparksql.py
+++ b/src/sqlfluff/dialects/dialect_sparksql.py
@@ -3295,7 +3295,7 @@ class ExceptClauseSegment(BaseSegment):
     type = "select_except_clause"
     match_grammar = Sequence(
         "EXCEPT",
-        Bracketed(Delimited(Ref("SingleIdentifierGrammar"))),
+        Bracketed(Delimited(Ref("ColumnReferenceSegment"))),
     )
 
 

Test patch: diff --git a/test/fixtures/dialects/sparksql/select_star_except.sql b/test/fixtures/dialects/sparksql/select_star_except.sql
index c3211a52f8b..64e630cc7ca 100644
--- a/test/fixtures/dialects/sparksql/select_star_except.sql
+++ b/test/fixtures/dialects/sparksql/select_star_except.sql
@@ -5,3 +5,5 @@ except (col)
 from table_name where row_no = 1;
 
 select * except (col1, col2, col3, col4, col5) from table_name where row_no = 1;
+
+select a.* except (a.b) from a;
diff --git a/test/fixtures/dialects/sparksql/select_star_except.yml b/test/fixtures/dialects/sparksql/select_star_except.yml
index ad3299e2b12..8dc70f886e1 100644
--- a/test/fixtures/dialects/sparksql/select_star_except.yml
+++ b/test/fixtures/dialects/sparksql/select_star_except.yml
@@ -3,7 +3,7 @@
 # computed by SQLFluff when running the tests. Please run
 # `python test/generate_parse_fixture_yml.py`  to generate them after adding or
 # altering SQL files.
-_hash: cf951c121772e7daad8ad73fa0d9ad5377c234e3d698b732a743316409429048
+_hash: be4429aa76f902654b502847e39a9679f51e7a8dd4a0e622d75ab8486962b5c6
 file:
 - statement:
     select_statement:
@@ -17,7 +17,8 @@ file:
               keyword: except
               bracketed:
                 start_bracket: (
-                naked_identifier: col
+                column_reference:
+                  naked_identifier: col
                 end_bracket: )
       from_clause:
         keyword: from
@@ -47,7 +48,8 @@ file:
               keyword: except
               bracketed:
                 start_bracket: (
-                naked_identifier: col
+                column_reference:
+                  naked_identifier: col
                 end_bracket: )
       from_clause:
         keyword: from
@@ -77,15 +79,20 @@ file:
               keyword: except
               bracketed:
               - start_bracket: (
-              - naked_identifier: col1
+              - column_reference:
+                  naked_identifier: col1
               - comma: ','
-              - naked_identifier: col2
+              - column_reference:
+                  naked_identifier: col2
               - comma: ','
-              - naked_identifier: col3
+              - column_reference:
+                  naked_identifier: col3
               - comma: ','
-              - naked_identifier: col4
+              - column_reference:
+                  naked_identifier: col4
               - comma: ','
-              - naked_identifier: col5
+              - column_reference:
+                  naked_identifier: col5
               - end_bracket: )
       from_clause:
         keyword: from
@@ -103,3 +110,30 @@ file:
             raw_comparison_operator: '='
           numeric_literal: '1'
 - statement_terminator: ;
+- statement:
+    select_statement:
+      select_clause:
+        keyword: select
+        select_clause_element:
+          wildcard_expression:
+            wildcard_identifier:
+              naked_identifier: a
+              dot: .
+              star: '*'
+            select_except_clause:
+              keyword: except
+              bracketed:
+                start_bracket: (
+                column_reference:
+                - naked_identifier: a
+                - dot: .
+                - naked_identifier: b
+                end_bracket: )
+      from_clause:
+        keyword: from
+        from_expression:
+          from_expression_element:
+            table_expression:
+              table_reference:
+                naked_identifier: a
+- statement_terminator: ;