创建特征组

您可以创建特征组以注册包含特征数据的 BigQuery 表或视图。

对于与特征组关联的任何 BigQuery 表或视图,您需要确保:

  • 数据源的架构符合数据源准备准则

  • 该数据源至少包含一个包含 stringint 值的实体 ID 列。

创建特征组并关联 BigQuery 数据源后,您可以创建特征以与数据源中的列关联。创建特征组时,指定数据源是可选操作。但是,您需要在创建特征之前指定数据源。

使用特征组和特征注册数据源具有以下优势:

  • 您可以使用来自多个 BigQuery 数据源的特定特征列来定义用于在线传送的特征视图。

  • 您可以选择指定特征时间戳列,将数据格式化为时间序列。Vertex AI Feature Store 仅传送特征数据中的最新特征值,不包括历史值。

  • 在 Data Catalog 中搜索特征组资源时,您可以发现 BigQuery 源作为关联的特征数据源。

  • 您可以设置功能监控,以检索功能统计信息并检测功能偏移。

准备工作

向 Vertex AI 进行身份验证,除非您已完成此操作。

Select the tab for how you plan to use the samples on this page:

When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC

如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

    Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

通过 BigQuery 源创建特征组

使用以下示例可创建特征组并关联 BigQuery 数据源。

按照以下说明使用 Google Cloud 控制台创建特征组。

  1. 在 Google Cloud 控制台的“Vertex AI”部分,转到 Feature Store 页面。

    转到 Feature Store 页面

  2. 特征组部分中,点击创建以打开创建特征组页面上的基本信息窗格。

  3. 指定特征组名称

  4. 可选:若要添加标签,请点击添加标签,然后指定标签名称和值。您可以为一个特征组添加多个标签。

  5. BigQuery 路径字段中,点击浏览,以选择要与特征组关联的 BigQuery 源表或视图。

  6. 实体 ID 列列表中,选择 BigQuery 源表或视图中的实体 ID 列。

    请注意,如果 BigQuery 源表或视图包含一个名为 entity_id 的列,则此参数是可选的。在这种情况下,如果您未选择实体 ID 列,则该地图项组会将 entity_id 列用作默认实体 ID 列。

  7. 点击继续

  8. 注册窗格中,点击以下选项之一,以指示是否要向新特征组添加特征:

    • 包括 BigQuery 表中的所有列 - 在特征组中为 BigQuery 源表或视图中的所有列创建特征。

    • 手动输入特征 - 根据 BigQuery 来源中的特定列创建特征。对于每个特征,请输入特征名称,然后点击列表中相应的 BigQuery 源列名称。

      如需添加更多特征,请点击添加其他特征

    • 创建空特征组 - 创建特征组而不向其添加特征。

  9. 点击创建

如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python 版 Vertex AI SDK API 参考文档


from google.cloud import aiplatform
from vertexai.resources.preview import feature_store
from typing import List


def create_feature_group_sample(
    project: str,
    location: str,
    feature_group_id: str,
    bq_table_uri: str,
    entity_id_columns: List[str],
):
    aiplatform.init(project=project, location=location)
    fg = feature_store.FeatureGroup.create(
        name=feature_group_id,
        source=feature_store.utils.FeatureGroupBigQuerySource(
            uri=bq_table_uri, entity_id_columns=entity_id_columns
        ),
    )
    return fg

  • project:您的项目 ID。
  • location:要在其中创建特征组的区域,例如 us-central1
  • feature_group_id:您要创建的新特征组的名称。
  • bq_table_uri:您要为特征组注册的 BigQuery 源表或视图的 URI。
  • entity_id_columns:包含实体 ID 的列的名称。您可以指定一列或多列。
    • 如需仅指定一个实体 ID 列,请按以下格式指定列名称:
      "entity_id_column_name"
    • 如需指定多个实体 ID 列,请按以下格式指定列名称:
      ["entity_id_column_1_name", "entity_id_column_2_name", ...]

如需创建 FeatureGroup 资源,请使用 featureGroups.create 方法发送 POST 请求。

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION_ID:要在其中创建特征组的区域,例如 us-central1
  • ENTITY_ID_COLUMNS:包含实体 ID 的列名称。您可以指定一列或多列。
    • 如需仅指定一个实体 ID 列,请按以下格式指定列名称:
      "entity_id_column_name"
    • 如需指定多个实体 ID 列,请按以下格式指定列名称:
      ["entity_id_column_1_name", "entity_id_column_2_name", ...]
  • PROJECT_ID:您的项目 ID。
  • FEATUREGROUP_NAME:您要创建的新特征组的名称。
  • BIGQUERY_SOURCE_URI:您要为特征组注册的 BigQuery 源表或视图的 URI。
  • TIMESTAMP_COLUMN:可选。指定 BigQuery 源表或视图中包含特征时间戳的列的名称。
    您只需在数据格式化为时间序列且包含特征时间戳的列未命名为 feature_timestamp 时,才需要指定时间戳列的名称。
  • STATIC_DATA_SOURCE:可选。如果数据的格式不是时序格式,请输入 true。默认设置为 false
  • DENSE:可选。指明 Vertex AI Feature Store 在从与特征组关联的特征视图中传送数据时如何处理 null 值:
    • false - 这是默认设置。Vertex AI Feature Store 仅传送最新的非 null 特征值。如果特征的最新值为 null,Vertex AI Feature Store 会传送最新的非 null 历史值。不过,如果该特征的当前值和历史值均为 null,Vertex AI Feature Store 会将 null 作为特征值。
    • true - 对于具有定期数据同步功能的功能视图,Vertex AI Feature Store 仅传送最新的特征值,包括 null 值。对于具有持续数据同步功能的特征视图,Vertex AI Feature Store 仅提供最新的非 null 特征值。不过,如果特征的当前值和历史值均为 null,Vertex AI Feature Store 会将 null 作为特征值。如需详细了解数据同步类型以及如何在特征视图中配置数据同步类型,请参阅同步特征视图中的数据

HTTP 方法和网址:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups?feature_group_id=FEATUREGROUP_NAME

请求 JSON 正文:

{
  "big_query": {
    "entity_id_columns": "ENTITY_ID_COLUMNS",
    "big_query_source": {
      "input_uri": "BIGQUERY_SOURCE_URI",
    }
    "time_series": {
      "timestamp_column": ""TIMESTAMP_COLUMN"",
    },
    "static_data_source": STATIC_DATA_SOURCE,
    "dense": DENSE
  }
}

如需发送请求,请选择以下方式之一:

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups?feature_group_id=FEATUREGROUP_NAME"

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups?feature_group_id=FEATUREGROUP_NAME" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateFeatureGroupOperationMetadata",
    "genericMetadata": {
      "createTime": "2023-09-18T03:00:13.060636Z",
      "updateTime": "2023-09-18T03:00:13.060636Z"
    }
  }
}

后续步骤