@@ -203,6 +203,7 @@ def test_register_hudi_temporary_table(self, mocker):
203
203
# Arrange
204
204
mock_hudi_engine = mocker .patch ("hsfs.core.hudi_engine.HudiEngine" )
205
205
mocker .patch ("hsfs.feature_group.FeatureGroup.from_response_json" )
206
+ mock_reconcile_schema = mocker .patch ("hsfs.engine.spark.Engine.reconcile_schema" )
206
207
207
208
spark_engine = spark .Engine ()
208
209
@@ -220,6 +221,31 @@ def test_register_hudi_temporary_table(self, mocker):
220
221
221
222
# Assert
222
223
assert mock_hudi_engine .return_value .register_temporary_table .call_count == 1
224
+ assert mock_reconcile_schema .call_count == 1
225
+
226
+ def test_register_delta_temporary_table (self , mocker ):
227
+ # Arrange
228
+ mock_delta_engine = mocker .patch ("hsfs.core.delta_engine.DeltaEngine" )
229
+ mocker .patch ("hsfs.feature_group.FeatureGroup.from_response_json" )
230
+ mock_reconcile_schema = mocker .patch ("hsfs.engine.spark.Engine.reconcile_schema" )
231
+
232
+ spark_engine = spark .Engine ()
233
+
234
+ hudi_fg_alias = hudi_feature_group_alias .HudiFeatureGroupAlias (
235
+ feature_group = None , alias = None
236
+ )
237
+
238
+ # Act
239
+ spark_engine .register_delta_temporary_table (
240
+ delta_fg_alias = hudi_fg_alias ,
241
+ feature_store_id = None ,
242
+ feature_store_name = None ,
243
+ read_options = None ,
244
+ )
245
+
246
+ # Assert
247
+ assert mock_delta_engine .return_value .register_temporary_table .call_count == 1
248
+ assert mock_reconcile_schema .call_count == 1
223
249
224
250
def test_return_dataframe_type_default (self , mocker ):
225
251
# Arrange
@@ -4540,7 +4566,7 @@ def test_is_spark_dataframe_spark_dataframe(self):
4540
4566
# Assert
4541
4567
assert result is True
4542
4568
4543
- def test_save_empty_dataframe (self , mocker ):
4569
+ def test_update_table_schema_hudi (self , mocker ):
4544
4570
# Arrange
4545
4571
mock_spark_engine_save_dataframe = mocker .patch (
4546
4572
"hsfs.engine.spark.Engine.save_dataframe"
@@ -4560,15 +4586,42 @@ def test_save_empty_dataframe(self, mocker):
4560
4586
partition_key = [],
4561
4587
id = 10 ,
4562
4588
featurestore_name = "test_featurestore" ,
4589
+ time_travel_format = "HUDI" ,
4563
4590
)
4564
4591
4565
4592
# Act
4566
- spark_engine .save_empty_dataframe (feature_group = fg )
4593
+ spark_engine .update_table_schema (feature_group = fg )
4567
4594
4568
4595
# Assert
4569
4596
assert mock_spark_engine_save_dataframe .call_count == 1
4570
4597
assert mock_spark_read .format .call_count == 1
4571
4598
4599
+ def test_update_table_schema_delta (self , mocker ):
4600
+ # Arrange
4601
+ mock_spark_read = mocker .patch ("pyspark.sql.SparkSession.read" )
4602
+ mock_format = mocker .Mock ()
4603
+ mock_spark_read .format .return_value = mock_format
4604
+
4605
+ # Arrange
4606
+ spark_engine = spark .Engine ()
4607
+
4608
+ fg = feature_group .FeatureGroup (
4609
+ name = "test" ,
4610
+ version = 1 ,
4611
+ featurestore_id = 99 ,
4612
+ primary_key = [],
4613
+ partition_key = [],
4614
+ id = 10 ,
4615
+ featurestore_name = "test_featurestore" ,
4616
+ time_travel_format = "DELTA" ,
4617
+ )
4618
+
4619
+ # Act
4620
+ spark_engine .update_table_schema (feature_group = fg )
4621
+
4622
+ # Assert
4623
+ assert mock_spark_read .format .call_count == 1
4624
+
4572
4625
def test_apply_transformation_function_single_output_udf_default_mode (self , mocker ):
4573
4626
# Arrange
4574
4627
mocker .patch ("hopsworks_common.client.get_instance" )
0 commit comments