public void createTable(
            String tableName,
            HudiTableInfo tableInfo,
            boolean useRealTimeInputFormat)
            throws TException, IOException {
        Table hiveTable = this.getEmptyTable(dbName, tableName);
        hiveTable.setOwner(UserGroupInformation.getCurrentUser().getUserName());
        hiveTable.setCreateTime((int) (System.currentTimeMillis() / 1000));

        Map<String, String> properties = new HashMap<>();
        String location = this.warehouse + "/" + dbName + ".db" + "/" + tableName;
        properties.put("path", location);

        List<FieldSchema> cols = tableInfo.getColumns()
                .stream()
                .map(column -> {
                    FieldSchema fieldSchema = new FieldSchema();
                    fieldSchema.setName(column.getName());
                    fieldSchema.setType(HudiTypeConverter.convert(column));
                    fieldSchema.setComment(column.getDesc());
                    return fieldSchema;
                })
                .collect(Collectors.toList());

        // Build storage of hudi table
        StorageDescriptor sd = new StorageDescriptor();
        sd.setCols(cols);
        hiveTable.setDbName(dbName);
        hiveTable.setTableName(tableName);
        // FIXME: splitSchemas need config by frontend

        HudiFileFormat baseFileFormat = HudiFileFormat.PARQUET;
        // ignore uber input Format
        String inputFormatClassName =
                getInputFormatClassName(baseFileFormat, useRealTimeInputFormat);
        String outputFormatClassName = getOutputFormatClassName(baseFileFormat);
        String serDeClassName = getSerDeClassName(baseFileFormat);
        sd.setInputFormat(inputFormatClassName);
        sd.setOutputFormat(outputFormatClassName);

        Map<String, String> serdeProperties = new HashMap<>();
        serdeProperties.put("path", location);
        serdeProperties.put(IS_QUERY_AS_RO_TABLE, String.valueOf(!useRealTimeInputFormat));
        sd.setSerdeInfo(new SerDeInfo(null, serDeClassName, serdeProperties));
        sd.setLocation(location);
        hiveTable.setSd(sd);

        hiveTable.setParameters(properties);

        client.createTable(hiveTable);
    }
Create hudi table and register to hive metastore
@param tableName the hudi table name
@param tableInfo the hudi table info
@param useRealTimeInputFormat ignore uber input Format
inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/sink/hudi/HudiCatalogClient.java