LauraXia123 opened a new issue, #12094:
URL: https://github.com/apache/gravitino/issues/12094
## Description
Currently, the Gravitino Web UI does not fully support creating Doris tables
with range or list partitions. Several improvements are needed to make this
workflow functional end-to-end.
## Current issues
### 1. Range partition field reset bug
When filling in Range Partition fields (Name, Upper Bound, Lower Bound),
entering a value in one field resets the other fields. This is caused by Ant
Design `Form.useWatch` triggering cascading re-renders that overwrite sibling
field values when used inside nested `Form.List`.
### 2. Range partition missing `type` field in JSON
The backend requires each assignment object to include `type: "range"` and
`properties: null`, but the frontend was only sending `{ name, upper, lower }`,
causing a `Malformed json request` error (code 1001).
### 3. List partition UI not implemented
The UI had no support for list partition interaction, submission, or
display. Users could select the "list" strategy but could not define partition
assignments (name + values).
### 4. List partition `lists` semantics mismatch
The backend expects `LiteralDTO[][]` where each inner array represents one
IN tuple whose length must equal the number of partition columns. The initial
frontend implementation incorrectly treated comma-separated values as a single
tuple instead of splitting them for single-column partitions, causing `The
number of partitioning columns must be consistent` error (code 1001).
### 5. Doris list partition column must be NOT NULL
Doris requires list partition columns to be `NOT NULL`, but the UI does not
enforce or auto-set this constraint, causing `The list partition column must be
NOT NULL` error (code 1002).
### 6. Doris OLAP table first column type restriction
Doris OLAP tables do not allow `float`, `double`, `string`, or `array` as
the first column. The UI does not warn users about this, causing `The olap
table first column could not be float, double, string or array` error (code
1002).
## Proposed improvements
1. **Fix range partition field reset**: Use `form.getFieldValue()` for
synchronous reads instead of `Form.useWatch` for columns/fieldName, and manage
assignment state via `form.setFieldValue` directly instead of nested
`Form.List`. Use CSS `hidden` instead of conditional rendering to prevent
Form.List unmount/remount.
2. **Add `type` and `properties` fields**: Include `type: "range"` / `type:
"list"` and `properties: null` in assignment objects submitted to the backend.
3. **Implement list partition UI**: Add `ListAssignments` component with
support for multiple value groups (each group = one IN tuple), matching the
backend `LiteralDTO[][]` semantics.
4. **Correct `lists` construction**: For single-column partitions, split
comma-separated values into individual tuples (`[[v1], [v2], [v3]]`). For
multi-column partitions, keep all values in one tuple (`[[v1, v2]]`).
5. **Auto-set NOT NULL for list partition columns**: When strategy is "list"
and provider is "jdbc-doris", automatically set the partition column to
`required: true`.
6. **Add validation hints for Doris-specific restrictions**: Warn users when
the first column type is `float`/`double`/`string` for Doris tables.
## Affected files
- `web-v2/web/src/components/PartitionPanel.js` - Partition UI components
- `web-v2/web/src/app/catalogs/rightContent/CreateTableDialog.js` - Table
creation dialog
- `web-v2/web/src/config/index.js` - Partition configuration
## Related
- #12093 - Doris list/range partition assignments are empty when loading a
table (backend issue)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]