private String buildValuesCondition(List<String> fieldTypes, Row row) {
        String valuesCondition = fieldTypes.stream().map(
                f -> {
                    for (String item : NEED_QUOTE_TYPE) {
                        if (f.toLowerCase().contains(item)) {
                            return String.format("cast('?' as %s)", f.toLowerCase());
                        }
                    }
                    return "?";
                }).collect(Collectors.joining(", "));
        for (int i = 0; i < row.getArity(); i++) {
            Object rowField = row.getField(i);
            if (DtStringUtil.isEmptyOrNull(rowField)) {
                valuesCondition = valuesCondition.replaceFirst("'\\?'", "null");
            } else {
                valuesCondition = valuesCondition.replaceFirst("\\?", Matcher.quoteReplacement(rowField.toString()));
            }
        }
        return "(" + valuesCondition + ")";
    }
according to field types, build the values condition
replace ${valuesCondition}

@param fieldTypes field types
@return condition like '(?, ?, cast('?' as string))' and '?' will be replaced with row data
impala/impala-sink/src/main/java/com/dtstack/flink/sql/sink/impala/ImpalaOutputFormat.java