Hive: error when trying to map key and value









up vote
0
down vote

favorite












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



























    up vote
    0
    down vote

    favorite












    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

























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      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

















          up vote
          0
          down vote













          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








            up vote
            0
            down vote













            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
























              up vote
              0
              down vote













              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






















                up vote
                0
                down vote










                up vote
                0
                down vote









                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,90811132




                2,90811132



























                    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







                    這個網誌中的熱門文章

                    Barbados

                    How to read a connectionString WITH PROVIDER in .NET Core?

                    Node.js Script on GitHub Pages or Amazon S3