diff options
author | Wenchen Fan <wenchen@databricks.com> | 2016-12-02 12:54:12 +0800 |
---|---|---|
committer | Wenchen Fan <wenchen@databricks.com> | 2016-12-02 12:54:12 +0800 |
commit | a5f02b00291e0a22429a3dca81f12cf6d38fea0b (patch) | |
tree | 2d2c4d35f53446f947469d2acf82a292ebf890da /sql/hive/src/test | |
parent | 38b9e69623c14a675b14639e8291f5d29d2a0bc3 (diff) | |
download | spark-a5f02b00291e0a22429a3dca81f12cf6d38fea0b.tar.gz spark-a5f02b00291e0a22429a3dca81f12cf6d38fea0b.tar.bz2 spark-a5f02b00291e0a22429a3dca81f12cf6d38fea0b.zip |
[SPARK-18647][SQL] do not put provider in table properties for Hive serde table
## What changes were proposed in this pull request?
In Spark 2.1, we make Hive serde tables case-preserving by putting the table metadata in table properties, like what we did for data source table. However, we should not put table provider, as it will break forward compatibility. e.g. if we create a Hive serde table with Spark 2.1, using `sql("create table test stored as parquet as select 1")`, we will fail to read it with Spark 2.0, as Spark 2.0 mistakenly treat it as data source table because there is a `provider` entry in table properties.
Logically Hive serde table's provider is always hive, we don't need to store it in table properties, this PR removes it.
## How was this patch tested?
manually test the forward compatibility issue.
Author: Wenchen Fan <wenchen@databricks.com>
Closes #16080 from cloud-fan/hive.
Diffstat (limited to 'sql/hive/src/test')
-rw-r--r-- | sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveExternalCatalogSuite.scala | 18 | ||||
-rw-r--r-- | sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreCatalogSuite.scala | 2 |
2 files changed, 18 insertions, 2 deletions
diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveExternalCatalogSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveExternalCatalogSuite.scala index efa0beb850..6fee45824e 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveExternalCatalogSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveExternalCatalogSuite.scala @@ -20,8 +20,11 @@ package org.apache.spark.sql.hive import org.apache.hadoop.conf.Configuration import org.apache.spark.SparkConf +import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.dsl.expressions._ +import org.apache.spark.sql.execution.command.DDLUtils +import org.apache.spark.sql.types.StructType /** * Test suite for the [[HiveExternalCatalog]]. @@ -52,4 +55,19 @@ class HiveExternalCatalogSuite extends ExternalCatalogSuite { assert(selectedPartitions.length == 1) assert(selectedPartitions.head.spec == part1.spec) } + + test("SPARK-18647: do not put provider in table properties for Hive serde table") { + val catalog = newBasicCatalog() + val hiveTable = CatalogTable( + identifier = TableIdentifier("hive_tbl", Some("db1")), + tableType = CatalogTableType.MANAGED, + storage = storageFormat, + schema = new StructType().add("col1", "int").add("col2", "string"), + provider = Some("hive")) + catalog.createTable(hiveTable, ignoreIfExists = false) + + val rawTable = externalCatalog.client.getTable("db1", "hive_tbl") + assert(!rawTable.properties.contains(HiveExternalCatalog.DATASOURCE_PROVIDER)) + assert(externalCatalog.getTable("db1", "hive_tbl").provider == Some(DDLUtils.HIVE_PROVIDER)) + } } diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreCatalogSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreCatalogSuite.scala index 7abc4d9623..0a280b4952 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreCatalogSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/HiveMetastoreCatalogSuite.scala @@ -17,8 +17,6 @@ package org.apache.spark.sql.hive -import java.io.File - import org.apache.spark.sql.{QueryTest, Row, SaveMode} import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.catalog.CatalogTableType |