Skip to content
Snippets Groups Projects
Commit 5c08c86b authored by Michael Armbrust's avatar Michael Armbrust
Browse files

[SPARK-10198] [SQL] Turn off partition verification by default

Author: Michael Armbrust <michael@databricks.com>

Closes #8404 from marmbrus/turnOffPartitionVerification.
parent 69c9c177
No related branches found
No related tags found
No related merge requests found
...@@ -312,7 +312,7 @@ private[spark] object SQLConf { ...@@ -312,7 +312,7 @@ private[spark] object SQLConf {
doc = "When true, enable filter pushdown for ORC files.") doc = "When true, enable filter pushdown for ORC files.")
val HIVE_VERIFY_PARTITION_PATH = booleanConf("spark.sql.hive.verifyPartitionPath", val HIVE_VERIFY_PARTITION_PATH = booleanConf("spark.sql.hive.verifyPartitionPath",
defaultValue = Some(true), defaultValue = Some(false),
doc = "<TODO>") doc = "<TODO>")
val HIVE_METASTORE_PARTITION_PRUNING = booleanConf("spark.sql.hive.metastorePartitionPruning", val HIVE_METASTORE_PARTITION_PRUNING = booleanConf("spark.sql.hive.metastorePartitionPruning",
......
...@@ -18,50 +18,54 @@ ...@@ -18,50 +18,54 @@
package org.apache.spark.sql.hive package org.apache.spark.sql.hive
import com.google.common.io.Files import com.google.common.io.Files
import org.apache.spark.sql.test.SQLTestUtils
import org.apache.spark.sql.{QueryTest, _} import org.apache.spark.sql.{QueryTest, _}
import org.apache.spark.util.Utils import org.apache.spark.util.Utils
class QueryPartitionSuite extends QueryTest { class QueryPartitionSuite extends QueryTest with SQLTestUtils {
private lazy val ctx = org.apache.spark.sql.hive.test.TestHive private lazy val ctx = org.apache.spark.sql.hive.test.TestHive
import ctx.implicits._ import ctx.implicits._
import ctx.sql
protected def _sqlContext = ctx
test("SPARK-5068: query data when path doesn't exist"){ test("SPARK-5068: query data when path doesn't exist"){
val testData = ctx.sparkContext.parallelize( withSQLConf((SQLConf.HIVE_VERIFY_PARTITION_PATH.key, "true")) {
(1 to 10).map(i => TestData(i, i.toString))).toDF() val testData = ctx.sparkContext.parallelize(
testData.registerTempTable("testData") (1 to 10).map(i => TestData(i, i.toString))).toDF()
testData.registerTempTable("testData")
val tmpDir = Files.createTempDir() val tmpDir = Files.createTempDir()
// create the table for test // create the table for test
sql(s"CREATE TABLE table_with_partition(key int,value string) " + sql(s"CREATE TABLE table_with_partition(key int,value string) " +
s"PARTITIONED by (ds string) location '${tmpDir.toURI.toString}' ") s"PARTITIONED by (ds string) location '${tmpDir.toURI.toString}' ")
sql("INSERT OVERWRITE TABLE table_with_partition partition (ds='1') " + sql("INSERT OVERWRITE TABLE table_with_partition partition (ds='1') " +
"SELECT key,value FROM testData") "SELECT key,value FROM testData")
sql("INSERT OVERWRITE TABLE table_with_partition partition (ds='2') " + sql("INSERT OVERWRITE TABLE table_with_partition partition (ds='2') " +
"SELECT key,value FROM testData") "SELECT key,value FROM testData")
sql("INSERT OVERWRITE TABLE table_with_partition partition (ds='3') " + sql("INSERT OVERWRITE TABLE table_with_partition partition (ds='3') " +
"SELECT key,value FROM testData") "SELECT key,value FROM testData")
sql("INSERT OVERWRITE TABLE table_with_partition partition (ds='4') " + sql("INSERT OVERWRITE TABLE table_with_partition partition (ds='4') " +
"SELECT key,value FROM testData") "SELECT key,value FROM testData")
// test for the exist path // test for the exist path
checkAnswer(sql("select key,value from table_with_partition"), checkAnswer(sql("select key,value from table_with_partition"),
testData.toDF.collect ++ testData.toDF.collect testData.toDF.collect ++ testData.toDF.collect
++ testData.toDF.collect ++ testData.toDF.collect) ++ testData.toDF.collect ++ testData.toDF.collect)
// delete the path of one partition // delete the path of one partition
tmpDir.listFiles tmpDir.listFiles
.find { f => f.isDirectory && f.getName().startsWith("ds=") } .find { f => f.isDirectory && f.getName().startsWith("ds=") }
.foreach { f => Utils.deleteRecursively(f) } .foreach { f => Utils.deleteRecursively(f) }
// test for after delete the path // test for after delete the path
checkAnswer(sql("select key,value from table_with_partition"), checkAnswer(sql("select key,value from table_with_partition"),
testData.toDF.collect ++ testData.toDF.collect ++ testData.toDF.collect) testData.toDF.collect ++ testData.toDF.collect ++ testData.toDF.collect)
sql("DROP TABLE table_with_partition") sql("DROP TABLE table_with_partition")
sql("DROP TABLE createAndInsertTest") sql("DROP TABLE createAndInsertTest")
}
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment