alibaba/spring-ai-alibaba · warning
数据集版本数据量为0或不存在: {}
Error message
数据集版本数据量为0或不存在: {} What it means
In ExperimentServiceImpl.getResults, after loading the experiment, the code reads the dataset version's dataCount. If the dataset version row is missing or dataCount is null/0, it logs this warning and sets dataCount = 1 to avoid a divide-by-zero when computing average scores. Results are still returned but any per-item averages are skewed by this artificial divisor.
Source
Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java:179
experiment.setEvaluatorConfig(JSON.toJSONString(evaluatorConfigList));
return experiment;
}
@Override
public List<ExperimentEvaluatorResult> getResults(Long experimentId) {
log.info("查询实验结果: {}", experimentId);
// 先检查实验是否存在
ExperimentDO experiment = experimentMapper.selectById(experimentId);
if (experiment == null) {
log.warn("实验不存在: {}", experimentId);
return null;
}
Integer dataCount = datasetVersionMapper.selectById(experiment.getDatasetVersionId()).getDataCount();
// 检查dataCount是否为null或0,避免除零异常
if (dataCount == null || dataCount == 0) {
log.warn("数据集版本数据量为0或不存在: {}", experiment.getDatasetVersionId());
dataCount = 1; // 避免除零异常,设置默认值
}
// 正确解析 evaluatorConfig JSON 数组字符串为 List<EvaluatorConfig>
List<EvaluatorConfig> evaluatorConfigList = JSON.parseArray(experiment.getEvaluatorConfig(), EvaluatorConfig.class);
// 提取 evaluatorVersionId 列表
List<Long> evaluatorList = evaluatorConfigList.stream()
.map(e -> Long.valueOf(e.getEvaluatorVersionId()))
.toList();
// 使用stream map collect方式构建结果列表
Integer finalDataCount = dataCount;
return evaluatorList.stream().map(evaluatorVersionId -> {
List<ExperimentResultDO> resultList = experimentResultMapper.selectByExperimentAndEvaluator(experimentId, evaluatorVersionId);
//计算score的平均值,避免除零异常
BigDecimal averageScore = BigDecimal.ZERO;View on GitHub (pinned to f82da0b50f)
Solutions
- Check the dataset_version row for experiment.datasetVersionId — restore it or fix the reference.
- Ensure dataset versions have at least one item before running experiments; validate datasetCount on creation.
- Backfill dataCount for legacy rows created before the column existed.
- Treat reported averages with dataCount defaulted to 1 as unreliable and re-run the experiment with a populated dataset.
Example fix
// before
Integer dataCount = datasetVersionMapper.selectById(id).getDataCount(); // NPE if version missing
// after
DatasetVersionDO version = datasetVersionMapper.selectById(id);
if (version == null || version.getDataCount() == null || version.getDataCount() == 0) {
log.warn("Dataset version missing or empty: {}", id);
throw new ResponseStatusException(HttpStatus.CONFLICT, "Dataset version has no data: " + id);
}
Integer dataCount = version.getDataCount(); Defensive patterns
Strategy: validation
Validate before calling
DatasetVersionDO version = datasetVersionMapper.selectById(experiment.getDatasetVersionId());
if (version == null || version.getDataCount() == null || version.getDataCount() <= 0) {
throw new IllegalStateException("Dataset version " + experiment.getDatasetVersionId() + " has no data");
} Try / catch
try {
return experimentService.getResults(id);
} catch (NullPointerException | IllegalStateException e) {
// dataset version row missing (NPE inside service) or empty dataset
throw new ResponseStatusException(HttpStatus.CONFLICT, "Experiment dataset has no data", e);
} Prevention
- Require dataCount > 0 before allowing an experiment to run.
- Add a NOT NULL / CHECK constraint or service-level validation on dataCount.
- Backfill dataCount for legacy dataset versions.
- Do not delete dataset versions still referenced by experiments; audit references first.
When it happens
Trigger: Calling getResults for an experiment whose datasetVersionId points to a deleted/missing dataset_version row, or a version that was saved with 0 items (dataCount null or 0).
Common situations: Dataset version deleted while experiments referencing it remain; dataset uploaded empty; import produced zero rows; dataCount column never populated by an older schema/version.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- Dataset version not found: {}
- 数据集为空,实验完成: {}
- 获取数据集版本信息失败: experimentId={}, datasetVersionId={}
- Unknown dataset status code:
- Cannot convert resource to file system path: {}
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/cd75a18544e8464c.
Report an issue: GitHub.