Skip to content

Commit 10007a3

Browse files
joroKr21nenorbot
andauthored
Bulk RLE encode (#74)
Co-authored-by: Ronen Cohen <ronen.cohen@coralogix.com>
1 parent 3a9622b commit 10007a3

4 files changed

Lines changed: 281 additions & 3 deletions

File tree

parquet/src/arrow/arrow_writer/levels.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,8 @@ pub(crate) struct ArrayLevels {
566566

567567
/// The arrow array
568568
array: ArrayRef,
569+
570+
def_levels_runs: Option<Vec<(i16, usize)>>,
569571
}
570572

571573
impl PartialEq for ArrayLevels {
@@ -595,6 +597,7 @@ impl ArrayLevels {
595597
max_def_level,
596598
max_rep_level,
597599
array,
600+
def_levels_runs: (max_def_level != 0).then(Vec::new),
598601
}
599602
}
600603

@@ -668,6 +671,7 @@ mod tests {
668671
max_def_level: 2,
669672
max_rep_level: 2,
670673
array: Arc::new(primitives),
674+
def_levels_runs: None,
671675
};
672676
assert_eq!(&levels[0], &expected);
673677
}
@@ -688,6 +692,7 @@ mod tests {
688692
max_def_level: 0,
689693
max_rep_level: 0,
690694
array,
695+
def_levels_runs: None,
691696
};
692697
assert_eq!(&levels[0], &expected_levels);
693698
}
@@ -714,6 +719,7 @@ mod tests {
714719
max_def_level: 1,
715720
max_rep_level: 0,
716721
array,
722+
def_levels_runs: None,
717723
};
718724
assert_eq!(&levels[0], &expected_levels);
719725
}
@@ -748,6 +754,7 @@ mod tests {
748754
max_def_level: 1,
749755
max_rep_level: 1,
750756
array: Arc::new(leaf_array),
757+
def_levels_runs: None,
751758
};
752759
assert_eq!(&levels[0], &expected_levels);
753760

@@ -781,6 +788,7 @@ mod tests {
781788
max_def_level: 2,
782789
max_rep_level: 1,
783790
array: Arc::new(leaf_array),
791+
def_levels_runs: None,
784792
};
785793
assert_eq!(&levels[0], &expected_levels);
786794
}
@@ -830,6 +838,7 @@ mod tests {
830838
max_def_level: 3,
831839
max_rep_level: 1,
832840
array: Arc::new(leaf),
841+
def_levels_runs: None,
833842
};
834843

835844
assert_eq!(&levels[0], &expected_levels);
@@ -880,6 +889,7 @@ mod tests {
880889
max_def_level: 5,
881890
max_rep_level: 2,
882891
array: Arc::new(leaf),
892+
def_levels_runs: None,
883893
};
884894

885895
assert_eq!(&levels[0], &expected_levels);
@@ -917,6 +927,7 @@ mod tests {
917927
max_def_level: 1,
918928
max_rep_level: 1,
919929
array: Arc::new(leaf),
930+
def_levels_runs: None,
920931
};
921932
assert_eq!(&levels[0], &expected_levels);
922933

@@ -949,6 +960,7 @@ mod tests {
949960
max_def_level: 3,
950961
max_rep_level: 1,
951962
array: Arc::new(leaf),
963+
def_levels_runs: None,
952964
};
953965
assert_eq!(&levels[0], &expected_levels);
954966

@@ -997,6 +1009,7 @@ mod tests {
9971009
max_def_level: 5,
9981010
max_rep_level: 2,
9991011
array: Arc::new(leaf),
1012+
def_levels_runs: None,
10001013
};
10011014
assert_eq!(&levels[0], &expected_levels);
10021015
}
@@ -1036,6 +1049,7 @@ mod tests {
10361049
max_def_level: 3,
10371050
max_rep_level: 0,
10381051
array: leaf,
1052+
def_levels_runs: None,
10391053
};
10401054
assert_eq!(&levels[0], &expected_levels);
10411055
}
@@ -1075,6 +1089,7 @@ mod tests {
10751089
max_def_level: 3,
10761090
max_rep_level: 1,
10771091
array: Arc::new(a_values),
1092+
def_levels_runs: None,
10781093
};
10791094
assert_eq!(list_level, &expected_level);
10801095
}
@@ -1167,6 +1182,7 @@ mod tests {
11671182
max_def_level: 0,
11681183
max_rep_level: 0,
11691184
array: Arc::new(a),
1185+
def_levels_runs: None,
11701186
};
11711187
assert_eq!(list_level, &expected_level);
11721188

@@ -1180,6 +1196,7 @@ mod tests {
11801196
max_def_level: 1,
11811197
max_rep_level: 0,
11821198
array: Arc::new(b),
1199+
def_levels_runs: None,
11831200
};
11841201
assert_eq!(list_level, &expected_level);
11851202

@@ -1193,6 +1210,7 @@ mod tests {
11931210
max_def_level: 2,
11941211
max_rep_level: 0,
11951212
array: Arc::new(d),
1213+
def_levels_runs: None,
11961214
};
11971215
assert_eq!(list_level, &expected_level);
11981216

@@ -1206,6 +1224,7 @@ mod tests {
12061224
max_def_level: 3,
12071225
max_rep_level: 0,
12081226
array: Arc::new(f),
1227+
def_levels_runs: None,
12091228
};
12101229
assert_eq!(list_level, &expected_level);
12111230
}
@@ -1312,6 +1331,7 @@ mod tests {
13121331
max_def_level: 1,
13131332
max_rep_level: 1,
13141333
array: map.keys().clone(),
1334+
def_levels_runs: None,
13151335
};
13161336
assert_eq!(list_level, &expected_level);
13171337

@@ -1325,6 +1345,7 @@ mod tests {
13251345
max_def_level: 2,
13261346
max_rep_level: 1,
13271347
array: map.values().clone(),
1348+
def_levels_runs: None,
13281349
};
13291350
assert_eq!(list_level, &expected_level);
13301351
}
@@ -1410,6 +1431,7 @@ mod tests {
14101431
max_def_level: 4,
14111432
max_rep_level: 1,
14121433
array: values,
1434+
def_levels_runs: None,
14131435
};
14141436

14151437
assert_eq!(list_level, &expected_level);
@@ -1450,6 +1472,7 @@ mod tests {
14501472
max_def_level: 4,
14511473
max_rep_level: 1,
14521474
array: values,
1475+
def_levels_runs: None,
14531476
};
14541477

14551478
assert_eq!(&levels[0], &expected_level);
@@ -1535,6 +1558,7 @@ mod tests {
15351558
max_def_level: 6,
15361559
max_rep_level: 2,
15371560
array: a1_values,
1561+
def_levels_runs: None,
15381562
};
15391563

15401564
assert_eq!(&levels[0], &expected_level);
@@ -1546,6 +1570,7 @@ mod tests {
15461570
max_def_level: 4,
15471571
max_rep_level: 1,
15481572
array: a2_values,
1573+
def_levels_runs: None,
15491574
};
15501575

15511576
assert_eq!(&levels[1], &expected_level);
@@ -1584,6 +1609,7 @@ mod tests {
15841609
max_def_level: 3,
15851610
max_rep_level: 1,
15861611
array: values,
1612+
def_levels_runs: None,
15871613
};
15881614
assert_eq!(list_level, &expected_level);
15891615
}
@@ -1734,6 +1760,7 @@ mod tests {
17341760
max_def_level: 4,
17351761
max_rep_level: 1,
17361762
array: values_a,
1763+
def_levels_runs: None,
17371764
};
17381765
// [[{b: 2}, null], null, [null, null], [{b: 3}, {b: 4}]]
17391766
let expected_b = ArrayLevels {
@@ -1743,6 +1770,7 @@ mod tests {
17431770
max_def_level: 3,
17441771
max_rep_level: 1,
17451772
array: values_b,
1773+
def_levels_runs: None,
17461774
};
17471775

17481776
assert_eq!(a_levels, &expected_a);
@@ -1774,6 +1802,7 @@ mod tests {
17741802
max_def_level: 3,
17751803
max_rep_level: 1,
17761804
array: values,
1805+
def_levels_runs: None,
17771806
};
17781807
assert_eq!(list_level, &expected_level);
17791808
}
@@ -1809,6 +1838,7 @@ mod tests {
18091838
max_def_level: 5,
18101839
max_rep_level: 2,
18111840
array: values,
1841+
def_levels_runs: None,
18121842
};
18131843

18141844
assert_eq!(levels[0], expected_level);
@@ -1839,6 +1869,7 @@ mod tests {
18391869
max_def_level: 1,
18401870
max_rep_level: 0,
18411871
array: Arc::new(dict),
1872+
def_levels_runs: None,
18421873
};
18431874
assert_eq!(levels[0], expected_level);
18441875
}

0 commit comments

Comments
 (0)