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")