private ClickHouseSinkDTO getClickHouseInfo(SinkInfo sinkInfo) {
        ClickHouseSinkDTO ckInfo = ClickHouseSinkDTO.getFromJson(sinkInfo.getExtParams());

        // read from data node if not supplied by user
        if (StringUtils.isBlank(ckInfo.getJdbcUrl())) {
            String dataNodeName = sinkInfo.getDataNodeName();
            Preconditions.expectNotBlank(dataNodeName, ErrorCodeEnum.INVALID_PARAMETER,
                    "clickhouse jdbc url not specified and data node is empty");
            ClickHouseDataNodeInfo dataNodeInfo = (ClickHouseDataNodeInfo) dataNodeHelper.getDataNodeInfo(
                    dataNodeName, sinkInfo.getSinkType());
            CommonBeanUtils.copyProperties(dataNodeInfo, ckInfo);
            ckInfo.setJdbcUrl(ClickHouseDataNodeDTO.convertToJdbcUrl(dataNodeInfo.getUrl()));
            ckInfo.setPassword(dataNodeInfo.getToken());
        }
        return ckInfo;
    }
Operator for clickHouse resource, such as create sink resource, clickHouse tables, etc.
inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/sink/ck/ClickHouseResourceOperator.java