

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 冰山元数据管理
<a name="feature-store-iceberg-metadata-management"></a>

当您创建采用 Iceberg 表格式的功能组时，Amazon SageMaker Feature Store 会使用默认配置值代表您创建和管理底层 Iceberg 表。您可以在创建要素组时配置 Iceberg 表属性、更新现有要素组的属性以及查看当前在表上设置的属性。这些设置使您可以控制配置参数，例如快照保留、元数据文件管理和写入行为，以管理离线存储表的整体大小和性能。

只有一部分 Iceberg 表属性经过了与功能商店的兼容性验证。在此支持的集合之外配置属性并不能保证行为正确。有关支持的属性的完整列表，请参阅[允许的 Iceberg 房产](#feature-store-iceberg-allowed-properties)。

**先决条件：**您的功能组必须有使用 Iceberg 表格式的离线商店。

**重要**  
如果更改了不允许的 Iceberg 属性，Feature Store 将无法保证持续的兼容性，并可能导致无法写入离线商店。

## IcebergProperties 键入
<a name="feature-store-iceberg-properties-type"></a>

该`IcebergProperties`类型为 Iceberg 属性配置提供了经过验证的封装器，确保所有密钥都属于允许的集合，并防止重复输入。

```
class IcebergProperties(Base):
    """Configuration for Iceberg table properties in a Feature Group offline store."""
    properties: Optional[Dict[str, str]] = None
```

### 验证属性
<a name="feature-store-iceberg-validating-properties"></a>

传递给创建或更新函数时，无效和重复的密钥会导致错误。您可以选择使用`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 属性的要素组
<a name="feature-store-iceberg-create"></a>

该`FeatureGroupManager.create`函数接受类型为的`iceberg_properties`参数`IcebergProperties`。它会创建一个要素组并等待创建完成，然后再更新底层 Amazon 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 属性
<a name="feature-store-iceberg-update"></a>

该`update`函数接受类型为的`iceberg_properties`参数`IcebergProperties`。它获取已创建的功能组，检索离线商店 Amazon 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 属性
<a name="feature-store-iceberg-get"></a>

该`FeatureGroupManager.get`函数接受一个`include_iceberg_properties`参数。设置为时`True`，它会检索已手动设置且属于允许列表一部分的 Iceberg 属性，并将它们添加到返回对象的`iceberg_properties`字段中。

这仅返回允许列表中的设置属性。要获取所有 Amazon Glue 表格属性，请直接使用 Amazon 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"}
```

## 所需的权限
<a name="feature-store-iceberg-permissions"></a>

确保[AmazonSageMakerFeatureStoreAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonSageMakerFeatureStoreAccess.html)和[AmazonSageMakerFullAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html)托管策略都关联到您正在使用的 IAM 角色。根据您的访问模式管理您的策略。

## 允许的 Iceberg 房产
<a name="feature-store-iceberg-allowed-properties"></a>

下表列出了经过验证可与功能存储一起使用的冰山表属性。有关这些属性的更多信息，请参阅 Apache Iceberg 文档中的[表配置](https://iceberg.apache.org/docs/latest/configuration/)。


**允许的 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) | 打开文件的估计成本，用作合并拆分时的最小权重。 | 