如何使用BigQuery Node.js客户端库检查BigQuery中Kmeans模型训练是否完成
BigQuery Kmeans模型训练状态查询(Node.js客户端实现)
你可以通过两种方式判断Kmeans模型训练进度,两种方式都可以直接通过官方Node.js客户端库实现:
方式1:监听训练作业状态(推荐)
你调用API提交CREATE MODEL请求时会返回对应异步作业实例,直接监听作业状态即可,不需要额外查询元数据:
- 代码实现示例:
const {BigQuery} = require('@google-cloud/bigquery'); const bigquery = new BigQuery({ projectId: '替换为你的GCP项目ID' }); async function trainKmeansModel() { // 替换为你实际的Kmeans模型创建SQL const createModelSql = ` CREATE OR REPLACE MODEL \`你的项目ID.你的数据集ID.你的模型名\` OPTIONS( model_type='kmeans', num_clusters=5, standardize_features = TRUE ) AS SELECT 特征字段1, 特征字段2 FROM \`你的项目ID.你的数据集ID.训练表名\` `; // 提交异步训练作业 const [job] = await bigquery.createQueryJob({ query: createModelSql, location: '你的数据集所在区域,比如US、asia-east1' }); // 等待作业执行完成,客户端会自动轮询,不需要手动写定时器 await job.getQueryResults(); // 作业执行完成后直接查询质心数据 const [centroids] = await bigquery.query({ query: `SELECT * FROM ML.CENTROIDS(MODEL \`你的项目ID.你的数据集ID.你的模型名\`)` }); console.log('模型训练完成,质心数据:', centroids); return centroids; }
- 如果你需要自定义轮询逻辑,也可以主动拉取作业元数据判断状态:
async function getJobStatus(jobId) { const job = bigquery.job(jobId, {location: '你的区域'}); const [metadata] = await job.getMetadata(); if (metadata.status.state === 'DONE') { if (metadata.status.errors) { return {status: 'FAILED', errors: metadata.status.errors}; } return {status: 'SUCCESS'}; } return {status: 'RUNNING'}; }
方式2:查询元数据视图
如果你没有保存训练作业ID,可以直接查询INFORMATION_SCHEMA.MODELS视图判断模型状态:
- 代码实现示例:
async function checkModelStatus(modelName) { const [rows] = await bigquery.query({ query: ` SELECT state, error_message FROM \`你的项目ID.你的数据集ID.INFORMATION_SCHEMA.MODELS\` WHERE model_id = @modelName `, params: {modelName} }); if (rows.length === 0) return {status: 'NOT_FOUND'}; const {state, error_message} = rows[0]; if (state === 'READY') return {status: 'SUCCESS'}; if (state === 'FAILED') return {status: 'FAILED', error: error_message}; return {status: 'RUNNING'}; } // 可通过setInterval定时调用该接口,直到返回SUCCESS/FAILED状态后停止轮询
注意:模型训练过程中state会一直保持为RUNNING,仅训练完成后才会切换为READY/FAILED,必须等待状态变为READY后再调用
ML.CENTROIDS查询质心,否则会触发模型不可用的报错。
内容的提问来源于stack exchange,提问作者user16788731
相关产品推荐
相关产品推荐

