XiDuo You created SPARK-37194: --------------------------------- Summary: Avoid unnecessary sort in FileFormatWriter if it's not dynamic partition Key: SPARK-37194 URL: https://issues.apache.org/jira/browse/SPARK-37194 Project: Spark Issue Type: Improvement Components: SQL Affects Versions: 3.3.0 Reporter: XiDuo You
`FileFormatWriter.write` will sort the partition and bucket column before do writing. I think this code path assumed the input `partitionColumns` are dynamic but actually it's not. It now is used by three code path: - `FileStreamSink`; it should be always dynamic partition - `SaveAsHiveFile`; it followed the assuming that `InsertIntoHiveTable` has removed the static partition and `InsertIntoHiveDirCommand` has no partition - `InsertIntoHadoopFsRelationCommand`; it passed `partitionColumns` into `FileFormatWriter.write` without removing static partition because we need it to generate the partition path in `DynamicPartitionDataWriter` It shows that the unnecessary sort only affected the `InsertIntoHadoopFsRelationCommand` if we write data with static partition. Do a simple benchmak: {code:java} CREATE TABLE test (id long) USING PARQUET PARTITIONED BY (d string); -- before this PR, it tooks 1.82 seconds -- after this PR, it tooks 1.072 seconds INSERT OVERWRITE TABLE test PARTITION(d='a') SELECT id FROM range(10000000); {code} -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org For additional commands, e-mail: issues-h...@spark.apache.org