Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Access a Map with a non-string keys #11785

Open
goldmedal opened this issue Aug 2, 2024 · 5 comments · May be fixed by #12259
Open

Access a Map with a non-string keys #11785

goldmedal opened this issue Aug 2, 2024 · 5 comments · May be fixed by #12259
Assignees
Labels
bug Something isn't working

Comments

@goldmedal
Copy link
Contributor

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

#11780 (comment)

@goldmedal goldmedal added the bug Something isn't working label Aug 2, 2024
@dharanad
Copy link
Contributor

dharanad commented Aug 2, 2024

Interesting, I can give it a try.

@dharanad
Copy link
Contributor

dharanad commented Aug 2, 2024

take

@Weijun-H
Copy link
Member

I think map_extract function can benefit this issue #11969

@dharanad
Copy link
Contributor

I think map_extract function can benefit this issue #11969

I will prioritise this issue

@dharanad
Copy link
Contributor

Seems like a bug with GetFieldFunc function

@dharanad dharanad linked a pull request Aug 30, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants