public String build(TablePath tablePath) {
        StringBuilder createTableSql = new StringBuilder();
        createTableSql
                .append("CREATE TABLE ")
                .append(CatalogUtils.quoteIdentifier(tablePath.getDatabaseName(), fieldIde, "\""))
                .append(".")
                .append(CatalogUtils.quoteIdentifier(tablePath.getTableName(), fieldIde, "\""))
                .append(" (\n");

        List<String> columnSqls =
                columns.stream()
                        .map(column -> CatalogUtils.getFieldIde(buildColumnSql(column), fieldIde))
                        .collect(Collectors.toList());

        // Add primary key directly in the create table statement
        if (createIndex
                && primaryKey != null
                && primaryKey.getColumnNames() != null
                && !primaryKey.getColumnNames().isEmpty()) {
            columnSqls.add(buildPrimaryKeySql(primaryKey));
        }

        if (createIndex && CollectionUtils.isNotEmpty(constraintKeys)) {
            for (ConstraintKey constraintKey : constraintKeys) {
                if (StringUtils.isBlank(constraintKey.getConstraintName())
                        || (primaryKey != null
                                && (StringUtils.equals(
                                                primaryKey.getPrimaryKey(),
                                                constraintKey.getConstraintName())
                                        || primaryContainsAllConstrainKey(
                                                primaryKey, constraintKey)))) {
                    continue;
                }
                switch (constraintKey.getConstraintType()) {
                    case UNIQUE_KEY:
                        String uniqueKeySql = buildUniqueKeySql(constraintKey);
                        columnSqls.add(uniqueKeySql);
                        break;
                    case INDEX_KEY:
                    case FOREIGN_KEY:
                        break;
                }
            }
        }

        createTableSql.append(String.join(",\n", columnSqls));
        createTableSql.append("\n)");
        if (comment != null) {
            createTableSql.append(" COMMENT '").append(comment).append("'");
        }

        return createTableSql.toString();
    }
@Test
    public void testBuild() {
        String dataBaseName = "test_database";
        String tableName = "test_table";
        TablePath tablePath = TablePath.of(dataBaseName, tableName);
        TableSchema tableSchema =
                TableSchema.builder()
                        .column(PhysicalColumn.of("id", BasicType.LONG_TYPE, 22, false, null, "id"))
                        .column(
                                PhysicalColumn.of(
                                        "name", BasicType.STRING_TYPE, 128, false, null, "name"))
                        .column(
                                PhysicalColumn.of(
                                        "age", BasicType.INT_TYPE, (Long) null, true, null, "age"))
                        .column(
                                PhysicalColumn.of(
                                        "createTime",
                                        LocalTimeType.LOCAL_DATE_TIME_TYPE,
                                        3,
                                        true,
                                        null,
                                        "createTime"))
                        .column(
                                PhysicalColumn.of(
                                        "lastUpdateTime",
                                        LocalTimeType.LOCAL_DATE_TIME_TYPE,
                                        3,
                                        true,
                                        null,
                                        "lastUpdateTime"))
                        .primaryKey(PrimaryKey.of("id", Lists.newArrayList("id")))
                        .constraintKey(
                                ConstraintKey.of(
                                        ConstraintKey.ConstraintType.UNIQUE_KEY,
                                        "name",
                                        Lists.newArrayList(
                                                ConstraintKey.ConstraintKeyColumn.of(
                                                        "name", null))))
                        .build();
        CatalogTable catalogTable =
                CatalogTable.of(
                        TableIdentifier.of("test_catalog", dataBaseName, tableName),
                        tableSchema,
                        new HashMap<>(),
                        new ArrayList<>(),
                        "User table");

        String createTableSql =
                new SapHanaCreateTableSqlBuilder(catalogTable, true).build(tablePath);
        String expect =
                "CREATE TABLE \"test_database\".\"test_table\" (\n"
                        + "\"id\" BIGINT NOT NULL COMMENT 'id',\n"
                        + "\"name\" NVARCHAR(128) NOT NULL COMMENT 'name',\n"
                        + "\"age\" INTEGER NULL COMMENT 'age',\n"
                        + "\"createTime\" SECONDDATE NULL COMMENT 'createTime',\n"
                        + "\"lastUpdateTime\" SECONDDATE NULL COMMENT 'lastUpdateTime',\n"
                        + "PRIMARY KEY (\"id\"),\n"
                        + "UNIQUE (\"name\")\n"
                        + ") COMMENT 'User table'";
        Assertions.assertEquals(expect, createTableSql);

        // skip index
        String createTableSqlSkipIndex =
                new SapHanaCreateTableSqlBuilder(catalogTable, false).build(tablePath);
        String expectSkipIndex =
                "CREATE TABLE \"test_database\".\"test_table\" (\n"
                        + "\"id\" BIGINT NOT NULL COMMENT 'id',\n"
                        + "\"name\" NVARCHAR(128) NOT NULL COMMENT 'name',\n"
                        + "\"age\" INTEGER NULL COMMENT 'age',\n"
                        + "\"createTime\" SECONDDATE NULL COMMENT 'createTime',\n"
                        + "\"lastUpdateTime\" SECONDDATE NULL COMMENT 'lastUpdateTime'\n"
                        + ") COMMENT 'User table'";
        Assertions.assertEquals(expectSkipIndex, createTableSqlSkipIndex);
    }