11use arrow:: array:: Array ;
2- use parquet_variant_compute:: VariantArrayBuilder ;
32use parquet_variant:: VariantBuilder ;
3+ use parquet_variant_compute:: VariantArrayBuilder ;
44
55fn main ( ) {
66 // Create some sample data with fields to remove
77 let mut builder = VariantArrayBuilder :: new ( 2 ) ;
8-
8+
99 // Row 1: User with temporary data
1010 {
1111 let mut variant_builder = VariantBuilder :: new ( ) ;
@@ -15,21 +15,21 @@ fn main() {
1515 obj. insert ( "age" , 30i32 ) ;
1616 obj. insert ( "temp_session" , "abc123" ) ;
1717 obj. insert ( "debug_info" , "temporary debug data" ) ;
18-
18+
1919 {
2020 let mut address = obj. new_object ( "address" ) ;
2121 address. insert ( "city" , "New York" ) ;
2222 address. insert ( "zip" , "10001" ) ;
2323 address. insert ( "temp_geocode" , "40.7128,-74.0060" ) ;
2424 let _ = address. finish ( ) ;
2525 }
26-
26+
2727 let _ = obj. finish ( ) ;
2828 }
2929 let ( metadata, value) = variant_builder. finish ( ) ;
3030 builder. append_variant_buffers ( & metadata, & value) ;
3131 }
32-
32+
3333 // Row 2: Another user with temporary data
3434 {
3535 let mut variant_builder = VariantBuilder :: new ( ) ;
@@ -39,72 +39,106 @@ fn main() {
3939 obj. insert ( "age" , 25i32 ) ;
4040 obj. insert ( "temp_session" , "def456" ) ;
4141 obj. insert ( "debug_info" , "more temporary data" ) ;
42-
42+
4343 {
4444 let mut address = obj. new_object ( "address" ) ;
4545 address. insert ( "city" , "San Francisco" ) ;
4646 address. insert ( "zip" , "94102" ) ;
4747 address. insert ( "temp_geocode" , "37.7749,-122.4194" ) ;
4848 let _ = address. finish ( ) ;
4949 }
50-
50+
5151 let _ = obj. finish ( ) ;
5252 }
5353 let ( metadata, value) = variant_builder. finish ( ) ;
5454 builder. append_variant_buffers ( & metadata, & value) ;
5555 }
56-
56+
5757 let array = builder. finish ( ) ;
58-
58+
5959 println ! ( "=== Field Removal Examples ===" ) ;
60-
60+
6161 // Show original data
6262 println ! ( "Original data:" ) ;
6363 for i in 0 ..array. len ( ) {
6464 let variant = array. value ( i) ;
6565 if let Some ( obj) = variant. as_object ( ) {
6666 let name = obj. get ( "name" ) . unwrap ( ) . as_string ( ) . unwrap ( ) . to_string ( ) ;
67- let session = obj. get ( "temp_session" ) . map ( |v| v. as_string ( ) . unwrap ( ) . to_string ( ) ) . unwrap_or ( "None" . to_string ( ) ) ;
68- let debug = obj. get ( "debug_info" ) . map ( |v| v. as_string ( ) . unwrap ( ) . to_string ( ) ) . unwrap_or ( "None" . to_string ( ) ) ;
67+ let session = obj
68+ . get ( "temp_session" )
69+ . map ( |v| v. as_string ( ) . unwrap ( ) . to_string ( ) )
70+ . unwrap_or ( "None" . to_string ( ) ) ;
71+ let debug = obj
72+ . get ( "debug_info" )
73+ . map ( |v| v. as_string ( ) . unwrap ( ) . to_string ( ) )
74+ . unwrap_or ( "None" . to_string ( ) ) ;
6975 println ! ( " {}: session={}, debug={}" , name, session, debug) ;
7076 }
7177 }
72-
78+
7379 // Remove temporary session field
7480 let cleaned_array = array. with_field_removed ( "temp_session" ) . unwrap ( ) ;
75-
81+
7682 println ! ( "\n Removing temporary session fields..." ) ;
7783 println ! ( "After removing temp_session:" ) ;
7884 for i in 0 ..cleaned_array. len ( ) {
7985 let variant = cleaned_array. value ( i) ;
8086 if let Some ( obj) = variant. as_object ( ) {
8187 let name = obj. get ( "name" ) . unwrap ( ) . as_string ( ) . unwrap ( ) . to_string ( ) ;
82- let session = obj. get ( "temp_session" ) . map ( |v| v. as_string ( ) . unwrap ( ) . to_string ( ) ) . unwrap_or ( "None" . to_string ( ) ) ;
83- let debug = obj. get ( "debug_info" ) . map ( |v| v. as_string ( ) . unwrap ( ) . to_string ( ) ) . unwrap_or ( "None" . to_string ( ) ) ;
88+ let session = obj
89+ . get ( "temp_session" )
90+ . map ( |v| v. as_string ( ) . unwrap ( ) . to_string ( ) )
91+ . unwrap_or ( "None" . to_string ( ) ) ;
92+ let debug = obj
93+ . get ( "debug_info" )
94+ . map ( |v| v. as_string ( ) . unwrap ( ) . to_string ( ) )
95+ . unwrap_or ( "None" . to_string ( ) ) ;
8496 println ! ( " {}: session={}, debug={}" , name, session, debug) ;
8597 }
8698 }
87-
99+
88100 // Remove multiple temporary fields
89- let final_array = cleaned_array. with_fields_removed ( & [ "debug_info" , "temp_session" ] ) . unwrap ( ) ;
90-
101+ let final_array = cleaned_array
102+ . with_fields_removed ( & [ "debug_info" , "temp_session" ] )
103+ . unwrap ( ) ;
104+
91105 println ! ( "\n Removing multiple temporary fields..." ) ;
92106 println ! ( "Final clean data:" ) ;
93107 for i in 0 ..final_array. len ( ) {
94108 let variant = final_array. value ( i) ;
95109 if let Some ( obj) = variant. as_object ( ) {
96110 let name = obj. get ( "name" ) . unwrap ( ) . as_string ( ) . unwrap ( ) . to_string ( ) ;
97111 let age = obj. get ( "age" ) . unwrap ( ) . as_int32 ( ) . unwrap ( ) ;
98-
112+
99113 if let Some ( address) = obj. get ( "address" ) {
100114 if let Some ( addr_obj) = address. as_object ( ) {
101- let city = addr_obj. get ( "city" ) . unwrap ( ) . as_string ( ) . unwrap ( ) . to_string ( ) ;
102- let zip = addr_obj. get ( "zip" ) . unwrap ( ) . as_string ( ) . unwrap ( ) . to_string ( ) ;
103- let geocode = addr_obj. get ( "temp_geocode" ) . map ( |v| format ! ( "Some(ShortString(ShortString(\" {}\" )))" , v. as_string( ) . unwrap( ) ) ) . unwrap_or ( "None" . to_string ( ) ) ;
104- println ! ( " {}: age={}, city={}, zip={}, geocode={}" , name, age, city, zip, geocode) ;
115+ let city = addr_obj
116+ . get ( "city" )
117+ . unwrap ( )
118+ . as_string ( )
119+ . unwrap ( )
120+ . to_string ( ) ;
121+ let zip = addr_obj
122+ . get ( "zip" )
123+ . unwrap ( )
124+ . as_string ( )
125+ . unwrap ( )
126+ . to_string ( ) ;
127+ let geocode = addr_obj
128+ . get ( "temp_geocode" )
129+ . map ( |v| {
130+ format ! (
131+ "Some(ShortString(ShortString(\" {}\" )))" ,
132+ v. as_string( ) . unwrap( )
133+ )
134+ } )
135+ . unwrap_or ( "None" . to_string ( ) ) ;
136+ println ! (
137+ " {}: age={}, city={}, zip={}, geocode={}" ,
138+ name, age, city, zip, geocode
139+ ) ;
105140 }
106141 }
107142 }
108143 }
109-
110- }
144+ }
0 commit comments