You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@spark.apache.org by GitBox <gi...@apache.org> on 2020/03/14 02:30:23 UTC

[GitHub] [spark] dongjoon-hyun commented on a change in pull request #27888: [SPARK-31116][SQL] Fix nested schema case-sensitivity in ParquetRowConverter

dongjoon-hyun commented on a change in pull request #27888: [SPARK-31116][SQL] Fix nested schema case-sensitivity in ParquetRowConverter
URL: https://github.com/apache/spark/pull/27888#discussion_r392548875
 
 

 ##########
 File path: sql/core/src/test/scala/org/apache/spark/sql/FileBasedDataSourceSuite.scala
 ##########
 @@ -842,6 +842,333 @@ class FileBasedDataSourceSuite extends QueryTest
       }
     }
   }
+
+  test("SPARK-31116: Select simple parquet with case insensitive and schema pruning enabled") {
+    withSQLConf(
+      SQLConf.CASE_SENSITIVE.key -> "false",
+      SQLConf.NESTED_SCHEMA_PRUNING_ENABLED.key -> "true") {
+      withTempPath { dir => {
+        val path = dir.getCanonicalPath
+
+        // Prepare values for testing specific parquet record reader
+        Seq("A").toDF("camelCase").write.parquet(path)
+
+        val exactSchema = new StructType().add("camelCase", StringType)
+        checkAnswer(spark.read.schema(exactSchema).parquet(path), Row("A"))
+
+        // In case insensitive manner, parquet's column cases are ignored
+        val caseInsensitiveSchema = new StructType().add("camelcase", StringType)
+        checkAnswer(spark.read.schema(caseInsensitiveSchema).parquet(path), Row("A"))
+      }}
+    }
+  }
+  test("SPARK-31116: Select simple parquet with case insensitive and schema pruning disabled") {
+    withSQLConf(
+      SQLConf.CASE_SENSITIVE.key -> "false",
+      SQLConf.NESTED_SCHEMA_PRUNING_ENABLED.key -> "false") {
+      withTempPath { dir => {
+        val path = dir.getCanonicalPath
+
+        // Prepare values for testing specific parquet record reader
+        Seq("A").toDF("camelCase").write.parquet(path)
+
+        val exactSchema = new StructType().add("camelCase", StringType)
+        checkAnswer(spark.read.schema(exactSchema).parquet(path), Row("A"))
+
+        // In case insensitive manner, parquet's column cases are ignored
+        val caseInsensitiveSchema = new StructType().add("camelcase", StringType)
+        checkAnswer(spark.read.schema(caseInsensitiveSchema).parquet(path), Row("A"))
+      }}
+    }
+  }
+
+  test("SPARK-31116: Select nested parquet with case insensitive and schema pruning enabled") {
+    withSQLConf(
+      SQLConf.CASE_SENSITIVE.key -> "false",
+      SQLConf.NESTED_SCHEMA_PRUNING_ENABLED.key -> "true") {
+      withTempPath { dir => {
+        val path = dir.getCanonicalPath
+
+        // Prepare values for testing nested parquet data
+        spark
+          .range(1L)
+          .selectExpr("NAMED_STRUCT('lowercase', id, 'camelCase', id + 1) AS StructColumn")
+          .write.parquet(path)
+
+        val exactSchema = new StructType()
+          .add(
+            "StructColumn",
+            new StructType()
+              .add("lowercase", LongType)
+              .add("camelCase", LongType))
 
 Review comment:
   Let's use a shorter form.
   ```scala
   -        val exactSchema = new StructType()
   -          .add(
   -            "StructColumn",
   -            new StructType()
   -              .add("lowercase", LongType)
   -              .add("camelCase", LongType))
   +        val exactSchema = "StructColumn struct<lowercase: LONG, camelCase: LONG>"
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org