@Override
    public Object parse(SourceData sourceData, int rowIndex, Context context) {
        if (urlParser == null || partParser == null) {
            return null;
        }
        Object urlObj = urlParser.parse(sourceData, rowIndex, context);
        Object partObj = partParser.parse(sourceData, rowIndex, context);
        Object keyObj = keyParser != null ? keyParser.parse(sourceData, rowIndex, context) : null;

        if (urlObj == null || partObj == null) {
            return null;
        }

        String url = OperatorTools.parseString(urlObj);
        String part = OperatorTools.parseString(partObj);
        String key = keyObj != null ? OperatorTools.parseString(keyObj) : null;
        if (keyParser != null && key == null) {
            return null;
        }

        try {
            URL netUrl = new URL(url);
            Map<String, String> queryPairs = splitQuery(netUrl.getQuery());
            if ("QUERY".equals(part)) {
                if (key != null && queryPairs.containsKey(key)) {
                    return queryPairs.get(key);
                }
                return netUrl.getQuery();
            } else {
                switch (part) {
                    case "HOST":
                        return netUrl.getHost();
                    case "PATH":
                        return netUrl.getPath();
                    case "REF":
                        return netUrl.getRef();
                    case "PROTOCOL":
                        return netUrl.getProtocol();
                    case "AUTHORITY":
                        return netUrl.getAuthority();
                    case "FILE":
                        return netUrl.getFile();
                    case "USERINFO":
                        return netUrl.getUserInfo();
                    default:
                        return null;
                }
            }
        } catch (MalformedURLException e) {
            return null;
        }
    }
ParseUrlFunction  ->  parse_url(urlStr, keyword[, parameter])
description:
- Return NULL any required parameter is NULL
- Return the specified part from the urlStr. Valid values for keyword.
Note: The keyword is one of ('HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'AUTHORITY', 'FILE', 'USERINFO').
      Also a value of a particular key in QUERY can be extracted by providing the key as the third argument.
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/string/ParseUrlFunction.java