You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vertex AI批量预测时如何将结果映射至含record_id的原记录

解决Vertex AI批量预测结果关联原record_id的问题

方案一:直接保留record_id提交预测(推荐)

若自定义模型的输入签名仅指定了所需特征字段,Vertex AI批量预测会自动忽略输入表中额外的record_id字段,且该字段会被保留在预测结果中,无需提前剔除。修改代码如下:

from google.cloud import bigquery
from google.cloud import aiplatform

aiplatform.init(project=project_id)
client = bigquery.Client(project=project_id)

# 直接使用包含record_id的原表提交预测
clf = aiplatform.Model(model_id='custom_model')
clf.batch_predict(job_display_name='custom model batch prediction',
                 bigquery_source='bq://your_original_table',
                 instances_format='bigquery',
                 bigquery_destination_prefix='bq://prediction_result_table',
                 predictions_format='bigquery',
                 machine_type='n1-standard-4',
                 max_replica_count=1
                 )

预测完成后,prediction_result_table将包含原表的record_id字段,可直接关联原记录。

方案二:通过临时映射表关联(适用于必须剔除record_id的场景)

如果模型限制必须剔除record_id才能提交预测,可通过创建临时映射表的方式恢复关联:

步骤1:生成特征表与映射表

from google.cloud import bigquery
from google.cloud import aiplatform

aiplatform.init(project=project_id)
client = bigquery.Client(project=project_id)

# 创建带临时唯一ID的特征表,以及record_id与临时ID的映射表
query = '''
CREATE OR REPLACE TABLE `table_with_temp_id` AS
SELECT *, GENERATE_UUID() AS temp_id FROM `your_original_table`;

CREATE OR REPLACE TABLE `record_id_mapping` AS
SELECT record_id, temp_id FROM `table_with_temp_id`;

# 生成用于预测的无record_id表,保留temp_id用于后续关联
CREATE OR REPLACE TABLE `table_for_prediction` AS
SELECT * EXCEPT(record_id) FROM `table_with_temp_id`;
'''
client.query(query).result()

# 提交批量预测任务
clf = aiplatform.Model(model_id='custom_model')
clf.batch_predict(job_display_name='custom model batch prediction',
                 bigquery_source='bq://table_for_prediction',
                 instances_format='bigquery',
                 bigquery_destination_prefix='bq://prediction_result_table',
                 predictions_format='bigquery',
                 machine_type='n1-standard-4',
                 max_replica_count=1
                 )

步骤2:关联恢复record_id

预测完成后,执行BigQuery SQL将预测结果与原record_id关联:

CREATE OR REPLACE TABLE `final_prediction_with_record_id` AS
SELECT p.*, m.record_id
FROM `prediction_result_table` p
INNER JOIN `record_id_mapping` m ON p.temp_id = m.temp_id;

方案三:利用行号关联(简单但有局限性)

若原表数据在生成特征表期间无变更,且行顺序严格一致,可通过行号快速关联:

步骤1:生成带行号的特征表与映射表

query = '''
CREATE OR REPLACE TABLE `table_with_row_num` AS
SELECT *, ROW_NUMBER() OVER() AS row_num FROM `your_original_table`;

CREATE OR REPLACE TABLE `record_id_mapping` AS
SELECT record_id, row_num FROM `table_with_row_num`;

CREATE OR REPLACE TABLE `table_for_prediction` AS
SELECT * EXCEPT(record_id) FROM `table_with_row_num`;
'''
client.query(query).result()

步骤2:关联恢复record_id

CREATE OR REPLACE TABLE `final_prediction_with_record_id` AS
SELECT p.*, m.record_id
FROM `prediction_result_table` p
INNER JOIN `record_id_mapping` m ON p.row_num = m.row_num;

注意:此方法仅适用于原表数据固定、行顺序无变化的场景,否则会出现关联错误。

内容的提问来源于stack exchange,提问作者CHOCOLEO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:10:38