[ 
https://issues.apache.org/jira/browse/HIVE-30133?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Denys Kuzmenko updated HIVE-30133:
----------------------------------
    Issue Type: Improvement  (was: Bug)

> Columnar shuffle: a batch with repeating partition columns travels as one 
> block
> -------------------------------------------------------------------------------
>
>                 Key: HIVE-30133
>                 URL: https://issues.apache.org/jira/browse/HIVE-30133
>             Project: Hive
>          Issue Type: Improvement
>          Components: Iceberg integration
>            Reporter: Denys Kuzmenko
>            Priority: Major
>              Labels: pull-request-available
>
>   On the columnar shuffle 
> (hive.vectorized.execution.columnar.shuffle.enabled) a ReduceSink of an 
> unsorted edge gathers its rows per partition and ships them as column blocks. 
> Two gaps:       
>   * a column that repeats across a batch is flattened, so every row carries 
> its value again;                                                              
>                                       
>   * an empty-key ReduceSink partitioned by other columns 
> (VectorReduceSinkObjectHashOperator) never takes the columnar shuffle. The 
> DISTRIBUTE BY FILE__PATH of an Iceberg V3 merge-on-read     
>   DELETE, UPDATE or MERGE is one: every deleted row is serialized with its 
> FILE__PATH, PARTITION__SPEC__ID and PARTITION__KEY into a Tez record of its 
> own.                                     
>                                                                               
>                                                                               
>                                     
>   When every partition column of a batch repeats, all its rows go to one 
> reducer, so the batch can travel as one block with each repeating column 
> written once.                                 
>                                                                               
>                                                                               
>                                     
>   *Fix*                                                                       
>                                                                               
>                                     
>   * Block format: per-column flags HAS_NULLS and REPEATING; a repeating 
> column travels as its one value; the selected rows of a batch encode without 
> a gather.                                  
>   * A batch whose rows all go to one partition (64 rows or more) leaves as a 
> block of its own; the other rows gather per partition as before.              
>                                      
>   * VectorReduceSinkColumnarObjectHashOperator: the columnar shuffle of an 
> empty-key ReduceSink with partition columns and no buckets. Rows go to the 
> partitions the row path gives them, hashed
>   once per batch when every partition column repeats.                         
>                                                                               
>                                     
>   * Row path: the ObjectHash ReduceSink computes the partition hashCode once 
> per batch when every partition column repeats.                                
>                                      
>                                                                               
>                                                                               
>                                     
>   *Measured* (local, the V3 DELETE ReduceSink: 150 B FILE__PATH, spec id, 
> partition key, position; 1,024-row batches)                                   
>                                         
>   ||Path||ns per row||Value bytes per row||Tez records||                      
>                                                                               
>                                     
>   |row path, master|103.0|168|one per row|                                    
>                                                                               
>                                     
>   |row path, hash once per batch|46.9|168|one per row|                        
>                                                                               
>                                     
>   |columnar shuffle|0.30|8.4|one per batch|                                   
>                                                                               
>                                     
>   Reducer decode on the columnar shuffle: 0.16 ns/row. Not timed on the 
> cluster; the gain scales with the share of rows a DML writes.
> Depends on HIVE-30221 (columnar shuffle)



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to