Search before asking
Version
master / 4.0
What's Wrong?
When reading a Hive text-format table, an empty field for an ARRAY or MAP column is not deserialized as an empty collection. In DataTypeArraySerDe::deserialize_one_cell_from_hive_text and DataTypeMapSerDe::deserialize_one_cell_from_hive_text (be/src/core/data_type_serde/), an empty slice returns Status::InvalidArgument("slice is empty!"):
- For a nullable column,
DataTypeNullableSerDe swallows that error and inserts NULL, so an empty field silently becomes NULL.
- For a non-nullable column, the error propagates and fails the load.
Neither matches Spark/Hive semantics, where an empty complex-type field is an empty collection ([] / {}), distinct from an explicit NULL (\N).
What You Expected?
An empty Hive-text field for an ARRAY/MAP column should deserialize to an empty collection ([] / {}). An explicit NULL marker (\N) should remain NULL.
How to Reproduce?
Query a Hive text table (or use the Hive text serde) where an ARRAY/MAP column has an empty field. The value comes back as NULL (nullable column) or the read fails (non-nullable column), instead of an empty collection.
Anything Else?
Fix: on an empty slice, append an empty collection (a zero-length element) and return OK, instead of returning InvalidArgument. This changes empty nullable array/map fields from NULL to []/{}; explicit \N is unchanged. (Struct is intentionally left out — an "empty struct" has no canonical representation; that can be a follow-up.)
Are you willing to submit PR?
Code of Conduct
Search before asking
Version
master / 4.0
What's Wrong?
When reading a Hive text-format table, an empty field for an
ARRAYorMAPcolumn is not deserialized as an empty collection. InDataTypeArraySerDe::deserialize_one_cell_from_hive_textandDataTypeMapSerDe::deserialize_one_cell_from_hive_text(be/src/core/data_type_serde/), an empty slice returnsStatus::InvalidArgument("slice is empty!"):DataTypeNullableSerDeswallows that error and inserts NULL, so an empty field silently becomes NULL.Neither matches Spark/Hive semantics, where an empty complex-type field is an empty collection (
[]/{}), distinct from an explicit NULL (\N).What You Expected?
An empty Hive-text field for an ARRAY/MAP column should deserialize to an empty collection (
[]/{}). An explicit NULL marker (\N) should remain NULL.How to Reproduce?
Query a Hive text table (or use the Hive text serde) where an ARRAY/MAP column has an empty field. The value comes back as NULL (nullable column) or the read fails (non-nullable column), instead of an empty collection.
Anything Else?
Fix: on an empty slice, append an empty collection (a zero-length element) and return OK, instead of returning InvalidArgument. This changes empty nullable array/map fields from NULL to
[]/{}; explicit\Nis unchanged. (Struct is intentionally left out — an "empty struct" has no canonical representation; that can be a follow-up.)Are you willing to submit PR?
Code of Conduct