本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
冰山元数据管理
当您创建采用 Iceberg 表格式的功能组时,Amazon SageMaker Feature Store 会使用默认配置值代表您创建和管理底层 Iceberg 表。您可以在创建要素组时配置 Iceberg 表属性、更新现有要素组的属性以及查看当前在表上设置的属性。这些设置使您可以控制配置参数,例如快照保留、元数据文件管理和写入行为,以管理离线存储表的整体大小和性能。
只有一部分 Iceberg 表属性经过了与功能商店的兼容性验证。在此支持的集合之外配置属性并不能保证行为正确。有关支持的属性的完整列表,请参阅允许的 Iceberg 房产。
先决条件:您的功能组必须有使用 Iceberg 表格式的离线商店。
重要
如果更改了不允许的 Iceberg 属性,Feature Store 将无法保证持续的兼容性,并可能导致无法写入离线商店。
IcebergProperties 键入
该IcebergProperties类型为 Iceberg 属性配置提供了经过验证的封装器,确保所有密钥都属于允许的集合,并防止重复输入。
class IcebergProperties(Base): """Configuration for Iceberg table properties in a Feature Group offline store.""" properties: Optional[Dict[str, str]] = None
验证属性
传递给创建或更新函数时,无效和重复的密钥会导致错误。您可以选择使用validate_property_keys()方法验证密钥。这在向现有IcebergProperties对象添加或移除属性时很有用。
iceberg_properties = IcebergProperties( # Validates on creation properties={ "write.target-file-size-bytes": "268435456", "write.delete.mode": "merge-on-read", } ) # Add non-allowed property iceberg_properties.properties.update({"write.delete.isolation-level": "Snapshot"}) # Validate again — throws error because of non-allowed property iceberg_properties.validate_property_keys()
创建具有 Iceberg 属性的要素组
该FeatureGroupManager.create函数接受类型为的iceberg_properties参数IcebergProperties。它会创建一个要素组并等待创建完成,然后再更新底层 AWS Glue 表上的 Iceberg 属性。
或者,您可以创建一个FeatureGroup,调用create,然后将要素组对象传递给FeatureGroupManager类,然后调用update以避免在功能组完成创建时出现阻塞。
fg = FeatureGroupManager.create( # ...other parameters... offline_store_config=OfflineStoreConfig( s3_storage_config=S3StorageConfig(s3_uri="s3://my-bucket/features/"), table_format="Iceberg", # Must use Iceberg table format ), iceberg_properties=IcebergProperties( properties={ "write.target-file-size-bytes": "536870912", "history.expire.min-snapshots-to-keep": "3", } ), )
更新现有要素组上的 Iceberg 属性
该update函数接受类型为的iceberg_properties参数IcebergProperties。它获取已创建的功能组,检索离线商店 AWS Glue Data Catalog 的功能组,并设置指定的 Iceberg 属性。
fg = FeatureGroupManager.get(feature_group_name="my-feature-group") fg.update( iceberg_properties=IcebergProperties( properties={ "write.target-file-size-bytes": "268435456", "write.delete.mode": "merge-on-read", } ), )
查看要素组上的 Iceberg 属性
该FeatureGroupManager.get函数接受一个include_iceberg_properties参数。设置为时True,它会检索已手动设置且属于允许列表一部分的 Iceberg 属性,并将它们添加到返回对象的iceberg_properties字段中。
这仅返回允许列表中的设置属性。要获取所有 AWS Glue 表格属性,请直接使用 AWS Glue API。如果未出现允许的 Iceberg 属性,则表示该属性尚未明确设置并使用其默认值。
fg = FeatureGroupManager.get( feature_group_name="my-feature-group", include_iceberg_properties=True, ) print(fg.iceberg_properties.properties) # e.g. {"write.target-file-size-bytes": "536870912"}
所需的权限
确保AmazonSageMakerFeatureStoreAccess和AmazonSageMakerFullAccess托管策略都关联到您正在使用的 IAM 角色。根据您的访问模式管理您的策略。
允许的 Iceberg 房产
下表列出了经过验证可与功能存储一起使用的冰山表属性。有关这些属性的更多信息,请参阅 Apache Iceberg 文档中的表配置
| 属性 | 默认 值 | 说明 |
|---|---|---|
write.metadata.delete-after-commit.enabled |
false |
控制是否在每次提交表后删除最旧的跟踪版本元数据文件。 |
write.metadata.previous-versions-max |
100 |
要跟踪的先前版本元数据文件的最大数量。 |
history.expire.max-snapshot-age-ms |
432000000(5 天) |
快照过期时,默认保留在表及其所有分支上的快照的最大期限。 |
history.expire.min-snapshots-to-keep |
1 |
快照过期时要保留在表及其所有分支上的默认最小快照数。 |
history.expire.max-ref-age-ms |
Long.MAX_VALUE(永远) |
对于除main分支以外的快照引用,默认快照过期时要保留的最大快照引用期限。分main支永不过期。 |
write.target-file-size-bytes |
536870912(512 MB) |
控制为目标生成的文件的大小大约这么多字节。 |
write.delete.target-file-size-bytes |
67108864(64 MB) |
控制为目标字节而生成的删除文件的大小。 |
write.delete.mode |
copy-on-write |
用于删除命令的模式:copy-on-write或merge-on-read(v2 及更高版本)。 |
write.update.mode |
copy-on-write |
用于更新命令的模式:copy-on-write或merge-on-read(v2 及更高版本)。 |
write.delete.granularity |
partition |
控制生成的删除文件的粒度:partition或file。 |
write.parquet.row-group-size-bytes |
134217728(128 MB) |
镶木地板行组大小。 |
read.split.target-size |
134217728(128 MB) |
合并数据输入拆分时的目标大小。 |
read.split.metadata-target-size |
33554432(32 MB) |
合并元数据输入拆分时的目标大小。 |
read.split.open-file-cost |
4194304(4 MB) |
打开文件的估计成本,用作合并拆分时的最小权重。 |