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

Reply via email to