@Override
    @SneakyThrows
    public InstallInfo isExists(Model model) {
        InstallInfoJDBC installInfo = new InstallInfoJDBC(model);
        TableMetaInfo.addModel(model);

        final var table = TableHelper.getLatestTableForWrite(model);
        installInfo.setTableName(table);
        final var jdbcClient = (JDBCClient) client;
        if (!jdbcClient.tableExists(table)) {
            installInfo.setAllExist(false);
            return installInfo;
        }

        final var databaseColumns = getDatabaseColumns(table);
        final var isAnyColumnNotCreated =
            model
                .getColumns().stream()
                .map(ModelColumn::getColumnName)
                .map(ColumnName::getStorageName)
                .anyMatch(not(databaseColumns::contains));
        installInfo.setAllColumnsExist(isAnyColumnNotCreated);
        installInfo.setAllExist(!isAnyColumnNotCreated);
        return installInfo;
    }
JDBC table installer, uses standard SQL to create tables, indices, and views.
oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/JDBCTableInstaller.java