创建特征视图实例

您可以在现有在线存储区实例中创建特征视图。创建特征视图时,您可以通过以下方式关联特征:

  • 通过 Feature Registry 添加特征组和特征:与 Feature Registry 中的现有特征组和特征关联。特征组指定 BigQuery 数据源的位置。特征组中的特征指向该数据源中的特定特征列。您可以将一个特征视图与多个特征组相关联。

  • 通过 BigQuery 源添加特征:直接关联 BigQuery 数据源(例如 BigQuery 表或视图),并指定实体 ID 列。

创建特征视图后,Vertex AI Feature Store 会同步 BigQuery 数据源中的最新特征值。如果您设置了查询参数 run_sync_immediately=true,则 Vertex AI Feature Store 会在您创建特征视图时同步特征值。否则,Vertex AI Feature Store 会根据为特征视图指定的同步时间表来同步特征值。

同步特征视图中的特征数据

Vertex AI Feature Store 会定期从 BigQuery 刷新或同步在线存储区中存储的特征值。创建特征视图时,您可以使用 FeatureView.sync_config 参数指定数据同步时间表或频率。

您还可以选择为特征视图手动触发数据同步。如需详细了解如何手动同步特征视图的数据,请参阅将特征数据同步到在线存储区

请注意,对于一个特征视图,一次只能执行一项数据同步操作。如果正在为特征视图同步数据,则会跳过针对该特征视图的所有已计划的数据同步,直到同步完成为止。

优化同步期间的费用

数据同步操作可能会产生 BigQuery 资源使用费。请遵循以下准则来优化这些费用并提高数据同步期间的性能:

  • 请勿将同步时间表的运行频率配置为比 BigQuery 源中数据的预期更改频率更频繁。

  • 优化 BigQuery 中特征数据源的大小。创建特征视图时,请仅包含在线传送所需的数据。

  • 避免在 BigQuery 中运行复杂的聚合。对表或视图运行 SELECT * 查询以估算数据处理量和处理时长。

  • 为在线存储区设置扩缩选项时,请将 max_node_count 的值设置得足够高,以便容纳数据同步期间的高负载。

  • 在同一在线存储区中,将不同特征视图的同步安排在不同的时间。

  • 如果您的 BigQuery 表包含大量历史数据,请考虑使用时间戳对表进行分区,并指定检索特征数据的时间范围。这样可最大程度地减少在同步期间对过时的特征数据进行检索。

  • Bigtable 利用率会在数据同步期间增加。对于在在线存储区内为 Bigtable 在线服务中创建的特征视图,请在非高峰时段安排同步作业,以获得最佳性能。

为特征视图配置服务账号

每个特征视图在同步期间使用服务账号访问 BigQuery 中的源数据。Vertex AI Feature Store 将 BigQuery Data Viewer Identity and Access Management (IAM) 角色分配给此服务账号。

默认情况下,特征视图使用为项目配置的服务账号。使用此配置时,任何有权在项目中创建特征视图的用户都可以访问 BigQuery 中的特征数据。

或者,您也可以将特征视图配置为使用其自己的服务账号。然后,Vertex AI Feature Store 会为特征视图设置专用服务账号。使用此配置,您可以限制对 BigQuery 中特征数据的访问权限,或向其他用户授予访问权限。您可以使用 FeatureView.service_agent_type 参数指定服务账号配置。

为特征视图配置向量检索

您可以为基于关联的数据源创建的特征视图配置向量检索,前提是该数据源包含 embedding 列并且在线存储区配置为支持嵌入管理。您可以使用 FeatureView.vector_search_config 参数指定向量检索配置。

请注意,只有通过指定 BigQuery 源 URI (而不是来自特征组的特征和来自 Feature Registry 的特征)创建特征视图时,才能配置向量检索和管理嵌入。

如需了解如何通过添加 embedding 列以使 BigQuery 数据源支持嵌入,请参阅数据源准备指南

通过特征组创建特征视图

您可以根据使用特征组和特征注册的特征数据创建特征视图。如需将多个 BigQuery 数据源与同一特征视图关联,您可以指定多个特征组。

如果通过指定特征组和特征来创建特征视图:

  • 您的数据源必须具有 feature_timestamp 列,并且可以包含历史数据。

  • Vertex AI Feature Store 仅根据特征时间戳传送最新特征值。

  • 您无法为特征视图配置嵌入管理。

使用默认服务账号配置创建特征视图

请使用以下示例通过关联多个特征组来创建特征视图,而不指定服务账号配置。

REST

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

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

  • LOCATION_ID:要在其中创建特征视图的区域,例如 us-central1
  • PROJECT_ID:您的项目 ID。
  • FEATUREONLINESTORE_NAME:要在其中创建特征视图的在线存储区实例的名称。
  • FEATUREVIEW_NAME:要创建的新特征视图实例的名称。
  • FEATUREGROUP_NAME_AFEATUREGROUP_NAME_B:要从中向特征视图添加特征的特征组的名称。
  • FEATURE_ID_A1FEATURE_ID_A2:要添加到特征视图的特征组 FEATUREGROUP_NAME_A 的特征 ID。
  • FEATURE_ID_B1FEATURE_ID_B2:要添加到特征视图的特征组 FEATUREGROUP_NAME_B 的特征 ID。
  • CRON:Cron 时间表表达式,表示将数据同步到特征视图的频率。如需了解详情,请参阅 cron

HTTP 方法和网址:

POST http://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME

请求 JSON 正文:

{
  "feature_registry_source": {
    "feature_groups": [
      {
        "feature_group_id": "FEATUREGROUP_NAME_A",
        "feature_ids": [ "FEATURE_ID_A1", "FEATURE_ID_A2" ]
      },
      {
        "feature_group_id": "FEATUREGROUP_NAME_B",
        "feature_ids": [ "FEATURE_ID_B1", "FEATURE_ID_B2" ]
      }
    ]
  },
  "sync_config": {
    "cron": "CRON"
  }
}

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

curl

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

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

PowerShell

将请求正文保存在名为 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 "http://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateFeatureViewOperationMetadata",
    "genericMetadata": {
      "createTime": "2023-09-15T02:11:29.458820Z",
      "updateTime": "2023-09-15T02:11:29.458820Z"
    }
  }
}

通过指定服务账号配置来创建特征视图

请使用以下示例来通过指定服务账号配置从特征组创建特征视图。

REST

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

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

  • LOCATION_ID:要在其中创建特征视图的区域,例如 us-central1
  • PROJECT_ID:您的项目 ID。
  • FEATUREONLINESTORE_NAME:要在其中创建特征视图的在线存储区实例的名称。
  • FEATUREVIEW_NAME:要创建的新特征视图实例的名称。
  • FEATUREGROUP_NAME_AFEATUREGROUP_NAME_B:要从中向特征视图添加特征的特征组的名称。
  • FEATURE_ID_A1FEATURE_ID_A2:要添加到特征视图的特征组 FEATUREGROUP_NAME_A 的特征 ID。
  • FEATURE_ID_B1FEATURE_ID_B2:要添加到特征视图的特征组 FEATUREGROUP_NAME_B 的特征 ID。
  • CRON:Cron 时间表表达式,表示将数据同步到特征视图的频率。如需了解详情,请参阅 cron
  • SERVICE_AGENT_TYPE:(可选)特征视图的服务账号配置。受支持的服务代理类型包括:
    • SERVICE_AGENT_TYPE_PROJECT:将项目级层服务账号用于特征视图。这是默认配置。
    • SERVICE_AGENT_TYPE_FEATURE_VIEW:为特征视图设置和使用专用服务账号。

HTTP 方法和网址:

POST http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME

请求 JSON 正文:

{
  "feature_registry_source": {
    "feature_groups": [
      {
        "feature_group_id": "FEATUREGROUP_NAME_A",
        "feature_ids": [ "FEATURE_ID_A1", "FEATURE_ID_A2" ]
      },
      {
        "feature_group_id": "FEATUREGROUP_NAME_B",
        "feature_ids": [ "FEATURE_ID_B1", "FEATURE_ID_B2" ]
      }
    ]
  },
  "sync_config": {
    "cron": "CRON"
  },
  "service_agent_type": "SERVICE_AGENT_TYPE"
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME"

PowerShell

将请求正文保存在名为 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 "http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateFeatureViewOperationMetadata",
    "genericMetadata": {
      "createTime": "2023-09-15T02:11:29.458820Z",
      "updateTime": "2023-09-15T02:11:29.458820Z"
    }
  }
}

通过 BigQuery 源创建特征视图

如果您想在不使用特征组和特征注册 BigQuery 数据源的情况下在线传送特征,则可以通过指定 BigQuery 数据源的 URI 来创建特征视图。

如果您通过指定数据源来创建特征视图:

  • 则不能在 BigQuery 表或视图中添加 feature_timestamp 列。

  • 不能在数据源中包含历史特征值。每行都必须包含唯一的实体 ID。

使用默认服务账号配置创建特征视图

使用以下示例可通过直接关联 BigQuery 数据源而不指定服务账号配置来创建具有嵌入支持的特征视图。

REST

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

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

  • LOCATION_ID:要在其中创建特征视图的区域,例如 us-central1
  • PROJECT_ID:您的项目 ID。
  • FEATUREONLINESTORE_NAME:要在其中创建特征视图的在线存储区实例的名称。
  • FEATUREVIEW_NAME:要创建的新特征视图的名称。
  • PROJECT_NAME:您的项目名称。
  • DATASET_NAME:您的 BigQuery 数据集名称。
  • TABLE_NAME:BigQuery 数据集中的表名称。
  • ENTITY_ID_COLUMN:包含实体 ID 的列的名称。
  • CRON:Cron 时间表表达式,表示将数据同步到特征视图的频率。如需了解详情,请参阅 cron
  • EMBEDDING_COLUMN:包含源数据(用于创建向量搜索的索引)的列的名称。仅当您希望使用特征视图管理嵌入时,才需要该名称。
  • FILTER_COLUMN_1FILTER_COLUMN_2(可选):用于过滤向量搜索结果的列的名称。
  • CROWDING_COLUMN(可选):包含数量上限属性的列的名称。
  • EMBEDDING_DIMENSION(可选):嵌入列中嵌入的大小(以维度数量表示)。

HTTP 方法和网址:

POST http://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME

请求 JSON 正文:

{
  "big_query_source": {
    "uri": "bq://PROJECT_NAME.DATASET_NAME.TABLE_NAME",
    "entity_id_columns": "ENTITY_ID_COLUMN"
  },
  "sync_config": {
    "cron": "CRON"
  },
  "vector_search_config": {
    "embedding_column": "EMBEDDING_COLUMN",
    "filter_columns": ["FILTER_COLUMN_1", "FILTER_COLUMN_2"],
    "crowding_column": "CROWDING_COLUMN",
    "embedding_dimension": EMBEDDING_DIMENSION
    "tree_ah_config": {}
  }
}

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

curl

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

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

PowerShell

将请求正文保存在名为 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 "http://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateFeatureViewOperationMetadata",
    "genericMetadata": {
      "createTime": "2023-09-15T02:11:29.458820Z",
      "updateTime": "2023-09-15T02:11:29.458820Z"
    }
  }
}

通过指定服务账号配置来创建具有嵌入管理的特征视图

使用以下示例可通过直接关联 BigQuery 数据源并指定服务账号配置来创建具有嵌入支持的特征视图。

REST

如需创建支持嵌入的 FeatureView 资源,请通过使用 featureViews.create 方法并指定向量搜索配置来发送 POST 请求。

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

  • LOCATION_ID:要在其中创建特征视图的区域,例如 us-central1
  • PROJECT_ID:您的项目 ID。
  • FEATUREONLINESTORE_NAME:要在其中创建特征视图的在线存储区实例的名称。
  • FEATUREVIEW_NAME:要创建的新特征视图的名称。
  • PROJECT_NAME:您的项目名称。
  • DATASET_NAME:您的 BigQuery 数据集名称。
  • TABLE_NAME:BigQuery 数据集中的表名称。
  • ENTITY_ID_COLUMNS:包含实体 ID 的列的名称。您可以指定一列或多列。
    • 如需仅指定一个实体 ID 列,请按以下格式指定列名称:
      "entity_id_column_name"
    • 如需指定多个实体 ID 列,请按以下格式指定列名称:
      ["entity_id_column_1_name", "entity_id_column_2_name", ...]
  • CRON:Cron 时间表表达式,表示将数据同步到特征视图的频率。如需了解详情,请参阅 cron
  • SERVICE_AGENT_TYPE:特征视图的服务账号配置。受支持的服务代理类型包括:
    • SERVICE_AGENT_TYPE_PROJECT:将项目级层服务账号用于特征视图。这是默认配置。
    • SERVICE_AGENT_TYPE_FEATURE_VIEW:为特征视图设置和使用专用服务账号。
  • EMBEDDING_COLUMN:包含源数据(用于创建向量搜索的索引)的列的名称。仅当您希望使用特征视图管理嵌入时,才需要该名称。
  • FILTER_COLUMN_1FILTER_COLUMN_2(可选):用于过滤向量搜索结果的列的名称。
  • CROWDING_COLUMN(可选):包含数量上限属性的列的名称。
  • EMBEDDING_DIMENSION(可选):嵌入列中嵌入的大小(以维度数量表示)。

HTTP 方法和网址:

POST http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME

请求 JSON 正文:

{
  "big_query_source": {
    "uri": "bq://PROJECT_NAME.DATASET_NAME.TABLE_NAME",
    "entity_id_columns": "ENTITY_ID_COLUMNS"
  },
  "sync_config": {
    "cron": "CRON"
  },
  "service_agent_type": "SERVICE_AGENT_TYPE",
  "vector_search_config": {
    "embedding_column": "EMBEDDING_COLUMN",
    "filter_columns": ["FILTER_COLUMN_1", "FILTER_COLUMN_2"],
    "crowding_column": "CROWDING_COLUMN",
    "embedding_dimension": EMBEDDING_DIMENSION
    "tree_ah_config": {}
  }
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME"

PowerShell

将请求正文保存在名为 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 "http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews?feature_view_id=FEATUREVIEW_NAME" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateFeatureViewOperationMetadata",
    "genericMetadata": {
      "createTime": "2023-09-15T02:11:29.458820Z",
      "updateTime": "2023-09-15T02:11:29.458820Z"
    }
  }
}

后续步骤