{"record":{"id":"4af710acffecbae3","repo":"databendlabs/databend","slug":"binary-literal-is-not-supported","errorCode":null,"errorMessage":"binary literal is not supported","messagePattern":"binary literal is not supported","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/query/formats/src/field_decoder/json_ast.rs","lineNumber":109,"sourceCode":"            ColumnBuilder::Boolean(c) => self.read_bool(c, value),\n            ColumnBuilder::Number(c) => with_number_mapped_type!(|NUM_TYPE| match c {\n                NumberColumnBuilder::NUM_TYPE(c) => {\n                    if NUM_TYPE::FLOATING {\n                        self.read_float(c, value)\n                    } else if NUM_TYPE::NEGATIVE {\n                        self.read_int(c, value)\n                    } else {\n                        self.read_uint(c, value)\n                    }\n                }\n            }),\n            ColumnBuilder::Decimal(c) => with_decimal_type!(|DECIMAL_TYPE| match c {\n                DecimalColumnBuilder::DECIMAL_TYPE(c, size) => self.read_decimal(c, *size, value),\n            }),\n            ColumnBuilder::Date(c) => self.read_date(c, value),\n            ColumnBuilder::Timestamp(c) => self.read_timestamp(c, value),\n            ColumnBuilder::TimestampTz(c) => self.read_timestamp_tz(c, value),\n            ColumnBuilder::Binary(_c) => unimplemented!(\"binary literal is not supported\"),\n            ColumnBuilder::String(c) => self.read_string(c, value),\n            ColumnBuilder::Array(c) => self.read_array(c, value, array_inner(data_type)),\n            ColumnBuilder::Map(c) => self.read_map(c, value, map_fields(data_type)),\n            ColumnBuilder::Tuple(fields) => self.read_tuple(fields, value, tuple_fields(data_type)),\n            ColumnBuilder::Bitmap(c) => self.read_bitmap(c, value),\n            ColumnBuilder::Variant(c) => self.read_variant(c, value),\n            ColumnBuilder::Geometry(c) => self.read_geometry(c, value),\n            ColumnBuilder::Geography(c) => self.read_geography(c, value),\n            ColumnBuilder::Interval(c) => self.read_interval(c, value),\n            ColumnBuilder::Vector(c) => self.read_vector(c, value),\n            ColumnBuilder::EmptyArray { len } => match value.as_array() {\n                Some(array) if array.is_empty() => {\n                    *len += 1;\n                    Ok(())\n                }\n                _ => Err(ErrorCode::BadBytes(\"Incorrect empty array value\")),\n            },\n            ColumnBuilder::EmptyMap { len } => match value.as_object() {","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/databendlabs/databend/blob/288d84d76e20a2f8f7173bda9691eb6ece301aa9/src/query/formats/src/field_decoder/json_ast.rs#L91-L127","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\n{\"id\": 1, \"payload\": \"\\u0001\\u0002\"}  -- loaded into BINARY column\n// after\n{\"id\": 1, \"payload\": \"AQI=\"}          -- base64 into VARCHAR column\n-- then: SELECT from_base64(payload) FROM t;","handlingStrategy":"validation","validationCode":"-- sql: ensure no BINARY columns in JSON ingest targets\nSELECT name FROM information_schema.columns\nWHERE table_name = 't' AND data_type ILIKE 'BINARY%';\n-- must return empty before COPY ... FROM NDJSON","typeGuard":"def json_safe_schema(columns):\n    bad = [c for c in columns if 'BINARY' in c.type.upper()]\n    if bad:\n        raise ValueError(f'BINARY columns unsupported in JSON ingest: {bad}')","tryCatchPattern":null,"preventionTips":["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"],"tags":["rust","panic","json","binary","ingest"],"backgroundTag":"operation-not-supported","analyzedSha":"288d84d76e20a2f8f7173bda9691eb6ece301aa9","analyzedAt":"2026-09-11T11:29:36.208Z","contentChangedAt":"2026-09-11T11:29:36.208Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}