@@ -4,6 +4,7 @@ use deltalake::datafusion::prelude::SessionContext;
4
4
use deltalake:: operations:: merge:: MergeBuilder ;
5
5
use deltalake:: { DeltaResult , DeltaTable , datafusion:: prelude:: Expr } ;
6
6
use etl:: types:: { TableRow as PgTableRow , TableSchema as PgTableSchema } ;
7
+ use tracing:: { instrument, trace} ;
7
8
8
9
use crate :: arrow:: rows_to_record_batch;
9
10
use crate :: deltalake:: config:: DeltaTableConfig ;
@@ -14,13 +15,18 @@ pub(crate) fn source_qualified_column_expr(column_name: &str, source_alias: &str
14
15
Expr :: Column ( Column :: new ( Some ( source_alias) , column_name) )
15
16
}
16
17
18
+ #[ instrument(
19
+ skip( table, config, table_schema, upsert_rows, delete_predicate) ,
20
+ fields( upsert_count = upsert_rows. len( ) , has_delete = delete_predicate. is_some( ) )
21
+ ) ]
17
22
pub async fn merge_to_table (
18
23
table : & mut DeltaTable ,
19
24
config : & DeltaTableConfig ,
20
25
table_schema : & PgTableSchema ,
21
26
upsert_rows : & [ PgTableRow ] ,
22
27
delete_predicate : Option < Expr > ,
23
28
) -> DeltaResult < ( ) > {
29
+ trace ! ( "Building Arrow schema and source batch for merge" ) ;
24
30
let arrow_schema = postgres_to_arrow_schema ( table_schema) ?;
25
31
let rows = rows_to_record_batch ( upsert_rows, arrow_schema) ?;
26
32
@@ -38,6 +44,7 @@ pub async fn merge_to_table(
38
44
let qualified_primary_keys = qualify_primary_keys ( primary_keys, "source" , "target" )
39
45
. ok_or ( DeltaTableError :: generic ( "Failed to qualify primary keys" ) ) ?;
40
46
47
+ trace ! ( "Creating merge builder" ) ;
41
48
let merge_builder = MergeBuilder :: new (
42
49
// TODO(abhi): Is there a way to do this while avoiding the clone/general hackiness?
43
50
( * table) . log_store ( ) ,
@@ -79,7 +86,9 @@ pub async fn merge_to_table(
79
86
. when_not_matched_by_source_delete ( |delete| delete. predicate ( delete_predicate) ) ?;
80
87
}
81
88
// TODO(abhi): Do something with the metrics
89
+ trace ! ( "Executing merge operation" ) ;
82
90
let ( merged_table, _metrics) = merge_builder. await ?;
91
+ trace ! ( "Merge operation completed" ) ;
83
92
* table = merged_table;
84
93
Ok ( ( ) )
85
94
}
0 commit comments