diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java index edc072504cb0b..78116b9314897 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java @@ -1281,9 +1281,8 @@ public TSStatus insertStringRecords(TSInsertStringRecordsReq req) { try { plan.setDeviceId(new PartialPath(req.getDeviceIds().get(i))); plan.setTime(req.getTimestamps().get(i)); - plan.setMeasurements(req.getMeasurementsList().get(i).toArray(new String[0])); + addMeasurementAndValue(plan, req.getMeasurementsList().get(i), req.getValuesList().get(i)); plan.setDataTypes(new TSDataType[plan.getMeasurements().length]); - plan.setValues(req.getValuesList().get(i).toArray(new Object[0])); plan.setNeedInferType(true); TSStatus status = checkAuthority(plan, req.getSessionId()); if (status != null) { @@ -1307,6 +1306,24 @@ public TSStatus insertStringRecords(TSInsertStringRecordsReq req) { allCheckSuccess, tsStatus, insertRowsPlan.getResults(), req.deviceIds.size()); } + private void addMeasurementAndValue( + InsertRowPlan insertRowPlan, List measurements, List values) { + List newMeasurements = new ArrayList<>(measurements.size()); + List newValues = new ArrayList<>(values.size()); + + for (int i = 0; i < measurements.size(); ++i) { + String value = values.get(i); + if (value.isEmpty()) { + continue; + } + newMeasurements.add(measurements.get(i)); + newValues.add(value); + } + + insertRowPlan.setValues(newValues.toArray(new Object[0])); + insertRowPlan.setMeasurements(newMeasurements.toArray(new String[0])); + } + @Override public TSStatus testInsertTablet(TSInsertTabletReq req) { LOGGER.debug("Test insert batch request receive.");