@@ -29,7 +29,7 @@ use arrow::array::{ArrayRef, BooleanBuilder, Int32Builder, Int64Builder, StringB
2929use ordered_channel:: bounded;
3030use parquet:: arrow:: ArrowWriter ;
3131use parquet:: basic:: Compression ;
32- use parquet:: file:: properties:: WriterProperties ;
32+ use parquet:: file:: properties:: { WriterProperties , WriterVersion } ;
3333use parquet:: format;
3434use rayon:: iter:: IndexedParallelIterator ;
3535use rayon:: prelude:: * ;
@@ -78,6 +78,7 @@ use std::time::{Duration, Instant};
7878use thread:: spawn;
7979use tokio:: task:: JoinHandle ;
8080use Compression :: SNAPPY ;
81+ use deltalake_core:: writer:: WriteMode ;
8182//use deltalake::writer::test_utils::create_initialized_table;
8283use tokio:: runtime:: Builder ;
8384use tokio:: time:: sleep;
@@ -122,12 +123,13 @@ impl DeltaOut {
122123 let mut table = match maybe_table {
123124 Ok ( table) => table,
124125 Err ( DeltaTableError :: NotATable ( _) ) => {
125- info ! ( "It doesn't look like our delta table has been created" ) ;
126+ let fxschema_to_delta =schema. into_delta_columns ( ) ;
127+ info ! ( "It doesn't look like our delta table has been created\n {:?}" , fxschema_to_delta) ;
126128 DeltaOps :: try_from_uri ( table_path)
127129 . await
128130 . unwrap ( )
129131 . create ( )
130- . with_columns ( schema . into_delta_columns ( ) )
132+ . with_columns ( fxschema_to_delta )
131133 . await
132134 . unwrap ( )
133135 }
@@ -144,32 +146,38 @@ impl DeltaOut {
144146 ) -> ( Result < Stats > ) {
145147 let mut table = Self :: deltasetup ( fixed_schema, outfile) . await . unwrap ( ) ;
146148
147- let writer_properties = WriterProperties :: builder ( )
149+ let writer_properties = WriterProperties :: builder ( ) . set_writer_version ( WriterVersion :: PARQUET_2_0 )
148150 . set_compression ( Compression :: ZSTD ( ZstdLevel :: try_new ( 3 ) . unwrap ( ) ) )
149151 . build ( ) ;
150152
153+
151154 let mut writer = RecordBatchWriter :: for_table ( & table)
152155 . expect ( "Failed to make RecordBatchWriter" )
153156 . with_writer_properties ( writer_properties) ;
154157
158+
159+
155160 let metadata = table
156161 . metadata ( )
157162 . expect ( "Failed to get metadata for the table" ) ;
158163 let arrow_schema = <deltalake:: arrow:: datatypes:: Schema as TryFrom < & StructType > >:: try_from (
159164 & metadata. schema ( ) . expect ( "failed to get schema" ) ,
160165 )
161166 . expect ( "Failed to convert to arrow schema" ) ;
162- let arrow_schema_ref = Arc :: new ( arrow_schema) ;
163167
164168 ' outer: loop {
165169 let mut message = receiver. recv ( ) ;
166170
167171 match message {
168172 Ok ( rb) => {
169- if ( rb. num_rows ( ) == 1 ) {
173+ if ( rb. num_rows ( ) == 0 ) {
170174 break ' outer;
171175 }
172- writer. write ( rb) . await . expect ( "Error Writing batch" ) ;
176+ let nrb=rb. with_schema ( Arc :: new ( arrow_schema. clone ( ) ) ) . unwrap ( ) ;
177+ info ! ( "nrb rows={} " , nrb. num_rows( ) ) ;
178+ // writer.write(nrb).await.expect("Error Writing batch");
179+ writer. write_with_mode ( nrb, WriteMode :: MergeSchema ) ;
180+
173181 }
174182 Err ( e) => {
175183 info ! ( "got RecvError in channel , break to outer" ) ;
0 commit comments