@@ -124,7 +124,13 @@ def _is_query_supported_rec(query: query.Query):
124
124
and query ._left_feature_group .storage_connector .type
125
125
in ArrowFlightClient .SUPPORTED_EXTERNAL_CONNECTORS
126
126
)
127
- supported = hudi_no_time_travel or supported_connector
127
+ delta_s3 = (
128
+ isinstance (query ._left_feature_group , feature_group .FeatureGroup )
129
+ and query ._left_feature_group .time_travel_format == "DELTA"
130
+ and query ._left_feature_group .storage_connector
131
+ and query ._left_feature_group .storage_connector .type == StorageConnector .S3
132
+ )
133
+ supported = hudi_no_time_travel or supported_connector or delta_s3
128
134
for j in query ._joins :
129
135
supported &= _is_query_supported_rec (j ._query )
130
136
return supported
@@ -549,6 +555,7 @@ def enabled_on_cluster(self) -> bool:
549
555
def _serialize_featuregroup_connector (fg , query , on_demand_fg_aliases ):
550
556
connector = {}
551
557
if isinstance (fg , feature_group .ExternalFeatureGroup ):
558
+ connector ["time_travel_type" ] = None
552
559
connector ["type" ] = fg .storage_connector .type
553
560
connector ["options" ] = fg .storage_connector .connector_options ()
554
561
connector ["query" ] = fg .query [:- 1 ] if fg .query .endswith (";" ) else fg .query
@@ -566,8 +573,25 @@ def _serialize_featuregroup_connector(fg, query, on_demand_fg_aliases):
566
573
connector ["filters" ] = _serialize_filter_expression (
567
574
join_obj ._query ._filter , join_obj ._query , True
568
575
)
576
+ elif fg .time_travel_format == "DELTA" :
577
+ connector ["time_travel_type" ] = "delta"
578
+ connector ["type" ] = fg .storage_connector .type
579
+ connector ["options" ] = fg .storage_connector .connector_options ()
580
+ if fg .storage_connector .type == StorageConnector .S3 :
581
+ connector ["options" ]["path" ] = fg .location
582
+ connector ["query" ] = ""
583
+ if query ._left_feature_group == fg :
584
+ connector ["filters" ] = _serialize_filter_expression (
585
+ query ._filter , query , True
586
+ )
587
+ else :
588
+ for join_obj in query ._joins :
589
+ if join_obj ._query ._left_feature_group == fg :
590
+ connector ["filters" ] = _serialize_filter_expression (
591
+ join_obj ._query ._filter , join_obj ._query , True
592
+ )
569
593
else :
570
- connector ["type " ] = "hudi"
594
+ connector ["time_travel_type " ] = "hudi"
571
595
return connector
572
596
573
597
0 commit comments