apache / datafusion

Apache DataFusion SQL Query Engine
https://datafusion.apache.org/
Apache License 2.0
6.33k stars 1.2k forks source link

Unparse Map plan to SQL string #13478

Open goldmedal opened 3 days ago

goldmedal commented 3 days ago

Is your feature request related to a problem or challenge?

It's similar to https://github.com/apache/datafusion/issues/13477. We use the scalar function to handle the Map type but we should unparse it back to the right SQL.

Map Literal

The SQL for creating a MAP:

select MAP {'a': 1, 'b': 2}

The plan:

  Plan: Projection: map(make_array(Utf8("a"), Utf8("b")), make_array(Int64(1), Int64(2)))
EmptyRelation

Unparse the plan:

SELECT map(make_array('a', 'b'), make_array(1, 2))

Access a MAP

The SQL for accessing a MAP:

select map_col['a'] from (select MAP {'a': 1, 'b': 2} as map_col)

The plan:

Projection: get_field(map_col, Utf8("a"))
  Projection: map(make_array(Utf8("a"), Utf8("b")), make_array(Int64(1), Int64(2))) AS map_col
    EmptyRelation

Unparse the plan

SELECT get_field(map_col, 'a') FROM (SELECT map(make_array('a', 'b'), make_array(1, 2)) AS map_col)

Describe the solution you'd like

The SQL should be able to roundtrip for SQL-Plan-SQL.

Describe alternatives you've considered

No response

Additional context

No response