Hive: error when trying to map key and value












0














I have a query like this where I am trying to convert array<struct<key:string,value:array<string>> to map<string,array<string>>.
The query is



SELECT name, address, location, map(collect_set(k1),collect_set(concat_ws("",v1))) AS key_one
FROM table_a
lateral view inline(key_one) t1 as k1,v1
GROUP BY name, address, location;


I get the error as FAILED: SemanticException [Error 10016]: Line 1:62 Argument type mismatch 'v1': Primitive Type is expected but array<string>" is found










share|improve this question





























    0














    I have a query like this where I am trying to convert array<struct<key:string,value:array<string>> to map<string,array<string>>.
    The query is



    SELECT name, address, location, map(collect_set(k1),collect_set(concat_ws("",v1))) AS key_one
    FROM table_a
    lateral view inline(key_one) t1 as k1,v1
    GROUP BY name, address, location;


    I get the error as FAILED: SemanticException [Error 10016]: Line 1:62 Argument type mismatch 'v1': Primitive Type is expected but array<string>" is found










    share|improve this question



























      0












      0








      0







      I have a query like this where I am trying to convert array<struct<key:string,value:array<string>> to map<string,array<string>>.
      The query is



      SELECT name, address, location, map(collect_set(k1),collect_set(concat_ws("",v1))) AS key_one
      FROM table_a
      lateral view inline(key_one) t1 as k1,v1
      GROUP BY name, address, location;


      I get the error as FAILED: SemanticException [Error 10016]: Line 1:62 Argument type mismatch 'v1': Primitive Type is expected but array<string>" is found










      share|improve this question















      I have a query like this where I am trying to convert array<struct<key:string,value:array<string>> to map<string,array<string>>.
      The query is



      SELECT name, address, location, map(collect_set(k1),collect_set(concat_ws("",v1))) AS key_one
      FROM table_a
      lateral view inline(key_one) t1 as k1,v1
      GROUP BY name, address, location;


      I get the error as FAILED: SemanticException [Error 10016]: Line 1:62 Argument type mismatch 'v1': Primitive Type is expected but array<string>" is found







      hadoop hive hiveql






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 12 at 3:57

























      asked Nov 12 at 3:14









      John Constantine

      1417




      1417
























          1 Answer
          1






          active

          oldest

          votes


















          0














          The error says that you can not have complex data types (i.e. array, struct, map) as a key to map.
          And that make sense right. key has to be only one value so it has to be primitive (i.e String, Int, BigInt)



          However, your code tries to put key as array and so the error. What you need to do is first explode the array and then try to get the key and value to form a map.



          This might work.



          create table



          create table temp.test_struct (test array<struct<key:string,value:array<string>>>) 


          Insert values



          insert into temp.test_struct 
          select array(
          NAMED_STRUCT("key", "k1", "value", array("a","b","c")),
          NAMED_STRUCT("key", "k2", "value", array("x","y","z"))
          ) from (select 'a') x


          Convert Array of Struct to map



          select test, map(t1.key, t1.value) map_col
          from
          temp.test_struct
          lateral view inline(test) t1


          enter image description here






          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53255520%2fhive-error-when-trying-to-map-key-and-value%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            The error says that you can not have complex data types (i.e. array, struct, map) as a key to map.
            And that make sense right. key has to be only one value so it has to be primitive (i.e String, Int, BigInt)



            However, your code tries to put key as array and so the error. What you need to do is first explode the array and then try to get the key and value to form a map.



            This might work.



            create table



            create table temp.test_struct (test array<struct<key:string,value:array<string>>>) 


            Insert values



            insert into temp.test_struct 
            select array(
            NAMED_STRUCT("key", "k1", "value", array("a","b","c")),
            NAMED_STRUCT("key", "k2", "value", array("x","y","z"))
            ) from (select 'a') x


            Convert Array of Struct to map



            select test, map(t1.key, t1.value) map_col
            from
            temp.test_struct
            lateral view inline(test) t1


            enter image description here






            share|improve this answer


























              0














              The error says that you can not have complex data types (i.e. array, struct, map) as a key to map.
              And that make sense right. key has to be only one value so it has to be primitive (i.e String, Int, BigInt)



              However, your code tries to put key as array and so the error. What you need to do is first explode the array and then try to get the key and value to form a map.



              This might work.



              create table



              create table temp.test_struct (test array<struct<key:string,value:array<string>>>) 


              Insert values



              insert into temp.test_struct 
              select array(
              NAMED_STRUCT("key", "k1", "value", array("a","b","c")),
              NAMED_STRUCT("key", "k2", "value", array("x","y","z"))
              ) from (select 'a') x


              Convert Array of Struct to map



              select test, map(t1.key, t1.value) map_col
              from
              temp.test_struct
              lateral view inline(test) t1


              enter image description here






              share|improve this answer
























                0












                0








                0






                The error says that you can not have complex data types (i.e. array, struct, map) as a key to map.
                And that make sense right. key has to be only one value so it has to be primitive (i.e String, Int, BigInt)



                However, your code tries to put key as array and so the error. What you need to do is first explode the array and then try to get the key and value to form a map.



                This might work.



                create table



                create table temp.test_struct (test array<struct<key:string,value:array<string>>>) 


                Insert values



                insert into temp.test_struct 
                select array(
                NAMED_STRUCT("key", "k1", "value", array("a","b","c")),
                NAMED_STRUCT("key", "k2", "value", array("x","y","z"))
                ) from (select 'a') x


                Convert Array of Struct to map



                select test, map(t1.key, t1.value) map_col
                from
                temp.test_struct
                lateral view inline(test) t1


                enter image description here






                share|improve this answer












                The error says that you can not have complex data types (i.e. array, struct, map) as a key to map.
                And that make sense right. key has to be only one value so it has to be primitive (i.e String, Int, BigInt)



                However, your code tries to put key as array and so the error. What you need to do is first explode the array and then try to get the key and value to form a map.



                This might work.



                create table



                create table temp.test_struct (test array<struct<key:string,value:array<string>>>) 


                Insert values



                insert into temp.test_struct 
                select array(
                NAMED_STRUCT("key", "k1", "value", array("a","b","c")),
                NAMED_STRUCT("key", "k2", "value", array("x","y","z"))
                ) from (select 'a') x


                Convert Array of Struct to map



                select test, map(t1.key, t1.value) map_col
                from
                temp.test_struct
                lateral view inline(test) t1


                enter image description here







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 13 at 16:02









                Gaurang Shah

                2,94611132




                2,94611132






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53255520%2fhive-error-when-trying-to-map-key-and-value%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Florida Star v. B. J. F.

                    Error while running script in elastic search , gateway timeout

                    Adding quotations to stringified JSON object values