This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 0b63957fa00 fix:Support Hive CREATE MATERIALIZED VIEW statement parse
(#36144)
0b63957fa00 is described below
commit 0b63957fa001d7036c6cfd69209f7d81529989c5
Author: Claire <[email protected]>
AuthorDate: Fri Aug 1 11:37:59 2025 +0800
fix:Support Hive CREATE MATERIALIZED VIEW statement parse (#36144)
* support hive CREATE MATERIALIZED VIEW statement
* Update RELEASE-NOTES.md
---
RELEASE-NOTES.md | 3 ++-
.../src/main/antlr4/imports/hive/DDLStatement.g4 | 24 ++++++++++++++++++++++
.../src/main/antlr4/imports/hive/HiveKeyword.g4 | 12 +++++++++++
.../sql/parser/autogen/HiveStatement.g4 | 1 +
.../statement/type/HiveDDLStatementVisitor.java | 7 +++++++
.../case/ddl/create-materialized-view.xml | 17 +++++++++++++++
.../sql/supported/ddl/create-materialized-view.xml | 17 +++++++++++++++
7 files changed, 80 insertions(+), 1 deletion(-)
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 53a1470f73b..554ba7d3517 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -77,7 +77,8 @@
1. SQL Parser: Support Hive ALTER COLUMN statement parse -
[#36096](https://github.com/apache/shardingsphere/pull/36096)
1. SQL Parser: Support Hive CREATE VIEW statement parse -
[#36120](https://github.com/apache/shardingsphere/pull/36120)
1. SQL Parser: Support Hive DROP VIEW statement parse -
[#36122](https://github.com/apache/shardingsphere/pull/36122)
-1. SQL Parser: Support Hive DROP VIEW statement parse -
[#36134](https://github.com/apache/shardingsphere/pull/36134)
+1. SQL Parser: Support Hive ALTER VIEW statement parse -
[#36134](https://github.com/apache/shardingsphere/pull/36134)
+1. SQL Parser: Support Hive CREATE MATERIALIZED VIEW statement parse -
[#36144](https://github.com/apache/shardingsphere/pull/36144)
1. SQL Parser: Support SQL Server xml methods parse -
[#35911](https://github.com/apache/shardingsphere/pull/35911)
1. SQL Parser: Support SQL Server CHANGETABLE function parse -
[#35920](https://github.com/apache/shardingsphere/pull/35920)
1. SQL Parser: Support SQL Server AI_GENERATE_EMBEDDINGS function parse -
[#35922](https://github.com/apache/shardingsphere/pull/35922)
diff --git
a/parser/sql/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4
b/parser/sql/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4
index 41afc3def86..5ed45f89569 100644
--- a/parser/sql/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4
+++ b/parser/sql/dialect/hive/src/main/antlr4/imports/hive/DDLStatement.g4
@@ -92,6 +92,10 @@ alterView
| alterViewCommonClause AS select
;
+createMaterializedView
+ : CREATE MATERIALIZED VIEW ifNotExists? viewNameWithDb
materializedViewOptions? AS select
+ ;
+
alterDatabaseSpecification_
: SET DBPROPERTIES LP_ dbProperties RP_
| SET OWNER (USER | ROLE) identifier
@@ -401,3 +405,23 @@ addColumns
replaceColumns
: REPLACE COLUMNS LP_ columnDefinition (COMMA_ columnDefinition)* RP_
(CASCADE | RESTRICT)?
;
+
+materializedViewOptions
+ : materializedViewOption*
+ ;
+
+materializedViewOption
+ : DISABLE REWRITE
+ | COMMENT string_
+ | PARTITIONED ON LP_ columnNames RP_
+ | clusteredOrDistrbutedClause
+ | rowFormat
+ | storedAs
+ | storageLocation
+ | tblProperties
+ ;
+
+clusteredOrDistrbutedClause
+ : CLUSTERED ON LP_ columnNames RP_
+ | DISTRIBUTED ON LP_ columnNames RP_ SORTED ON LP_ columnNames RP_
+ ;
diff --git
a/parser/sql/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4
b/parser/sql/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4
index 2b5af367d38..71fa03d3f33 100644
--- a/parser/sql/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4
+++ b/parser/sql/dialect/hive/src/main/antlr4/imports/hive/HiveKeyword.g4
@@ -3333,3 +3333,15 @@ MSCK
SYNC
: S Y N C
;
+
+MATERIALIZED
+ : M A T E R I A L I Z E D
+ ;
+
+REWRITE
+ : R E W R I T E
+ ;
+
+DISTRIBUTED
+ : D I S T R I B U T E D
+ ;
diff --git
a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4
b/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4
index 1f85912a10c..222c8ed7e86 100644
---
a/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4
+++
b/parser/sql/dialect/hive/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/HiveStatement.g4
@@ -38,6 +38,7 @@ execute
| createView
| dropView
| alterView
+ | createMaterializedView
) (SEMI_ EOF? | EOF)
| EOF
;
diff --git
a/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/type/HiveDDLStatementVisitor.java
b/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/type/HiveDDLStatementVisitor.java
index b8db65d723e..cb74c40b946 100644
---
a/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/type/HiveDDLStatementVisitor.java
+++
b/parser/sql/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/hive/visitor/statement/type/HiveDDLStatementVisitor.java
@@ -39,6 +39,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.HiveStatementParser.AlterVie
import
org.apache.shardingsphere.sql.parser.autogen.HiveStatementParser.MsckStatementContext;
import
org.apache.shardingsphere.sql.parser.autogen.HiveStatementParser.ChangeColumnContext;
import
org.apache.shardingsphere.sql.parser.autogen.HiveStatementParser.ColumnNameContext;
+import
org.apache.shardingsphere.sql.parser.autogen.HiveStatementParser.CreateMaterializedViewContext;
import
org.apache.shardingsphere.sql.parser.hive.visitor.statement.HiveStatementVisitor;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment;
@@ -53,6 +54,7 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.ta
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.CreateTableStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.DropDatabaseStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.DropTableStatement;
+import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.CreateMaterializedViewStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.view.DropViewStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.collection.CollectionValue;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
@@ -332,4 +334,9 @@ public final class HiveDDLStatementVisitor extends
HiveStatementVisitor implemen
}
return result;
}
+
+ @Override
+ public ASTNode visitCreateMaterializedView(final
CreateMaterializedViewContext ctx) {
+ return new CreateMaterializedViewStatement(getDatabaseType());
+ }
}
diff --git
a/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
b/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
index 433d59af518..f34ac9840c0 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-materialized-view.xml
@@ -40,4 +40,21 @@
<create-materialized-view
sql-case-id="create_materialized_view_refresh_on_schedule" />
<create-materialized-view
sql-case-id="create_materialized_view_refresh_complete" />
<create-materialized-view
sql-case-id="create_materialized_view_build_immediate" />
+ <create-materialized-view
sql-case-id="create_materialized_view_basic_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_if_not_exists_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_db_name_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_disable_rewrite_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_comment_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_partitioned_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_clustered_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_clustered_two_cols_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_distributed_sorted_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_row_format_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_stored_as_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_stored_by_no_serdeprops_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_stored_by_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_location_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_with_tblproperties_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_full_options_hive" />
+ <create-materialized-view
sql-case-id="create_materialized_view_full_options_with_stored_by_hive" />
</sql-parser-test-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view.xml
index fab9ced5f05..443dec360be 100644
---
a/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view.xml
+++
b/test/it/parser/src/main/resources/sql/supported/ddl/create-materialized-view.xml
@@ -146,4 +146,21 @@
<sql-case id="create_materialized_view_refresh_on_schedule" value="CREATE
MATERIALIZED VIEW mv1 REFRESH ON SCHEDULE EVERY 2 HOUR STARTS '2023-12-13
21:07:09' AS SELECT k1, k2 FROM test_table;" db-types="Doris" />
<sql-case id="create_materialized_view_refresh_complete" value="CREATE
MATERIALIZED VIEW mv1 REFRESH COMPLETE AS SELECT k1, k2 FROM test_table;"
db-types="Doris" />
<sql-case id="create_materialized_view_build_immediate" value="CREATE
MATERIALIZED VIEW mv1 BUILD IMMEDIATE AS SELECT k1, k2 FROM test_table;"
db-types="Doris" />
+ <sql-case id="create_materialized_view_basic_hive" value="CREATE
MATERIALIZED VIEW sales_mv AS SELECT order_id, sum(amount) FROM sales GROUP BY
order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_if_not_exists_hive"
value="CREATE MATERIALIZED VIEW IF NOT EXISTS sales_mv AS SELECT order_id,
sum(amount) FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_db_name_hive" value="CREATE
MATERIALIZED VIEW db1.sales_mv AS SELECT order_id, sum(amount) FROM db2.sales
GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_disable_rewrite_hive"
value="CREATE MATERIALIZED VIEW sales_mv disable REWRITE AS SELECT order_id,
sum(amount) FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_comment_hive" value="CREATE
MATERIALIZED VIEW sales_mv COMMENT 'Materialized view for sales aggregation' AS
SELECT order_id, sum(amount) FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_partitioned_hive"
value="CREATE MATERIALIZED VIEW sales_mv PARTITIONED ON (sale_date) AS SELECT
order_id, sale_date, sum(amount) FROM sales GROUP BY order_id, sale_date"
db-types="Hive" />
+ <sql-case id="create_materialized_view_with_clustered_hive" value="CREATE
MATERIALIZED VIEW sales_mv CLUSTERED ON (order_id) AS SELECT order_id,
sum(amount) FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_clustered_two_cols_hive"
value="CREATE MATERIALIZED VIEW sales_mv CLUSTERED ON (order_id, region) AS
SELECT order_id, region, sum(amount) FROM sales GROUP BY order_id, region"
db-types="Hive" />
+ <sql-case id="create_materialized_view_with_distributed_sorted_hive"
value="CREATE MATERIALIZED VIEW sales_mv DISTRIBUTED ON (order_id) SORTED ON
(sale_date) AS SELECT order_id, sale_date, sum(amount) FROM sales GROUP BY
order_id, sale_date" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_row_format_hive" value="CREATE
MATERIALIZED VIEW sales_mv ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' AS
SELECT order_id, sum(amount) FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_stored_as_hive" value="CREATE
MATERIALIZED VIEW sales_mv STORED AS PARQUET AS SELECT order_id, sum(amount)
FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_stored_by_no_serdeprops_hive"
value="CREATE MATERIALIZED VIEW sales_mv STORED BY
'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' AS SELECT order_id,
sum(amount) FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_stored_by_hive" value="CREATE
MATERIALIZED VIEW sales_mv STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES
('hbase.columns.mapping' = ':key,cf:order_id,cf:amount') AS SELECT order_id,
sum(amount) FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_location_hive" value="CREATE
MATERIALIZED VIEW sales_mv LOCATION '/user/hive/materialized_views/sales_mv' AS
SELECT order_id, sum(amount) FROM sales GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_with_tblproperties_hive"
value="CREATE MATERIALIZED VIEW sales_mv TBLPROPERTIES ('refresh_interval' =
'1h', 'owner' = 'analytics_team') AS SELECT order_id, sum(amount) FROM sales
GROUP BY order_id" db-types="Hive" />
+ <sql-case id="create_materialized_view_full_options_hive" value="CREATE
MATERIALIZED VIEW IF NOT EXISTS db1.sales_mv DISABLE REWRITE COMMENT
'Materialized view for monthly sales aggregation' PARTITIONED ON (sale_month)
CLUSTERED ON (region, product_id) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n' NULL DEFINED AS '\\N' STORED AS ORC LOCATION
'/user/hive/warehouse/db1.db/sales_mv' TBLPROPERTIES ('refresh_interval' =
'1d', 'retention_days' = '90', 'owner' = 'an [...]
+ <sql-case id="create_materialized_view_full_options_with_stored_by_hive"
value="CREATE MATERIALIZED VIEW IF NOT EXISTS db1.sales_hbase_mv DISABLE
REWRITE COMMENT 'Materialized view for sales data stored in HBase' PARTITIONED
ON (sale_quarter) DISTRIBUTED ON (region) SORTED ON (sale_date) STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES
('hbase.table.name' = 'sales:aggregated', 'hbase.columns.mapping' =
':key,cf1:sale_quarter,cf1:region,cf1:total_order [...]
</sql-cases>