You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by in...@apache.org on 2022/03/29 16:02:54 UTC

[carbondata] branch master updated: [CARBONDATA-4328] Load parquet table with options error message fix

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

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


The following commit(s) were added to refs/heads/master by this push:
     new d6ce946  [CARBONDATA-4328] Load parquet table with options error message fix
d6ce946 is described below

commit d6ce9467488d342134f8072326667aef7031e8a2
Author: ShreelekhyaG <sh...@yahoo.com>
AuthorDate: Mon Mar 14 14:40:35 2022 +0530

    [CARBONDATA-4328] Load parquet table with options error message fix
    
    Why is this PR needed?
    If parquet table is created and load statement with options is
    triggerred, then its failing with NoSuchTableException:
    Table ${tableIdentifier.table} does not exist.
    
    What changes were proposed in this PR?
    As parquet table load is not handled, added a check to filter out
    non-carbon tables in the parser. So that, the spark parser can handle the statement.
    
    This closes #4253
---
 .../sql/parser/CarbonExtensionSpark2SqlParser.scala   |  5 ++++-
 .../spark/sql/parser/CarbonSpark2SqlParser.scala      |  3 ++-
 .../datasource/SparkCarbonDataSourceBinaryTest.scala  | 19 ++++++++++++++++++-
 3 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/integration/spark/src/main/scala/org/apache/spark/sql/parser/CarbonExtensionSpark2SqlParser.scala b/integration/spark/src/main/scala/org/apache/spark/sql/parser/CarbonExtensionSpark2SqlParser.scala
index fcb2c9b..fa92090 100644
--- a/integration/spark/src/main/scala/org/apache/spark/sql/parser/CarbonExtensionSpark2SqlParser.scala
+++ b/integration/spark/src/main/scala/org/apache/spark/sql/parser/CarbonExtensionSpark2SqlParser.scala
@@ -19,8 +19,10 @@ package org.apache.spark.sql.parser
 
 import scala.language.implicitConversions
 
+import org.apache.spark.sql.catalyst.TableIdentifier
 import org.apache.spark.sql.catalyst.plans.logical._
 import org.apache.spark.sql.execution.command.management.RefreshCarbonTableCommand
+import org.apache.spark.sql.execution.strategy.CarbonPlanHelper
 
 /**
  * Parser for All Carbon DDL, DML cases in Unified context
@@ -51,7 +53,8 @@ class CarbonExtensionSpark2SqlParser extends CarbonSpark2SqlParser {
     (INTO ~> TABLE ~> (ident <~ ".").? ~ ident) ~
     (PARTITION ~> "(" ~> repsep(partitions, ",") <~ ")").? ~
     (OPTIONS ~> "(" ~> repsep(options, ",") <~ ")") <~ opt(";") ^^ {
-      case filePath ~ isOverwrite ~ table ~ partitions ~ optionsList =>
+      case filePath ~ isOverwrite ~ table ~ partitions ~ optionsList
+        if CarbonPlanHelper.isCarbonTable(TableIdentifier(table._2, table._1)) =>
         val (databaseNameOp, tableName) = table match {
           case databaseName ~ tableName => (databaseName, tableName.toLowerCase())
         }
diff --git a/integration/spark/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala b/integration/spark/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
index 225c4df..73b2c82 100644
--- a/integration/spark/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
+++ b/integration/spark/src/main/scala/org/apache/spark/sql/parser/CarbonSpark2SqlParser.scala
@@ -495,7 +495,8 @@ class CarbonSpark2SqlParser extends CarbonDDLSqlParser {
     (INTO ~> TABLE ~> (ident <~ ".").? ~ ident) ~
     (PARTITION ~> "(" ~> repsep(partitions, ",") <~ ")").? ~
     (OPTIONS ~> "(" ~> repsep(options, ",") <~ ")").? <~ opt(";") ^^ {
-      case filePath ~ isOverwrite ~ table ~ partitions ~ optionsList =>
+      case filePath ~ isOverwrite ~ table ~ partitions ~ optionsList
+        if CarbonPlanHelper.isCarbonTable(TableIdentifier(table._2, table._1)) =>
         val (databaseNameOp, tableName) = table match {
           case databaseName ~ tableName => (databaseName, tableName.toLowerCase())
         }
diff --git a/integration/spark/src/test/scala/org/apache/spark/sql/carbondata/datasource/SparkCarbonDataSourceBinaryTest.scala b/integration/spark/src/test/scala/org/apache/spark/sql/carbondata/datasource/SparkCarbonDataSourceBinaryTest.scala
index 40576c3..070c006 100644
--- a/integration/spark/src/test/scala/org/apache/spark/sql/carbondata/datasource/SparkCarbonDataSourceBinaryTest.scala
+++ b/integration/spark/src/test/scala/org/apache/spark/sql/carbondata/datasource/SparkCarbonDataSourceBinaryTest.scala
@@ -21,7 +21,7 @@ import java.io.File
 
 import org.apache.commons.codec.binary.{Base64, Hex}
 import org.apache.commons.io.FileUtils
-import org.apache.spark.sql.Row
+import org.apache.spark.sql.{AnalysisException, Row}
 import org.apache.spark.sql.test.util.QueryTest
 import org.apache.spark.util.SparkUtil
 import org.scalatest.BeforeAndAfterAll
@@ -657,6 +657,23 @@ class SparkCarbonDataSourceBinaryTest extends QueryTest with BeforeAndAfterAll {
     || exception.getMessage.contains("DELETE TABLE is not supported temporarily."))
   }
 
+  test("test load on parquet table") {
+    sql("drop table if exists parquet_table")
+    sql("create table parquet_table(empno int, empname string, projdate Date) using parquet")
+    var ex = intercept[AnalysisException] {
+      sql(s"""LOAD DATA local inpath '$resourcesPath/data_big.csv' INTO TABLE parquet_table
+          """.stripMargin)
+    }
+    assert(ex.getMessage
+      .contains("LOAD DATA is not supported for datasource tables: `default`.`parquet_table`"))
+    ex = intercept[AnalysisException] {
+      sql(s"""LOAD DATA local inpath '$resourcesPath/data_big.csv' INTO TABLE parquet_table
+           |OPTIONS('DELIMITER'= ',', 'QUOTECHAR'= '"')""".stripMargin)
+    }
+    assert(ex.getMessage.contains("mismatched input"))
+    sql("drop table if exists parquet_table")
+  }
+
   test("test array of binary data type with sparkfileformat ") {
     sql("drop table if exists carbon_table")
     sql("drop table if exists parquet_table")