{"record":{"id":"a52e56b43fc2a82a","repo":"apache/skywalking","slug":"series-labeled-with-no-labeled-left-and-right-ser","errorCode":null,"errorMessage":"Series Labeled with No Labeled, left and right series value size not equal.","messagePattern":"Series Labeled with No Labeled, left and right series value size not equal\\.","errorType":"exception","errorClass":"IllegalExpressionException","httpStatus":null,"severity":"error","filePath":"oap-server/mqe-rt/src/main/java/org/apache/skywalking/mqe/rt/operation/LROp.java","lineNumber":243,"sourceCode":"            }\n            //time should be mapped\n            double newValue = calculate.apply(valueL.getDoubleValue(), valueR.getDoubleValue(), opType);\n            mqeValuesL.getValues().get(i).setDoubleValue(newValue);\n        }\n\n        return seriesLeft;\n    }\n\n    private static ExpressionResult seriesLabeledWithNoLabeled(ExpressionResult seriesLeft,\n                                                               ExpressionResult seriesRight,\n                                                               int opType, LROp calculate) throws IllegalExpressionException {\n        if (seriesRight.getResults().isEmpty()) {\n            throw new IllegalExpressionException(\"Series Labeled with No Labeled, no labeled result is empty.\");\n        }\n        MQEValues mqeValuesR = seriesRight.getResults().get(0);\n        for (MQEValues mqeValuesL : seriesLeft.getResults()) {\n            if (mqeValuesL.getValues().size() != mqeValuesR.getValues().size()) {\n                throw new IllegalExpressionException(\"Series Labeled with No Labeled, left and right series value size not equal.\");\n            }\n            for (int i = 0; i < mqeValuesL.getValues().size(); i++) {\n                //reserve left metric info\n                MQEValue valueL = mqeValuesL.getValues().get(i);\n                MQEValue valueR = mqeValuesR.getValues().get(i);\n                if (valueL.isEmptyValue() || valueR.isEmptyValue()) {\n                    valueL.setEmptyValue(true);\n                    continue;\n                }\n                double newValue = calculate.apply(valueL.getDoubleValue(), valueR.getDoubleValue(), opType);\n                mqeValuesL.getValues().get(i).setDoubleValue(newValue);\n            }\n        }\n\n        return seriesLeft;\n    }\n\n    private static ExpressionResult seriesNoLabeledWithLabeled(ExpressionResult seriesLeft,","sourceCodeStart":225,"sourceCodeEnd":261,"githubUrl":"https://github.com/apache/skywalking/blob/102af09b4a56064e22050dded10e2c52e490d040/oap-server/mqe-rt/src/main/java/org/apache/skywalking/mqe/rt/operation/LROp.java#L225-L261","documentation":"In LROp.seriesLabeledWithNoLabeled, each labeled group on the left must have the same number of values as the single right series, because values are paired by index. Any left label group whose length differs from the right series triggers this exception.","triggerScenarios":"'labeledSeries op plainSeries' where at least one left label group's point count differs from the right series' point count — e.g. one label combination reports intermittently and misses buckets, or the two metrics have different steps.","commonSituations":"Labeled metrics (per-service, per-endpoint) with uneven reporting across labels; comparing a labeled metric against a metric with a different down-sampling step; gaps in one label group's data while the base metric is complete.","solutions":["Query the labeled operand alone and check every label group has the same value count as the plain operand","Align step and duration across both metrics","Choose labels whose series report at the same cadence as the base metric, or aggregate away sparse labels","Recompute the pairing client-side on timestamps if perfect bucket alignment is impossible"],"exampleFix":"// before\nquery: relabels(a, tag:(k,v1)) + b  // label v1 series has 30 points, b has 60\n// after: drop the sparse label or align cadence\nquery: relabels(a, tag:(k,v_dense)) + b","handlingStrategy":"validation","validationCode":"int rightSize = seriesRight.getResults().get(0).getValues().size();\nboolean ok = seriesLeft.getResults().stream()\n    .allMatch(g -> g.getValues().size() == rightSize);","typeGuard":null,"tryCatchPattern":"catch (IllegalExpressionException e) { /* find the label group whose length differs */ }","preventionTips":["Verify every label group is as dense as the base series","Drop sparse label values via relabels before combining"],"tags":["mqe","query-engine","labels","alignment"],"backgroundTag":null,"analyzedSha":"102af09b4a56064e22050dded10e2c52e490d040","analyzedAt":"2026-08-14T10:47:52.647Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}