public void setRouting(String modelName, List<ModelColumn> modelColumns) throws IllegalStateException {
        if (CollectionUtils.isEmpty(modelColumns)) {
            return;
        }

        List<ModelColumn> routingColumns = modelColumns.stream()
                .filter(col -> col.getElasticSearchExtension().isRouting())
                .collect(Collectors.toList());

        int size = routingColumns.size();
        if (size > 1) {
            throw new IllegalStateException(modelName + "'s routing field is duplicated "
                    + routingColumns.stream()
                            .map(col -> col.getColumnName().toString())
                            .collect(Collectors.joining(",", "[", "]")));
        }

        if (size == 1) {
            routing = Optional.of(routingColumns.get(0).getColumnName().getName());
        }
    }
Routing defines a field of {@link Record} to control the sharding policy.
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ElasticSearchModelExtension.java