传送特征值

借助 Vertex AI Feature Store,您可以从在线存储区中的特征视图在线传送特征值。例如,您可以从特征视图提供特征值以进行在线预测。 特征视图必须至少同步一次,然后您才能从该特征在线传送特征。

如果特征视图是根据特征组和特征定义的,则 Vertex AI Feature Store 会提取与特定实体 ID 对应的最新特征值。如果 ID 列中有多条记录具有相同的值,Vertex AI Feature Store 会根据 feature_timestamp 列提取最新的非 null 特征值。

如果特征视图与 BigQuery 数据源直接关联,而不与特征组和特征关联,则 Vertex AI Feature Store 会从数据源中提取所有特征值。在这种情况下,数据源中的每一行都必须包含唯一 ID。

对于每个请求,您只能从一个 ID 传送特征值。

根据在线存储区配置的在线传送类型,您可以通过以下任一方式提供特征值:

使用 Bigtable 在线传送提取特征值

使用以下示例通过 Bigtable 在线传送根据特定实体 ID 提取特征值。

REST

若要从 FeatureView 实例中获取特定实体 ID 的所有最新特征值,可以使用 featureViews.fetchFeatureValues 方法发送一个 POST 请求。

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

  • LOCATION_ID:在线存储区所在的区域,例如 us-central1
  • PROJECT_ID:您的项目 ID。
  • FEATUREONLINESTORE_NAME:包含特征视图的在线存储区的名称。
  • FEATUREVIEW_NAME:要从中提供特征值的特征视图的名称。
  • ENTITY_ID:要从中传送最新特征值的特征记录中的 ID 列值。
  • FORMAT(可选):要用于提取特征值的格式。支持的格式包括 JSON 键值对和 proto Struct 格式。

HTTP 方法和网址:

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

请求 JSON 正文:

{
  data_key: "ENTITY_ID",
  data_format: "FORMAT"
}

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

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/FEATUREVIEW_NAME:fetchFeatureValues"

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/FEATUREVIEW_NAME:fetchFeatureValues" | Select-Object -Expand Content

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

key_values {
  features {
    value {
      int64_value: 258348
    }
    name: "feature_0"
  }
  features {
    value {
      double_value: 0.96300036744534068
    }
    name: "feature_1"
  }
  features {
    value {
      double_value: 0.42787383695351083
    }
    name: "feature_2"
  }
  features {
    value {
      double_value: 0.12219888824743128
    }
    name: "feature_3"
  }
  features {
    value {
      double_value: 0.037523154697944622
    }
    name: "feature_4"
  }
  features {
    value {
      double_value: 0.1766952509448767
    }
    name: "feature_5"
  }
}

Python

以下示例使用 Bigtable 在线传送功能根据特定实体 ID 提取特征值。

from google.cloud.aiplatform_v1 import FeatureOnlineStoreServiceClient
from google.cloud.aiplatform_v1.types import feature_online_store_service as feature_online_store_service_pb2

data_client = FeatureOnlineStoreServiceClient(
  client_options={"api_endpoint": f"LOCATION_ID-aiplatform.googleapis.com"}
)
data_client.fetch_feature_values(
  request=feature_online_store_service_pb2.FetchFeatureValuesRequest(
    feature_view=f"projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME",
    data_key=feature_online_store_service_pb2.FeatureViewDataKey(key="ENTITY_ID"),
    data_format=feature_online_store_service_pb2.FeatureViewDataFormat.FORMAT,
  )
)

替换以下内容:

  • LOCATION_ID:在线存储区所在的区域,例如 us-central1

  • PROJECT_ID:您的项目 ID。

  • FEATUREONLINESTORE_NAME:包含特征视图的在线存储区的名称。

  • FEATUREVIEW_NAME:要从中提供特征值的特征视图的名称。

  • ENTITY_ID:要从中传送最新特征值的特征记录中的 ID 列值。

  • FORMAT(可选):要用于提取特征值的格式。支持的格式包括 JSON KEY_VALUE 对和 proto PROTO_STRUCT 格式。

使用优化的在线传送从公共端点提取特征值

如果您已将在线存储区实例配置为使用公共端点的优化在线传送来提供特征值,则需要执行以下步骤,才能从在线的特征视图中提取特征值存储:

  1. 检索 FeatureOnlineStore 实例的公共端点域名。

  2. 使用公共端点域名从实体 ID 中提取特征值。

检索在线存储区的公共端点域名

当您使用公共端点创建和配置用于优化在线传送的在线存储区实例时,Vertex AI Feature Store 会为在线存储区生成公共端点域名。您需要先从在线存储区详细信息中检索公共端点域名,然后才能开始从在线存储区中的特征视图提供特征值。

使用以下示例检索在线存储区实例的详细信息。

REST

如需检索项目中 FeatureOnlineStore 资源的详细信息,请使用 featureOnlineStores.get 方法发送 GET 请求。

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

  • LOCATION_ID:在线存储区所在的区域,例如 us-central1
  • PROJECT_ID:您的项目 ID。
  • FEATUREONLINESTORE_NAME:在线存储区实例的名称。

HTTP 方法和网址:

GET http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME

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

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME"

PowerShell

执行以下命令:

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

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME_1",
  "createTime": "2023-09-06T23:25:04.256314Z",
  "updateTime": "2023-09-06T23:25:04.256314Z",
  "etag": "AMEw9yMgoV0bAsYuKwVxz4Y7lOmxV7riNVHg217KaQAKORqvdqGCrQ1DIt8yHgoGXf8=",
  "state": "STABLE",
  "dedicatedServingEndpoint": {
    "publicEndpointDomainName": "PUBLIC_ENDPOINT_DOMAIN_NAME"
  },
  "optimized": {}
}

您需要来自响应的 PUBLIC_ENDPOINT_DOMAIN_NAME 才能在接下来的步骤中提取特征值。

从实体 ID 中提取特征值

检索在线存储区实例的公共端点域名后,使用以下示例通过优化的在线传送提取特定实体 ID 的特征值。

REST

如需从 FeatureView 实例中获取特定实体 ID 的所有最新特征值,可以使用 featureViews.fetchFeatureValues 方法发送一个 POST 请求。

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

  • PUBLIC_ENDPOINT_DOMAIN_NAME:您使用 featureOnlineStores.get 方法检索的在线存储区实例的公共端点域名。
  • LOCATION_ID:在线存储区所在的区域,例如 us-central1
  • PROJECT_ID:您的项目 ID。
  • FEATUREONLINESTORE_NAME:包含特征视图的在线存储区的名称。
  • FEATUREVIEW_NAME:要从中提供特征值的特征视图的名称。
  • ENTITY_ID:要从中传送最新特征值的特征记录中的 ID 列值。
  • FORMAT(可选):要用于提取特征值的格式。支持的格式包括 JSON 键值对和 proto Struct 格式。

HTTP 方法和网址:

POST http://PUBLIC_ENDPOINT_DOMAIN_NAME/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:fetchFeatureValues

请求 JSON 正文:

{
  id: "ENTITY_ID",
  data_format: "FORMAT"
}

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

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://PUBLIC_ENDPOINT_DOMAIN_NAME/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:fetchFeatureValues"

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://PUBLIC_ENDPOINT_DOMAIN_NAME/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:fetchFeatureValues" | Select-Object -Expand Content

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

key_values {
  features {
    value {
      int64_value: 258348
    }
    name: "feature_0"
  }
  features {
    value {
      double_value: 0.96300036744534068
    }
    name: "feature_1"
  }
  features {
    value {
      double_value: 0.42787383695351083
    }
    name: "feature_2"
  }
  features {
    value {
      double_value: 0.12219888824743128
    }
    name: "feature_3"
  }
  features {
    value {
      double_value: 0.037523154697944622
    }
    name: "feature_4"
  }
  features {
    value {
      double_value: 0.1766952509448767
    }
    name: "feature_5"
  }
}

Python

使用以下示例通过优化的在线传送根据特定实体 ID 提取特征值。

from google.cloud.aiplatform_v1 import FeatureOnlineStoreServiceClient
from google.cloud.aiplatform_v1.types import feature_online_store_service as feature_online_store_service_pb2

data_client = FeatureOnlineStoreServiceClient(
  client_options={"api_endpoint": f"PUBLIC_ENDPOINT_DOMAIN_NAME"}
)
data_client.fetch_feature_values(
  request=feature_online_store_service_pb2.FetchFeatureValuesRequest(
    feature_view=f"projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME",
    id=f"ENTITY_ID",
    format=feature_online_store_service_pb2.FetchFeatureValuesRequest.Format.FORMAT,
  )
)

替换以下内容:

  • PUBLIC_ENDPOINT_DOMAIN_NAME:您使用 featureOnlineStores.get 方法检索的在线存储区实例的公共端点域名。

  • LOCATION_ID:在线存储区所在的区域,例如 us-central1

  • PROJECT_ID:您的项目 ID。

  • FEATUREONLINESTORE_NAME:包含特征视图的在线存储区的名称。

  • FEATUREVIEW_NAME:要从中提供特征值的特征视图的名称。

  • ENTITY_ID:要从中传送最新特征值的特征记录中的 ID 列值。

  • FORMAT(可选):要用于提取特征值的格式。支持的格式包括 JSON KEY_VALUE 对和 proto PROTO_STRUCT 格式。

使用 Private Service Connect 端点中的优化在线传送提取特征值

如果您已将在线存储区实例配置为使用 Private Service Connect 端点的优化在线传送来提供特征值,则需要执行以下步骤,才能从在线的特征视图中提取特征值存储:

  1. 检索 FeatureOnlineStore 实例的 Private Service Connect 配置。

  2. 将 Private Service Connect 的端点添加到您的网络配置。

  3. 通过 gRPC 连接到 Private Service Connect 端点。

  4. 从实体 ID 中提取特征值。

检索在线存储区的服务连接字符串

在创建和配置使用 Private Service Connect 端点优化在线传送的在线存储区实例时,Vertex AI Feature Store 会生成服务连接字符串,该字符串可用于设置 Private Service Connect 端点。 您可以从在线存储区详情中检索服务连接字符串。

使用以下示例检索在线存储区实例的详细信息。

REST

如需检索项目中 FeatureOnlineStore 资源的详细信息,请使用 featureOnlineStores.get 方法发送 GET 请求。

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

  • LOCATION_ID:在线存储区所在的区域,例如 us-central1
  • PROJECT_ID:您的项目 ID。
  • FEATUREONLINESTORE_NAME:在线存储区实例的名称。

HTTP 方法和网址:

GET http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME

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

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME"

PowerShell

执行以下命令:

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

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME_1",
  "createTime": "2023-09-06T23:25:04.256314Z",
  "updateTime": "2023-09-06T23:25:04.256314Z",
  "etag": "AMEw9yMgoV0bAsYuKwVxz4Y7lOmxV7riNVHg217KaQAKORqvdqGCrQ1DIt8yHgoGXf8=",
  "state": "STABLE",
  "dedicatedServingEndpoint": {
    "privateServiceConnectConfig": {
      "enablePrivateServiceConnect": "true",
      "projectAllowlist": [
        "PROJECT_NAME"
      ]
    },
    serviceAttachment: "SERVICE_ATTACHMENT_STRING"
  },
  "optimized": {}
}

您需要来自响应的 SERVICE_ATTACHMENT_STRING 才能在接下来的步骤中提取特征值。

为 Private Service Connect 添加端点

如需将用于优化在线传送的 Private Service Connect 端点添加到您的网络配置,请执行以下步骤:

  1. 在 Google Cloud 控制台中,选择包含在线存储区实例的项目。

  2. 通过将 SERVICE_ATTACHMENT_STRING 指定为目标服务,为 Private Service Connect 创建端点。如需了解如何为 Private Service Connect 创建端点,请参阅创建端点

创建端点后,它将显示在 Private Service Connect 页面上的已连接的端点标签页中。端点的 IP 地址会显示在 IP 地址列中。

转到“已连接的端点”标签页

在下一步中,您需要使用此 IP 地址,通过 gRPC 将在线存储区实例的端点连接到 Private Service Connect 端点。

通过 gRPC 连接到 Private Service Connect 端点

使用以下代码示例通过 gRPC 连接到为在线存储区创建的 Private Service Connect 端点。

Python

from google.cloud.aiplatform_v1beta1 import FeatureOnlineStoreServiceClient
from google.cloud.aiplatform_v1beta1.services.feature_online_store_service.transports.grpc import FeatureOnlineStoreServiceGrpcTransport
import grpc

data_client = FeatureOnlineStoreServiceClient(
  transport = FeatureOnlineStoreServiceGrpcTransport(
    # Add the IP address of the Endpoint you just created.
    channel = grpc.insecure_channel("ENDPOINT_IP:10002")
  )
)

替换以下内容:

  • ENDPOINT_IP:端点在 Private Service Connect 页面上的 IP 地址列中。

从实体 ID 中提取特征值

通过 gRPC 连接到 Private Service Connect 端点后,请使用以下示例通过优化的在线传送提取特定实体 ID 的特征值。

Python

data_client.fetch_feature_values(
  feature_view=f"projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME", id=ENTITY_ID)

替换以下内容:

  • LOCATION_ID:在线存储区所在的区域,例如 us-central1

  • PROJECT_ID:您的项目 ID。

  • FEATUREONLINESTORE_NAME:包含特征视图的在线存储区的名称。

  • FEATUREVIEW_NAME:要从中提供特征值的特征视图的名称。

  • ENTITY_ID:要从中传送最新特征值的特征记录中的 ID 列值。

  • FORMAT(可选):要用于提取特征值的格式。支持的格式包括 JSON 键值对和 proto Struct 格式。

后续步骤