Skip to content

Commit 5ce89cb

Browse files
JackWang032jialan
andauthored
feat(spark): support materialized view for spark sql (#262)
* feat(spark): support materialized view for spark sql * fix(spark): code review update * fix(spark): update spark materilized view and zorder grammar * test(spark): add syntaxSuggestion test of materialized view --------- Co-authored-by: jialan <jialan@dtstack.com>
1 parent 081ff7f commit 5ce89cb

26 files changed

Lines changed: 9970 additions & 8915 deletions

src/grammar/spark/SparkSqlLexer.g4

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,14 @@ KW_DESCRIBE : 'DESCRIBE';
142142
KW_DFS : 'DFS';
143143
KW_DIRECTORIES : 'DIRECTORIES';
144144
KW_DIRECTORY : 'DIRECTORY';
145+
KW_DISABLE : 'DISABLE';
145146
KW_DISTINCT : 'DISTINCT';
146147
KW_DISTRIBUTE : 'DISTRIBUTE';
147148
KW_DIV : 'DIV';
148149
KW_DOUBLE : 'DOUBLE';
149150
KW_DROP : 'DROP';
150151
KW_ELSE : 'ELSE';
152+
KW_ENABLE : 'ENABLE';
151153
KW_END : 'END';
152154
KW_ESCAPE : 'ESCAPE';
153155
KW_ESCAPED : 'ESCAPED';
@@ -224,6 +226,7 @@ KW_LOCKS : 'LOCKS';
224226
KW_LOGICAL : 'LOGICAL';
225227
KW_LONG : 'LONG';
226228
KW_MACRO : 'MACRO';
229+
KW_MATERIALIZED : 'MATERIALIZED';
227230
KW_MAP : 'MAP';
228231
KW_MATCHED : 'MATCHED';
229232
KW_MERGE : 'MERGE';
@@ -252,6 +255,7 @@ KW_OF : 'OF';
252255
KW_OFFSET : 'OFFSET';
253256
KW_ON : 'ON';
254257
KW_ONLY : 'ONLY';
258+
KW_OPTIMIZE : 'OPTIMIZE';
255259
KW_OPTION : 'OPTION';
256260
KW_OPTIONS : 'OPTIONS';
257261
KW_OR : 'OR';
@@ -294,6 +298,7 @@ KW_REPLACE : 'REPLACE';
294298
KW_RESET : 'RESET';
295299
KW_RESPECT : 'RESPECT';
296300
KW_RESTRICT : 'RESTRICT';
301+
KW_REWRITE : 'REWRITE';
297302
KW_REVOKE : 'REVOKE';
298303
KW_RIGHT : 'RIGHT';
299304
KW_RLIKE : 'RLIKE';
@@ -396,6 +401,7 @@ KW_WITHIN : 'WITHIN';
396401
KW_YEAR : 'YEAR';
397402
KW_YEARS : 'YEARS';
398403
KW_ZONE : 'ZONE';
404+
KW_ZORDER : 'ZORDER';
399405
//--SPARK-KEYWORD-LIST-END
400406
//============================
401407
// End of the keywords list

src/grammar/spark/SparkSqlParser.g4

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,11 @@ statement
9292
)* KW_PURGE?
9393
| KW_ALTER KW_TABLE tableName (partitionSpec)? KW_SET locationSpec
9494
| KW_ALTER KW_TABLE tableName KW_RECOVER KW_PARTITIONS
95+
| KW_ALTER KW_MATERIALIZED KW_VIEW viewName (KW_ENABLE | KW_DISABLE) KW_REWRITE
96+
| KW_ALTER KW_MATERIALIZED KW_VIEW viewName KW_SET KW_TBLPROPERTIES propertyList
9597
| KW_DROP KW_TABLE (ifExists)? tableName KW_PURGE?
9698
| KW_DROP KW_VIEW (ifExists)? viewName
99+
| KW_DROP KW_MATERIALIZED KW_VIEW (ifExists)? viewName
97100
| KW_CREATE (KW_OR KW_REPLACE)? (KW_GLOBAL? KW_TEMPORARY)? KW_VIEW (ifNotExists)? viewNameCreate identifierCommentList? (
98101
commentSpec
99102
| (KW_PARTITIONED KW_ON identifierList)
@@ -106,6 +109,19 @@ statement
106109
| KW_CREATE (KW_OR KW_REPLACE)? KW_TEMPORARY? KW_FUNCTION (ifNotExists)? functionNameCreate KW_AS className=stringLit (
107110
KW_USING resource (COMMA resource)*
108111
)?
112+
|
113+
// Self developed materialized view syntax by dtstack, spark not support now.
114+
KW_CREATE KW_MATERIALIZED KW_VIEW (ifNotExists)? viewNameCreate tableProvider? (
115+
(KW_OPTIONS options=propertyList)
116+
| (KW_PARTITIONED KW_BY partitioning=partitionFieldList)
117+
| skewSpec
118+
| bucketSpec
119+
| rowFormat
120+
| createFileFormat
121+
| locationSpec
122+
| commentSpec
123+
| (KW_TBLPROPERTIES tableProps=propertyList)
124+
)* KW_AS query
109125
| KW_DROP KW_TEMPORARY? KW_FUNCTION (ifExists)? functionName
110126
| KW_DECLARE (KW_OR KW_REPLACE)? KW_VARIABLE? functionName dataType? variableDefaultExpression?
111127
| KW_DROP KW_TEMPORARY KW_VARIABLE (ifExists)? (tableName | viewName | functionName)
@@ -122,6 +138,10 @@ statement
122138
| KW_SHOW KW_CREATE KW_TABLE tableName (KW_AS KW_SERDE)?
123139
| KW_SHOW KW_CURRENT dbSchema
124140
| KW_SHOW KW_CATALOGS (KW_LIKE? pattern=stringLit)?
141+
| KW_SHOW KW_MATERIALIZED KW_VIEWS ((KW_FROM | KW_IN) db_name=dbSchemaName)? (
142+
KW_LIKE? pattern=stringLit
143+
)?
144+
| KW_SHOW KW_CREATE KW_MATERIALIZED KW_VIEW viewName (KW_AS KW_SERDE)?
125145
| (KW_DESC | KW_DESCRIBE) KW_FUNCTION KW_EXTENDED? describeFuncName
126146
| (KW_DESC | KW_DESCRIBE) KW_DATABASE KW_EXTENDED? dbSchemaName
127147
| (KW_DESC | KW_DESCRIBE) KW_TABLE? option=(KW_EXTENDED | KW_FORMATTED)? tableName partitionSpec? describeColName?
@@ -131,6 +151,7 @@ statement
131151
| KW_REFRESH KW_TABLE tableName
132152
| KW_REFRESH KW_FUNCTION functionName
133153
| KW_REFRESH (stringLit | .*?)
154+
| KW_REFRESH KW_MATERIALIZED KW_VIEW viewName
134155
| KW_CACHE KW_LAZY? KW_TABLE tableName (KW_OPTIONS options=propertyList)? (KW_AS? query)?
135156
| KW_UNCACHE KW_TABLE (ifExists)? tableName
136157
| KW_CLEAR KW_CACHE
@@ -154,6 +175,7 @@ statement
154175
KW_USING indexType=identifier
155176
)? LEFT_PAREN multipartIdentifierPropertyList RIGHT_PAREN (KW_OPTIONS options=propertyList)?
156177
| KW_DROP KW_INDEX (ifExists)? identifier KW_ON KW_TABLE? tableName
178+
| KW_OPTIMIZE tableName whereClause? zorderClause
157179
| unsupportedHiveNativeCommands .*?
158180
;
159181

@@ -1233,6 +1255,10 @@ windowClause
12331255
: KW_WINDOW namedWindow (COMMA namedWindow)*
12341256
;
12351257

1258+
zorderClause
1259+
: KW_ZORDER KW_BY columnNameSeq
1260+
;
1261+
12361262
namedWindow
12371263
: name=errorCapturingIdentifier KW_AS windowSpec
12381264
;
@@ -1436,10 +1462,12 @@ ansiNonReserved
14361462
| KW_DFS
14371463
| KW_DIRECTORIES
14381464
| KW_DIRECTORY
1465+
| KW_DISABLE
14391466
| KW_DISTRIBUTE
14401467
| KW_DIV
14411468
| KW_DOUBLE
14421469
| KW_DROP
1470+
| KW_ENABLE
14431471
| KW_ESCAPED
14441472
| KW_EXCHANGE
14451473
| KW_EXCLUDE
@@ -1495,6 +1523,7 @@ ansiNonReserved
14951523
| KW_MACRO
14961524
| KW_MAP
14971525
| KW_MATCHED
1526+
| KW_MATERIALIZED
14981527
| KW_MERGE
14991528
| KW_MICROSECOND
15001529
| KW_MICROSECONDS
@@ -1514,6 +1543,7 @@ ansiNonReserved
15141543
| KW_NULLS
15151544
| KW_NUMERIC
15161545
| KW_OF
1546+
| KW_OPTIMIZE
15171547
| KW_OPTION
15181548
| KW_OPTIONS
15191549
| KW_OUT
@@ -1549,6 +1579,7 @@ ansiNonReserved
15491579
| KW_RESPECT
15501580
| KW_RESTRICT
15511581
| KW_REVOKE
1582+
| KW_REWRITE
15521583
| KW_RLIKE
15531584
| KW_REGEXP
15541585
| KW_ROLE
@@ -1632,6 +1663,7 @@ ansiNonReserved
16321663
| KW_YEAR
16331664
| KW_YEARS
16341665
| KW_ZONE
1666+
| KW_ZORDER
16351667
//--ANSI-NON-RESERVED-END
16361668
;
16371669

@@ -1747,12 +1779,14 @@ nonReserved
17471779
| KW_DFS
17481780
| KW_DIRECTORIES
17491781
| KW_DIRECTORY
1782+
| KW_DISABLE
17501783
| KW_DISTINCT
17511784
| KW_DISTRIBUTE
17521785
| KW_DIV
17531786
| KW_DOUBLE
17541787
| KW_DROP
17551788
| KW_ELSE
1789+
| KW_ENABLE
17561790
| KW_END
17571791
| KW_ESCAPE
17581792
| KW_ESCAPED
@@ -1824,6 +1858,7 @@ nonReserved
18241858
| KW_MACRO
18251859
| KW_MAP
18261860
| KW_MATCHED
1861+
| KW_MATERIALIZED
18271862
| KW_MERGE
18281863
| KW_MICROSECOND
18291864
| KW_MICROSECONDS
@@ -1847,6 +1882,7 @@ nonReserved
18471882
| KW_OF
18481883
| KW_OFFSET
18491884
| KW_ONLY
1885+
| KW_OPTIMIZE
18501886
| KW_OPTION
18511887
| KW_OPTIONS
18521888
| KW_OR
@@ -1890,6 +1926,7 @@ nonReserved
18901926
| KW_RESPECT
18911927
| KW_RESTRICT
18921928
| KW_REVOKE
1929+
| KW_REWRITE
18931930
| KW_RLIKE
18941931
| KW_REGEXP
18951932
| KW_ROLE
@@ -1986,5 +2023,6 @@ nonReserved
19862023
| KW_YEAR
19872024
| KW_YEARS
19882025
| KW_ZONE
2026+
| KW_ZORDER
19892027
//--DEFAULT-NON-RESERVED-END
19902028
;

src/lib/spark/SparkSqlLexer.interp

Lines changed: 19 additions & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)