Skip to content
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1236,13 +1236,14 @@ private[spark] class HiveExternalCatalog(conf: SparkConf, hadoopConf: Configurat
db: String,
table: String,
partialSpec: Option[TablePartitionSpec] = None): Seq[CatalogTablePartition] = withClient {
val partColNameMap = buildLowerCasePartColNameMap(getTable(db, table))
val metaStoreSpec = partialSpec.map(toMetaStorePartitionSpec)
val res = client.getPartitions(db, table, metaStoreSpec)
val rawTable = getRawTable(db, table)
Comment thread
AngersZhuuuu marked this conversation as resolved.
Outdated
val catalogTable = restoreTableMetadata(rawTable)
Comment thread
AngersZhuuuu marked this conversation as resolved.
Outdated
val partColNameMap = buildLowerCasePartColNameMap(catalogTable)
val res = client.getPartitions(catalogTable, partialSpec)
.map { part => part.copy(spec = restorePartitionSpec(part.spec, partColNameMap))
}

metaStoreSpec match {
partialSpec match {
// This might be a bug of Hive: When the partition value inside the partial partition spec
// contains dot, and we ask Hive to list partitions w.r.t. the partial partition spec, Hive
// treats dot as matching any single character and may return more partitions than we
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.spark.sql.hive

import java.io.File
import java.util.Locale

import com.google.common.io.Files
import org.apache.hadoop.fs.Path
Expand Down Expand Up @@ -854,4 +855,64 @@ class InsertSuite extends QueryTest with TestHiveSingleton with BeforeAndAfter
assert(e.contains("Partition spec is invalid"))
}
}

test("SPARK-35531: Insert data with different cases of bucket column") {
withTable("TEST1") {
val createHive =
"""
|CREATE TABLE TEST1(
|v1 BIGINT,
|s1 INT)
|PARTITIONED BY (pk BIGINT)
|CLUSTERED BY (v1)
|SORTED BY (s1)
|INTO 200 BUCKETS
|STORED AS PARQUET
""".stripMargin

val insertString =
"""
|INSERT INTO test1
|SELECT * FROM VALUES(1,1,1)
""".stripMargin

val dropString = "DROP TABLE IF EXISTS test1"

spark.sql(dropString)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doesn't sql(dropString) work?

spark.sql(createHive.toLowerCase(Locale.ROOT))

spark.sql(insertString.toLowerCase(Locale.ROOT))
spark.sql(insertString.toUpperCase(Locale.ROOT))

spark.sql(dropString)
spark.sql(createHive.toUpperCase(Locale.ROOT))

spark.sql(insertString.toLowerCase(Locale.ROOT))
spark.sql(insertString.toUpperCase(Locale.ROOT))

val createSpark =
"""
|CREATE TABLE TEST1(
|v1 BIGINT,
|s1 INT)
|USING PARQUET
|PARTITIONED BY (pk BIGINT)
|CLUSTERED BY (v1)
|SORTED BY (s1)
|INTO 200 BUCKETS
""".stripMargin

spark.sql(dropString)
spark.sql(createSpark.toLowerCase(Locale.ROOT))

spark.sql(insertString.toLowerCase(Locale.ROOT))
spark.sql(insertString.toUpperCase(Locale.ROOT))

spark.sql(dropString)
spark.sql(createSpark.toUpperCase(Locale.ROOT))

spark.sql(insertString.toLowerCase(Locale.ROOT))
spark.sql(insertString.toUpperCase(Locale.ROOT))
}
}
}