public void buildColumn(String id, String rawdata, int defaultValue) {
        DataTable dataset = new DataTable(rawdata);

        final List<String> sortedKeys = dataset.sortedKeys(new KeyComparator(true));
        if (buckets.isEmpty()) {
            for (int i = 0; i < sortedKeys.size(); i++) {
                final Bucket bucket = new Bucket();
                final String minValue = sortedKeys.get(i);

                if (Bucket.INFINITE_NEGATIVE.equals(minValue)) {
                    bucket.infiniteMin();
                } else {
                    bucket.setMin(Integer.parseInt(minValue));
                }

                if (i == sortedKeys.size() - 1) {
                    // last element
                    bucket.infiniteMax();
                } else {
                    final String max = sortedKeys.get(i + 1);
                    if (Bucket.INFINITE_POSITIVE.equals(max)) {
                        // If reach the infinite positive before the last element, ignore all other.
                        // Only for fail safe.
                        bucket.infiniteMax();
                        break;
                    } else {
                        bucket.setMax(Integer.parseInt(max));
                    }
                }
                this.addBucket(bucket);
            }
        }

        HeatMap.HeatMapColumn column = new HeatMap.HeatMapColumn();
        column.setId(id);
        sortedKeys.forEach(key -> {
            if (dataset.hasKey(key)) {
                column.addValue(dataset.get(key));
            } else {
                column.addValue((long) defaultValue);
            }
        });
        values.add(column);
    }
Build one heatmap value column based on rawdata in the storage and row id.

@param id      of the row
@param rawdata literal string, represent a {@link DataTable}
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/HeatMap.java