88
99import pandas
1010from great_expectations .core import ExpectationSuite
11+
12+ from ads import deprecated
1113from ads .common import utils
1214from ads .common .oci_mixin import OCIModelMixin
1315from ads .feature_store .common .enums import (
1416 ExecutionEngine ,
1517 ExpectationType ,
1618 EntityType ,
1719)
20+ from ads .feature_store .common .exceptions import NotMaterializedError
1821from ads .feature_store .common .utils .utility import (
1922 get_metastore_id ,
2023 validate_delta_format_parameters ,
@@ -475,6 +478,20 @@ def with_statistics_config(
475478 self .CONST_STATISTICS_CONFIG , statistics_config_in .to_dict ()
476479 )
477480
481+ def target_delta_table (self ):
482+ """
483+ Returns the fully-qualified name of the target table for storing delta data.
484+
485+ The name of the target table is constructed by concatenating the entity ID
486+ and the name of the table, separated by a dot. The resulting string has the
487+ format 'entity_id.table_name'.
488+
489+ Returns:
490+ str: The fully-qualified name of the target delta table.
491+ """
492+ target_table = f"{ self .entity_id } .{ self .name } "
493+ return target_table
494+
478495 @property
479496 def model_details (self ) -> "ModelDetails" :
480497 return self .get_spec (self .CONST_MODEL_DETAILS )
@@ -560,7 +577,9 @@ def add_models(self, model_details: ModelDetails) -> "Dataset":
560577 f"Dataset update Failed with : { type (ex )} with error message: { ex } "
561578 )
562579 if existing_model_details :
563- self .with_model_details (ModelDetails ().with_items (existing_model_details ["items" ]))
580+ self .with_model_details (
581+ ModelDetails ().with_items (existing_model_details ["items" ])
582+ )
564583 else :
565584 self .with_model_details (ModelDetails ().with_items ([]))
566585 return self
@@ -773,6 +792,7 @@ def materialise(
773792
774793 dataset_execution_strategy .ingest_dataset (self , dataset_job )
775794
795+ @deprecated (details = "preview functionality is deprecated. Please use as_of." )
776796 def preview (
777797 self ,
778798 row_count : int = 10 ,
@@ -797,6 +817,8 @@ def preview(
797817 spark dataframe
798818 The preview result in spark dataframe
799819 """
820+ self .check_resource_materialization ()
821+
800822 validate_delta_format_parameters (timestamp , version_number )
801823 target_table = f"{ self .entity_id } .{ self .name } "
802824
@@ -806,6 +828,43 @@ def preview(
806828
807829 return self .spark_engine .sql (sql_query )
808830
831+ def check_resource_materialization (self ):
832+ """Checks whether the target Delta table for this resource has been materialized in Spark.
833+ If the target Delta table doesn't exist, raises a NotMaterializedError with the type and name of this resource.
834+ """
835+ if not self .spark_engine .is_delta_table_exists (self .target_delta_table ()):
836+ raise NotMaterializedError (self .type , self .name )
837+
838+ def as_of (
839+ self ,
840+ version_number : int = None ,
841+ commit_timestamp : datetime = None ,
842+ ):
843+ """preview the feature definition and return the response in dataframe.
844+
845+ Parameters
846+ ----------
847+ commit_timestamp: datetime
848+ commit date time to preview in format yyyy-MM-dd or yyyy-MM-dd HH:mm:ss
849+ commit date time is maintained for every ingestion commit using delta lake
850+ version_number: int
851+ commit version number for the preview. Version numbers are automatically versioned for every ingestion
852+ commit using delta lake
853+
854+ Returns
855+ -------
856+ spark dataframe
857+ The preview result in spark dataframe
858+ """
859+ self .check_resource_materialization ()
860+
861+ validate_delta_format_parameters (commit_timestamp , version_number )
862+ target_table = self .target_delta_table ()
863+
864+ return self .spark_engine .get_time_version_data (
865+ target_table , version_number , commit_timestamp
866+ )
867+
809868 def profile (self ):
810869 """Get the dataset profile information and return the response in dataframe.
811870
@@ -814,6 +873,8 @@ def profile(self):
814873 spark dataframe
815874 The profile result in spark dataframe
816875 """
876+ self .check_resource_materialization ()
877+
817878 target_table = f"{ self .entity_id } .{ self .name } "
818879 sql_query = f"DESCRIBE DETAIL { target_table } "
819880
@@ -835,6 +896,8 @@ def restore(self, version_number: int = None, timestamp: datetime = None):
835896 spark dataframe
836897 The restore output as spark dataframe
837898 """
899+ self .check_resource_materialization ()
900+
838901 validate_delta_format_parameters (timestamp , version_number , True )
839902 target_table = f"{ self .entity_id } .{ self .name } "
840903 if version_number is not None :
0 commit comments