This is an automated email from the ASF dual-hosted git repository.

jingzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new 06dc85aa67d [FLINK-30567][hive] Fix wrong behavior for insert 
overwrite with Hive dialect when the table contains uppercase character  
(#21602)
06dc85aa67d is described below

commit 06dc85aa67d7abb9e44102544588eaf1c292b93b
Author: yuxia Luo <luoyu...@alumni.sjtu.edu.cn>
AuthorDate: Mon Jan 30 11:26:40 2023 +0800

    [FLINK-30567][hive] Fix wrong behavior for insert overwrite with Hive 
dialect when the table contains uppercase character  (#21602)
    
    [FLINK-30567][hive] Fix wrong behavior for insert overwrite with Hive 
dialect when the table contains uppercase character
    
    This closes #21602
---
 .../planner/delegation/hive/HiveParserDMLHelper.java    | 11 ++++++++++-
 .../apache/flink/connectors/hive/HiveDialectITCase.java | 17 +++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git 
a/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/planner/delegation/hive/HiveParserDMLHelper.java
 
b/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/planner/delegation/hive/HiveParserDMLHelper.java
index 7444bec2d43..5c99f9d9ced 100644
--- 
a/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/planner/delegation/hive/HiveParserDMLHelper.java
+++ 
b/flink-connectors/flink-connector-hive/src/main/java/org/apache/flink/table/planner/delegation/hive/HiveParserDMLHelper.java
@@ -316,7 +316,16 @@ public class HiveParserDMLHelper {
                 
topQB.getParseInfo().getInsertOverwriteTables().keySet().stream()
                         .map(String::toLowerCase)
                         .collect(Collectors.toSet())
-                        .contains(tableName);
+                        .contains(tableName.toLowerCase());
+
+        boolean isInsertInto = 
topQB.getParseInfo().isInsertIntoTable(tableName);
+
+        Preconditions.checkArgument(
+                overwrite | isInsertInto,
+                "Inconsistent data structure detected: we are writing to "
+                        + tableName
+                        + ", but it's not in isInsertIntoTable() or 
getInsertOverwriteTables()."
+                        + " This is a bug. Please consider filing an issue.");
 
         Tuple4<ObjectIdentifier, QueryOperation, Map<String, String>, Boolean> 
insertOperationInfo =
                 createInsertOperationInfo(
diff --git 
a/flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/connectors/hive/HiveDialectITCase.java
 
b/flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/connectors/hive/HiveDialectITCase.java
index f88d4346fcc..1b10e6c93a7 100644
--- 
a/flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/connectors/hive/HiveDialectITCase.java
+++ 
b/flink-connectors/flink-connector-hive/src/test/java/org/apache/flink/connectors/hive/HiveDialectITCase.java
@@ -395,6 +395,23 @@ public class HiveDialectITCase {
                 .isEqualTo("[+I[1, a, 100.45], +I[1, b, 100.45], +I[1, c, 
100.45]]");
     }
 
+    @Test
+    public void testInsertOverwrite() throws Exception {
+        tableEnv.executeSql("create table T1(a int, b string)");
+        tableEnv.executeSql("insert into T1 values(1, 'v1')").await();
+        tableEnv.executeSql("create table T2(a int, b string) partitioned by 
(dt string)");
+        tableEnv.executeSql(
+                        "insert overwrite table default.T2 partition (dt = 
'2023-01-01') select * from default.T1")
+                .await();
+        List<Row> rows = queryResult(tableEnv.sqlQuery("select * from T2"));
+        assertThat(rows.toString()).isEqualTo("[+I[1, v1, 2023-01-01]]");
+        tableEnv.executeSql(
+                        "insert overwrite table default.T2 partition (dt = 
'2023-01-01') select * from default.T1")
+                .await();
+        rows = queryResult(tableEnv.sqlQuery("select * from T2"));
+        assertThat(rows.toString()).isEqualTo("[+I[1, v1, 2023-01-01]]");
+    }
+
     @Test
     public void testAlterTable() throws Exception {
         tableEnv.executeSql("create table tbl (x int) 
tblproperties('k1'='v1')");

Reply via email to