Skip to content

Commit 1c7d51a

Browse files
committed
feat: feature_processor v3
1 parent 44764ae commit 1c7d51a

64 files changed

Lines changed: 14744 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

sagemaker-core/src/sagemaker/core/helper/session_helper.py

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@
8585
TAGS,
8686
SESSION_DEFAULT_S3_BUCKET_PATH,
8787
SESSION_DEFAULT_S3_OBJECT_KEY_PREFIX_PATH,
88+
FEATURE_GROUP,
89+
FEATURE_GROUP_ROLE_ARN_PATH,
90+
FEATURE_GROUP_ONLINE_STORE_CONFIG_PATH,
91+
FEATURE_GROUP_OFFLINE_STORE_CONFIG_PATH,
8892
)
8993

9094
# Setting LOGGER for backward compatibility, in case users import it...
@@ -1607,6 +1611,222 @@ def delete_endpoint_config(self, endpoint_config_name):
16071611
logger.info("Deleting endpoint configuration with name: %s", endpoint_config_name)
16081612
self.sagemaker_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
16091613

1614+
def delete_feature_group(self, feature_group_name):
1615+
"""Delete an Amazon SageMaker Feature Group.
1616+
1617+
Args:
1618+
feature_group_name (str): Name of the Amazon SageMaker Feature Group to delete.
1619+
"""
1620+
logger.info("Deleting feature group with name: %s", feature_group_name)
1621+
self.sagemaker_client.delete_feature_group(FeatureGroupName=feature_group_name)
1622+
1623+
def create_feature_group(
1624+
self,
1625+
feature_group_name,
1626+
record_identifier_name,
1627+
event_time_feature_name,
1628+
feature_definitions,
1629+
role_arn=None,
1630+
online_store_config=None,
1631+
offline_store_config=None,
1632+
throughput_config=None,
1633+
description=None,
1634+
tags=None,
1635+
):
1636+
"""Create an Amazon SageMaker Feature Group.
1637+
1638+
Args:
1639+
feature_group_name (str): Name of the Feature Group.
1640+
record_identifier_name (str): Name of the record identifier feature.
1641+
event_time_feature_name (str): Name of the event time feature.
1642+
feature_definitions (list): List of feature definitions.
1643+
role_arn (str): ARN of the role used to execute the API (default: None).
1644+
Resolved from SageMaker Config if not provided.
1645+
online_store_config (dict): Online store configuration (default: None).
1646+
offline_store_config (dict): Offline store configuration (default: None).
1647+
throughput_config (dict): Throughput configuration (default: None).
1648+
description (str): Description of the Feature Group (default: None).
1649+
tags (Optional[Tags]): Tags for labeling the Feature Group (default: None).
1650+
1651+
Returns:
1652+
dict: Response from the CreateFeatureGroup API.
1653+
"""
1654+
tags = format_tags(tags)
1655+
tags = _append_project_tags(tags)
1656+
tags = self._append_sagemaker_config_tags(
1657+
tags, "{}.{}.{}".format(SAGEMAKER, FEATURE_GROUP, TAGS)
1658+
)
1659+
1660+
role_arn = resolve_value_from_config(
1661+
role_arn, FEATURE_GROUP_ROLE_ARN_PATH, sagemaker_session=self
1662+
)
1663+
1664+
inferred_online_store_config = update_nested_dictionary_with_values_from_config(
1665+
online_store_config,
1666+
FEATURE_GROUP_ONLINE_STORE_CONFIG_PATH,
1667+
sagemaker_session=self,
1668+
)
1669+
if inferred_online_store_config is not None:
1670+
# OnlineStore should be handled differently because if you set KmsKeyId, then you
1671+
# need to set EnableOnlineStore key as well
1672+
inferred_online_store_config["EnableOnlineStore"] = True
1673+
1674+
inferred_offline_store_config = update_nested_dictionary_with_values_from_config(
1675+
offline_store_config,
1676+
FEATURE_GROUP_OFFLINE_STORE_CONFIG_PATH,
1677+
sagemaker_session=self,
1678+
)
1679+
1680+
kwargs = dict(
1681+
FeatureGroupName=feature_group_name,
1682+
RecordIdentifierFeatureName=record_identifier_name,
1683+
EventTimeFeatureName=event_time_feature_name,
1684+
FeatureDefinitions=feature_definitions,
1685+
RoleArn=role_arn,
1686+
)
1687+
update_args(
1688+
kwargs,
1689+
OnlineStoreConfig=inferred_online_store_config,
1690+
OfflineStoreConfig=inferred_offline_store_config,
1691+
ThroughputConfig=throughput_config,
1692+
Description=description,
1693+
Tags=tags,
1694+
)
1695+
1696+
logger.info("Creating feature group with name: %s", feature_group_name)
1697+
return self.sagemaker_client.create_feature_group(**kwargs)
1698+
1699+
def describe_feature_group(self, feature_group_name, next_token=None):
1700+
"""Describe an Amazon SageMaker Feature Group.
1701+
1702+
Args:
1703+
feature_group_name (str): Name of the Amazon SageMaker Feature Group to describe.
1704+
next_token (str): A token for paginated results (default: None).
1705+
1706+
Returns:
1707+
dict: Response from the DescribeFeatureGroup API.
1708+
"""
1709+
args = {"FeatureGroupName": feature_group_name}
1710+
update_args(args, NextToken=next_token)
1711+
return self.sagemaker_client.describe_feature_group(**args)
1712+
1713+
def update_feature_group(
1714+
self,
1715+
feature_group_name,
1716+
feature_additions=None,
1717+
online_store_config=None,
1718+
throughput_config=None,
1719+
):
1720+
"""Update an Amazon SageMaker Feature Group.
1721+
1722+
Args:
1723+
feature_group_name (str): Name of the Amazon SageMaker Feature Group to update.
1724+
feature_additions (list): List of feature definitions to add (default: None).
1725+
online_store_config (dict): Online store configuration updates (default: None).
1726+
throughput_config (dict): Throughput configuration updates (default: None).
1727+
1728+
Returns:
1729+
dict: Response from the UpdateFeatureGroup API.
1730+
"""
1731+
args = {"FeatureGroupName": feature_group_name}
1732+
update_args(
1733+
args,
1734+
FeatureAdditions=feature_additions,
1735+
OnlineStoreConfig=online_store_config,
1736+
ThroughputConfig=throughput_config,
1737+
)
1738+
return self.sagemaker_client.update_feature_group(**args)
1739+
1740+
def list_feature_groups(
1741+
self,
1742+
name_contains=None,
1743+
feature_group_status_equals=None,
1744+
offline_store_status_equals=None,
1745+
creation_time_after=None,
1746+
creation_time_before=None,
1747+
sort_order=None,
1748+
sort_by=None,
1749+
max_results=None,
1750+
next_token=None,
1751+
):
1752+
"""List Amazon SageMaker Feature Groups.
1753+
1754+
Args:
1755+
name_contains (str): Filter by name substring (default: None).
1756+
feature_group_status_equals (str): Filter by status (default: None).
1757+
offline_store_status_equals (str): Filter by offline store status (default: None).
1758+
creation_time_after (datetime): Filter by creation time lower bound (default: None).
1759+
creation_time_before (datetime): Filter by creation time upper bound (default: None).
1760+
sort_order (str): Sort order, 'Ascending' or 'Descending' (default: None).
1761+
sort_by (str): Sort by field (default: None).
1762+
max_results (int): Maximum number of results (default: None).
1763+
next_token (str): Pagination token (default: None).
1764+
1765+
Returns:
1766+
dict: Response from the ListFeatureGroups API.
1767+
"""
1768+
args = {}
1769+
update_args(
1770+
args,
1771+
NameContains=name_contains,
1772+
FeatureGroupStatusEquals=feature_group_status_equals,
1773+
OfflineStoreStatusEquals=offline_store_status_equals,
1774+
CreationTimeAfter=creation_time_after,
1775+
CreationTimeBefore=creation_time_before,
1776+
SortOrder=sort_order,
1777+
SortBy=sort_by,
1778+
MaxResults=max_results,
1779+
NextToken=next_token,
1780+
)
1781+
return self.sagemaker_client.list_feature_groups(**args)
1782+
1783+
def update_feature_metadata(
1784+
self,
1785+
feature_group_name,
1786+
feature_name,
1787+
description=None,
1788+
parameter_additions=None,
1789+
parameter_removals=None,
1790+
):
1791+
"""Update metadata for a feature in an Amazon SageMaker Feature Group.
1792+
1793+
Args:
1794+
feature_group_name (str): Name of the Feature Group.
1795+
feature_name (str): Name of the feature to update metadata for.
1796+
description (str): Updated description for the feature (default: None).
1797+
parameter_additions (list): Parameters to add (default: None).
1798+
parameter_removals (list): Parameters to remove (default: None).
1799+
1800+
Returns:
1801+
dict: Response from the UpdateFeatureMetadata API.
1802+
"""
1803+
args = {
1804+
"FeatureGroupName": feature_group_name,
1805+
"FeatureName": feature_name,
1806+
}
1807+
update_args(
1808+
args,
1809+
Description=description,
1810+
ParameterAdditions=parameter_additions,
1811+
ParameterRemovals=parameter_removals,
1812+
)
1813+
return self.sagemaker_client.update_feature_metadata(**args)
1814+
1815+
def describe_feature_metadata(self, feature_group_name, feature_name):
1816+
"""Describe metadata for a feature in an Amazon SageMaker Feature Group.
1817+
1818+
Args:
1819+
feature_group_name (str): Name of the Feature Group.
1820+
feature_name (str): Name of the feature to describe metadata for.
1821+
1822+
Returns:
1823+
dict: Response from the DescribeFeatureMetadata API.
1824+
"""
1825+
return self.sagemaker_client.describe_feature_metadata(
1826+
FeatureGroupName=feature_group_name,
1827+
FeatureName=feature_name,
1828+
)
1829+
16101830
def wait_for_optimization_job(self, job, poll=5):
16111831
"""Wait for an Amazon SageMaker Optimization job to complete.
16121832

0 commit comments

Comments
 (0)