Skip to content

Realtime scans from MSQ cannot reliably read complex types #18340

Open

Description

@gianm

When ScanQueryFrameProcessor delegates work to a realtime server, it sends a scan query and writes the response into a frame. Their serialization when selected in a scan query is done by Jackson, and it is common for such objects to have "one-way" serialization (they can be serialized using Jackson, but cannot be deserialized).

For aggregating queries, typically these objects are deserialized by the associated aggregator's AggregatorFactory#deserialize method rather than by Jackson. This is problematic for scan queries, because they don't use AggregatorFactory. This leads to errors when attempting to write the resulting objects to a frame, because they aren't the expected type.

To fix it, we need to serialize and deserialize these complex objects in a coherent way. There are a couple options that come to mind,

  • We could add a new parameter to scan that causes it to serialize complex objects using TypeStrategy rather than allowing Jackson to handle it. MSQ realtime delegation would use this parameter. Then, when reading, we use the same TypeStrategy to deserialize the object.
  • We could rewrite scan queries in MSQ's realtime delegation code to wrap all complex types in complex_encode_base64, which would accomplish more or less the same thing- it would use the TypeStrategy to serialize the object.

This bug affects all MSQ queries that use realtime data and delegate scan involving complex types. An example query would be like:

SELECT "hllSketch"
FROM tbl
WHERE "foo" = 'bar'

Queries that involve aggregations on complex types wouldn't be affected.

Activity

  1. added
    Area - MSQFor multi stage queries - https://github.com/apache/druid/issues/12262
    on Jul 30, 2025
  2. gianm commented on Aug 6, 2025

    @gianm
    ContributorAuthor

    Note that this bug affects scan pushdown only. Aggregation pushdown, which is more commonly what happens with complex types, is not affected.

  3. added this to the 35.0.0 milestone on Aug 6, 2025
  4. modified the milestones: 35.0.0, 36.0.0 on Oct 7, 2025
  5. kgyrtkirk commented on Jan 12, 2026

    @kgyrtkirk
    Member

    I will move this out from 36.0.0 (into 37.0.0) for now - it doesn't seem like a new issue which should block the release.

  6. modified the milestones: 36.0.0, 37.0.0 on Jan 12, 2026
  7. cecemei commented on Apr 7, 2026

    @cecemei
    Contributor

    @gianm whats the status for this issue? should we move this to 38?

  8. gianm commented on Apr 8, 2026

    @gianm
    ContributorAuthor

    Yes let's move it to 38.

  9. modified the milestones: 37.0.0, 38.0.0 on Apr 13, 2026
  10. nozjkoitop commented on Jun 11, 2026

    @nozjkoitop
    Contributor

    Hey @gianm

    This looks a lot like the issue I was seeing before. You might want to take a look at #16607 (later refreshed as #18859), it fixes a very similar MSQ realtime path problem with complex types/HLL sketches

    Not sure it covers every case here, but it seems closely related, it might be worth reopening #18859 and merging the latest changes rather than starting from scratch

  11. kfaraz commented on Aug 5, 2026

    @kfaraz
    Contributor

    Moving this milestone from 38.0.0 to 39.0.0 as there has not been a PR yet.

  12. modified the milestones: 38.0.0, 39.0.0 on Aug 5, 2026
  13. zhang-arvin commented on Aug 20, 2026

    @zhang-arvin

    I'd like to work on this issue. Could you please assign it to me?

  14. added a commit that references this issue on Sep 22, 2026
    8d06cd3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area - MSQFor multi stage queries - https://github.com/apache/druid/issues/12262BugMSQ

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions