private void flushSingleIdentifier(String identifier, List<String> values) {
        if (values == null || values.isEmpty()) {
            return;
        }
        String content = null;
        try {
            content = StringUtils.join(values, StringEscapeUtils.unescapeJava(s3Options.getLineDelimiter()));
            s3Helper.upload(identifier, content);
            LOGGER.info("Write {} records to s3 of identifier: {}", values.size(), identifier);
            writeOutNum.addAndGet(values.size());
            // Clean the data that has been loaded.
            values.clear();
        } catch (Exception e) {
            errorNum.addAndGet(values.size());
            if (!s3Options.ignoreSideOutputErrors()) {
                throw new RuntimeException(
                        String.format("Writing records to s3 of identifier:%s failed, the value: %s.",
                                identifier, content),
                        e);
            }
            LOGGER.warn("Writing records to s3 of identifier:{} failed "
                    + "and the dirty data will be throw away in the future"
                    + " because the option 'dirty.side-output.ignore-errors' is 'true'", identifier);
        }
    }
Flush data of single identifier to s3

@param identifier The identifier of dirty data
@param values The values of the identifier
inlong-sort/sort-flink/base/src/main/java/org/apache/inlong/sort/base/dirty/sink/s3/S3DirtySink.java