databendlabs/databend · error
binary literal is not supported
Error message
binary literal is not supported
What it means
The JSON/AST field decoder converts raw field values (from formats like NDJSON) into Databend columns. It has no implementation for decoding values into Binary columns, so it raises unimplemented!("binary literal is not supported"). Loading binary-typed columns from JSON-based sources is simply not supported.
Solutions
- Change the target column from BINARY to VARCHAR (store base64/hex text) for JSON ingestion
- Encode binary payloads as base64 in JSON and decode into a VARCHAR column, converting later with from_base64
- Use a binary-capable file format (Parquet/Avro) instead of NDJSON for BINARY columns
- Implement a Binary arm in the field decoder if you maintain the code
Example fix
// before
{"id": 1, "payload": "\u0001\u0002"} -- loaded into BINARY column
// after
{"id": 1, "payload": "AQI="} -- base64 into VARCHAR column
-- then: SELECT from_base64(payload) FROM t; Defensive patterns
Strategy: validation
Validate before calling
-- sql: ensure no BINARY columns in JSON ingest targets SELECT name FROM information_schema.columns WHERE table_name = 't' AND data_type ILIKE 'BINARY%'; -- must return empty before COPY ... FROM NDJSON
Type guard
def json_safe_schema(columns):
bad = [c for c in columns if 'BINARY' in c.type.upper()]
if bad:
raise ValueError(f'BINARY columns unsupported in JSON ingest: {bad}') Prevention
- Use VARCHAR + base64 for binary payloads in JSON pipelines
- Prefer Parquet/Avro formats when BINARY columns are required
- Check target schema data types before building JSON ingest jobs
When it happens
Trigger: COPY ... FROM NDJSON (or another AST-decoded JSON format) into a table with a BINARY/Binary-typed column, or reading a Binary column through read_field_with_data_type.
Common situations: Pipelines targeting BINARY columns from JSON feeds; schema drift where a column became BINARY after the pipeline was built; ORC/Avro binary data routed through the JSON decoder.
Related errors
AI-assisted analysis of databendlabs/databend@288d84d76e (2026-09-11).
Data as JSON: /api/errors/4af710acffecbae3.
Report an issue: GitHub.
Appendix: source
Thrown at src/query/formats/src/field_decoder/json_ast.rs:109
ColumnBuilder::Boolean(c) => self.read_bool(c, value),
ColumnBuilder::Number(c) => with_number_mapped_type!(|NUM_TYPE| match c {
NumberColumnBuilder::NUM_TYPE(c) => {
if NUM_TYPE::FLOATING {
self.read_float(c, value)
} else if NUM_TYPE::NEGATIVE {
self.read_int(c, value)
} else {
self.read_uint(c, value)
}
}
}),
ColumnBuilder::Decimal(c) => with_decimal_type!(|DECIMAL_TYPE| match c {
DecimalColumnBuilder::DECIMAL_TYPE(c, size) => self.read_decimal(c, *size, value),
}),
ColumnBuilder::Date(c) => self.read_date(c, value),
ColumnBuilder::Timestamp(c) => self.read_timestamp(c, value),
ColumnBuilder::TimestampTz(c) => self.read_timestamp_tz(c, value),
ColumnBuilder::Binary(_c) => unimplemented!("binary literal is not supported"),
ColumnBuilder::String(c) => self.read_string(c, value),
ColumnBuilder::Array(c) => self.read_array(c, value, array_inner(data_type)),
ColumnBuilder::Map(c) => self.read_map(c, value, map_fields(data_type)),
ColumnBuilder::Tuple(fields) => self.read_tuple(fields, value, tuple_fields(data_type)),
ColumnBuilder::Bitmap(c) => self.read_bitmap(c, value),
ColumnBuilder::Variant(c) => self.read_variant(c, value),
ColumnBuilder::Geometry(c) => self.read_geometry(c, value),
ColumnBuilder::Geography(c) => self.read_geography(c, value),
ColumnBuilder::Interval(c) => self.read_interval(c, value),
ColumnBuilder::Vector(c) => self.read_vector(c, value),
ColumnBuilder::EmptyArray { len } => match value.as_array() {
Some(array) if array.is_empty() => {
*len += 1;
Ok(())
}
_ => Err(ErrorCode::BadBytes("Incorrect empty array value")),
},
ColumnBuilder::EmptyMap { len } => match value.as_object() {View on GitHub (pinned to 288d84d76e)