1
1
use arrow:: array:: Array ;
2
- use parquet_variant_compute:: VariantArrayBuilder ;
3
2
use parquet_variant:: VariantBuilder ;
3
+ use parquet_variant_compute:: VariantArrayBuilder ;
4
4
5
5
fn main ( ) {
6
6
// Create some sample data with fields to remove
7
7
let mut builder = VariantArrayBuilder :: new ( 2 ) ;
8
-
8
+
9
9
// Row 1: User with temporary data
10
10
{
11
11
let mut variant_builder = VariantBuilder :: new ( ) ;
@@ -15,21 +15,21 @@ fn main() {
15
15
obj. insert ( "age" , 30i32 ) ;
16
16
obj. insert ( "temp_session" , "abc123" ) ;
17
17
obj. insert ( "debug_info" , "temporary debug data" ) ;
18
-
18
+
19
19
{
20
20
let mut address = obj. new_object ( "address" ) ;
21
21
address. insert ( "city" , "New York" ) ;
22
22
address. insert ( "zip" , "10001" ) ;
23
23
address. insert ( "temp_geocode" , "40.7128,-74.0060" ) ;
24
24
let _ = address. finish ( ) ;
25
25
}
26
-
26
+
27
27
let _ = obj. finish ( ) ;
28
28
}
29
29
let ( metadata, value) = variant_builder. finish ( ) ;
30
30
builder. append_variant_buffers ( & metadata, & value) ;
31
31
}
32
-
32
+
33
33
// Row 2: Another user with temporary data
34
34
{
35
35
let mut variant_builder = VariantBuilder :: new ( ) ;
@@ -39,72 +39,106 @@ fn main() {
39
39
obj. insert ( "age" , 25i32 ) ;
40
40
obj. insert ( "temp_session" , "def456" ) ;
41
41
obj. insert ( "debug_info" , "more temporary data" ) ;
42
-
42
+
43
43
{
44
44
let mut address = obj. new_object ( "address" ) ;
45
45
address. insert ( "city" , "San Francisco" ) ;
46
46
address. insert ( "zip" , "94102" ) ;
47
47
address. insert ( "temp_geocode" , "37.7749,-122.4194" ) ;
48
48
let _ = address. finish ( ) ;
49
49
}
50
-
50
+
51
51
let _ = obj. finish ( ) ;
52
52
}
53
53
let ( metadata, value) = variant_builder. finish ( ) ;
54
54
builder. append_variant_buffers ( & metadata, & value) ;
55
55
}
56
-
56
+
57
57
let array = builder. finish ( ) ;
58
-
58
+
59
59
println ! ( "=== Field Removal Examples ===" ) ;
60
-
60
+
61
61
// Show original data
62
62
println ! ( "Original data:" ) ;
63
63
for i in 0 ..array. len ( ) {
64
64
let variant = array. value ( i) ;
65
65
if let Some ( obj) = variant. as_object ( ) {
66
66
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 ( ) ) ;
69
75
println ! ( " {}: session={}, debug={}" , name, session, debug) ;
70
76
}
71
77
}
72
-
78
+
73
79
// Remove temporary session field
74
80
let cleaned_array = array. with_field_removed ( "temp_session" ) . unwrap ( ) ;
75
-
81
+
76
82
println ! ( "\n Removing temporary session fields..." ) ;
77
83
println ! ( "After removing temp_session:" ) ;
78
84
for i in 0 ..cleaned_array. len ( ) {
79
85
let variant = cleaned_array. value ( i) ;
80
86
if let Some ( obj) = variant. as_object ( ) {
81
87
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 ( ) ) ;
84
96
println ! ( " {}: session={}, debug={}" , name, session, debug) ;
85
97
}
86
98
}
87
-
99
+
88
100
// 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
+
91
105
println ! ( "\n Removing multiple temporary fields..." ) ;
92
106
println ! ( "Final clean data:" ) ;
93
107
for i in 0 ..final_array. len ( ) {
94
108
let variant = final_array. value ( i) ;
95
109
if let Some ( obj) = variant. as_object ( ) {
96
110
let name = obj. get ( "name" ) . unwrap ( ) . as_string ( ) . unwrap ( ) . to_string ( ) ;
97
111
let age = obj. get ( "age" ) . unwrap ( ) . as_int32 ( ) . unwrap ( ) ;
98
-
112
+
99
113
if let Some ( address) = obj. get ( "address" ) {
100
114
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
+ ) ;
105
140
}
106
141
}
107
142
}
108
143
}
109
-
110
- }
144
+ }
0 commit comments