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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:05