-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
Currently, we support creating a map like
SELECT MAKE_MAP(1, 'a', 2, 'b', 3, 'c');
----
{1: a, 2: b, 3: c}
However, we can't access this map if its key isn't a string.
SELECT MAKE_MAP(1, 'a', 2, 'b', 3, 'c')[1]
It will get the error
External error: query failed: DataFusion error: Error during planning: Error during planning: Coercion from [Map(Field { name: "entries", data_type: Struct([Field { name: "key", data_type: Int64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), Int64] to the signature ArraySignature(ArrayAndIndex) failed. No function matches the given name and argument types 'array_element(Map(Field { name: "entries", data_type: Struct([Field { name: "key", data_type: Int64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), Int64)'. You might need to add explicit type casts.
Candidate functions:
array_element(array, index)
If the key is a string, it works well.
query T
SELECT MAKE_MAP('1', 'a', '2', 'b', '3', 'c')['1']
----
a
To Reproduce
As mentioned above, create a map with non-string keys and try to access it by the key.
Expected behavior
Given the SQL
SELECT MAKE_MAP(1, 'a', 2, 'b', 3, 'c')[1]
It should return the value 'a'
.
Additional context
jayzhan211
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working