apache / apache/doris

[Bug](High) ROW binlog rejects valid HLL writes with a misleading QuantileState nullable error

Open
#65,865 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
15.9k
Forks
3.9k
Avg merge
2d 23h
Merged PRs (30d)
520

Description

### Tracking

- Tracking issue: #65265

### Search before asking

- [x] I searched the existing issues and found no issue with the same error or reproduction.

### Version

Reproduced while testing #62606 on Doris commit `a78b707ed040c3206df99cf43ea3101ab2ba5b90`.

Test environment: non-Cloud deployment with 1 FE and 3 BEs.

### What's Wrong?

A UNIQUE KEY merge-on-write table can be created with a `NOT NULL HLL` column and ROW binlog enabled, but the first valid HLL write fails in the BE conversion path:

```text
QuantileState column does not support nullable
```

The HLL column is declared `NOT NULL`, and the error incorrectly refers to QuantileState. The same ROW-binlog configuration can write BITMAP values successfully, so the failure is specific to the HLL ROW-binlog write path.

IVM requires ROW binlog, so this blocks IVM scenarios whose base tables contain HLL columns before refresh can begin.

### What You Expected?

If HLL is supported with ROW binlog, a valid `HLL_HASH` value should be written successfully and produce consumable row binlog. If this combination is intentionally unsupported, Doris should reject it during CREATE/ALTER analysis with an accurate error instead of accepting the table and failing every write.

### How to Reproduce?

```sql
DROP DATABASE IF EXISTS ivm_hll_row_binlog_repro;
CREATE DATABASE ivm_hll_row_binlog_repro;
USE ivm_hll_row_binlog_repro;

CREATE TABLE hll_row_binlog_base (
id BIGINT NOT NULL,
value HLL NOT NULL
)
UNIQUE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES (
'replication_num'='1',
'enable_unique_key_merge_on_write'='true',
'binlog.enable'='true',
'binlog.format'='ROW',
'binlog.need_historical_value'='true'
);

INSERT INTO hll_row_binlog_base VALUES (1, HLL_HASH('one'));
SELECT COUNT(*) FROM hll_row_binlog_base;
```

The CREATE succeeds, the INSERT fails with the error above, and the table remains empty.

### Regression Test Result

- Suite: `ivm_sql_complex_type_matrix`
- Jenkins: `regression-debug #792`
- Result: CREATE succeeds and the valid `HLL_HASH` INSERT fails consistently.

The suite currently records this behavior as a negative capability boundary and therefore passes; that pass means the failure is reproducible, not that the product behavior is correct.

### Anything Else?

The failure occurs in the BE HLL column conversion path when a nullmap is present. The returned error text appears to have been copied from the QuantileState converter.

### Are you willing to submit PR?

- [ ] Yes, I am willing to submit a PR!

Contributor guide

Open the contributing guide

Research direction

Start with the BE HLL column conversion path and the ivm_sql_complex_type_matrix regression suite. Reproduce the CREATE and HLL_HASH INSERT shown in the issue, then trace the conversion when a nullmap is present and compare the error with the QuantileState converter. Done means supported HLL ROW-binlog writes succeed with consumable row binlog, or CREATE/ALTER rejects the combination with an accurate error.

Written by the indexing model from the issue text.

Assessment

Tech stack
sql
Domain
backend, databases
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.