private String parseColumns(JsonNode rootNode, JsonNode physicalData) {
        // Add column key when fieldNames is not empty
        Iterator<String> fieldNames = null;
        try {
            RowType rowType = jsonDynamicSchemaFormat.extractSchema(rootNode);
            if (rowType != null) {
                fieldNames = rowType.getFieldNames().listIterator();
            }
        } catch (IllegalArgumentException e) {
            LOG.warn("extract schema failed", e);
            // Extract schema from physicalData
            JsonNode first = physicalData.isArray() ? physicalData.get(0) : physicalData;
            // Add column key when fieldNames is not empty
            fieldNames = first.fieldNames();
        }
        return genColumns(fieldNames);
    }
A builder used to set parameters to the output format's configuration in a fluent way.

@return builder
inlong-sort/sort-flink/sort-flink-v1.13/sort-connectors/doris/src/main/java/org/apache/inlong/sort/doris/table/DorisDynamicSchemaOutputFormat.java