@Override
    public Object parse(SourceData sourceData, int rowIndex, Context context) {
        Object exprObj = exprParser.parse(sourceData, rowIndex, context);
        Object startExprObj = startExprParser.parse(sourceData, rowIndex, context);

        if (exprObj == null || startExprObj == null) {
            return null;
        }

        if (!isSameType(exprObj, startExprObj)) {
            throw new IllegalArgumentException("Both arguments must be of the same type.");
        }

        if (exprObj instanceof byte[] && startExprObj instanceof byte[]) {
            String exprString = new String((byte[]) exprObj);
            String startExprString = new String((byte[]) startExprObj);
            if (startExprString.isEmpty()) {
                return true;
            }

            return exprString.startsWith(startExprString);
        }

        String exprString = OperatorTools.parseString(exprObj);
        String startExprString = OperatorTools.parseString(startExprObj);

        if (startExprString.isEmpty()) {
            return true;
        }

        return exprString.startsWith(startExprString);
    }
StartsWithFunction  ->  startswith(s1,s2)
description:
- Return NULL if either argument is NULL;
- Return whether 's2' starts with 's2'.
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/string/StartsWithFunction.java