BigQuery Custom Function (Bitwise function) Question



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








1















I'm trying to create a custom function that performs some scientific logarithmic math but I'm not understanding the error.



In postgreSQL or most other SQL and programing languages, it's as simple as this:



acc = 10^(val/10)


In BigQuery, when I create a TEMP function and SQL



 CREATE TEMP FUNCTION to_acc(x NUMERIC) AS (10^(x/10));
SELECT val, to_acc(10) AS result


I get the following error:



> Bitwise operator ^ requires two integer/BYTES arguments of the same
> type, but saw DOUBLE and NUMERIC; failed to parse CREATE [TEMP]
> FUNCTION statement at [1:108]


So the Bitwise operator only works on integer/bytes....? All of our data are floats...



Is this a limitation of BigQuery or is there a way around this?










share|improve this question



















  • 1





    cloud.google.com/bigquery/docs/reference/standard-sql/…

    – Mikhail Berlyant
    Nov 13 '18 at 21:33

















1















I'm trying to create a custom function that performs some scientific logarithmic math but I'm not understanding the error.



In postgreSQL or most other SQL and programing languages, it's as simple as this:



acc = 10^(val/10)


In BigQuery, when I create a TEMP function and SQL



 CREATE TEMP FUNCTION to_acc(x NUMERIC) AS (10^(x/10));
SELECT val, to_acc(10) AS result


I get the following error:



> Bitwise operator ^ requires two integer/BYTES arguments of the same
> type, but saw DOUBLE and NUMERIC; failed to parse CREATE [TEMP]
> FUNCTION statement at [1:108]


So the Bitwise operator only works on integer/bytes....? All of our data are floats...



Is this a limitation of BigQuery or is there a way around this?










share|improve this question



















  • 1





    cloud.google.com/bigquery/docs/reference/standard-sql/…

    – Mikhail Berlyant
    Nov 13 '18 at 21:33













1












1








1








I'm trying to create a custom function that performs some scientific logarithmic math but I'm not understanding the error.



In postgreSQL or most other SQL and programing languages, it's as simple as this:



acc = 10^(val/10)


In BigQuery, when I create a TEMP function and SQL



 CREATE TEMP FUNCTION to_acc(x NUMERIC) AS (10^(x/10));
SELECT val, to_acc(10) AS result


I get the following error:



> Bitwise operator ^ requires two integer/BYTES arguments of the same
> type, but saw DOUBLE and NUMERIC; failed to parse CREATE [TEMP]
> FUNCTION statement at [1:108]


So the Bitwise operator only works on integer/bytes....? All of our data are floats...



Is this a limitation of BigQuery or is there a way around this?










share|improve this question
















I'm trying to create a custom function that performs some scientific logarithmic math but I'm not understanding the error.



In postgreSQL or most other SQL and programing languages, it's as simple as this:



acc = 10^(val/10)


In BigQuery, when I create a TEMP function and SQL



 CREATE TEMP FUNCTION to_acc(x NUMERIC) AS (10^(x/10));
SELECT val, to_acc(10) AS result


I get the following error:



> Bitwise operator ^ requires two integer/BYTES arguments of the same
> type, but saw DOUBLE and NUMERIC; failed to parse CREATE [TEMP]
> FUNCTION statement at [1:108]


So the Bitwise operator only works on integer/bytes....? All of our data are floats...



Is this a limitation of BigQuery or is there a way around this?







google-bigquery






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 14 '18 at 2:07









vencaslac

1,183420




1,183420










asked Nov 13 '18 at 21:30









user2259963user2259963

6218




6218







  • 1





    cloud.google.com/bigquery/docs/reference/standard-sql/…

    – Mikhail Berlyant
    Nov 13 '18 at 21:33












  • 1





    cloud.google.com/bigquery/docs/reference/standard-sql/…

    – Mikhail Berlyant
    Nov 13 '18 at 21:33







1




1





cloud.google.com/bigquery/docs/reference/standard-sql/…

– Mikhail Berlyant
Nov 13 '18 at 21:33





cloud.google.com/bigquery/docs/reference/standard-sql/…

– Mikhail Berlyant
Nov 13 '18 at 21:33












2 Answers
2






active

oldest

votes


















1














As far as I know, the operator ^ has not the same functionality in BigQuery as it does in PostgreSQL.



While in PostgreSQL it is the power operator, in BigQuery it performs an XOR (and indeed only works on integers and bytes). Based on your use case description I believe you want to calculate the (val/10)th power of 10.



As a way around this you may try the built in standard SQL mathematical functions.






share|improve this answer






























    1














    Apparently you want this:



    #standardSQL
    SELECT POW(10, (x/10))
    FROM (SELECT 30.7 x)


    With POW(X, Y) being:




    Returns the value of X raised to the power of Y.




    Note that in most programming languages ^ means XOR, not exponentiation. Posgtres instead chose to use a very non traditional # for XOR. See some of the historical details:



    • https://softwareengineering.stackexchange.com/questions/331388/why-was-the-caret-used-for-xor-instead-of-exponentiation





    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%2f53289785%2fbigquery-custom-function-bitwise-function-question%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      As far as I know, the operator ^ has not the same functionality in BigQuery as it does in PostgreSQL.



      While in PostgreSQL it is the power operator, in BigQuery it performs an XOR (and indeed only works on integers and bytes). Based on your use case description I believe you want to calculate the (val/10)th power of 10.



      As a way around this you may try the built in standard SQL mathematical functions.






      share|improve this answer



























        1














        As far as I know, the operator ^ has not the same functionality in BigQuery as it does in PostgreSQL.



        While in PostgreSQL it is the power operator, in BigQuery it performs an XOR (and indeed only works on integers and bytes). Based on your use case description I believe you want to calculate the (val/10)th power of 10.



        As a way around this you may try the built in standard SQL mathematical functions.






        share|improve this answer

























          1












          1








          1







          As far as I know, the operator ^ has not the same functionality in BigQuery as it does in PostgreSQL.



          While in PostgreSQL it is the power operator, in BigQuery it performs an XOR (and indeed only works on integers and bytes). Based on your use case description I believe you want to calculate the (val/10)th power of 10.



          As a way around this you may try the built in standard SQL mathematical functions.






          share|improve this answer













          As far as I know, the operator ^ has not the same functionality in BigQuery as it does in PostgreSQL.



          While in PostgreSQL it is the power operator, in BigQuery it performs an XOR (and indeed only works on integers and bytes). Based on your use case description I believe you want to calculate the (val/10)th power of 10.



          As a way around this you may try the built in standard SQL mathematical functions.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 '18 at 23:13









          ch_mikech_mike

          75918




          75918























              1














              Apparently you want this:



              #standardSQL
              SELECT POW(10, (x/10))
              FROM (SELECT 30.7 x)


              With POW(X, Y) being:




              Returns the value of X raised to the power of Y.




              Note that in most programming languages ^ means XOR, not exponentiation. Posgtres instead chose to use a very non traditional # for XOR. See some of the historical details:



              • https://softwareengineering.stackexchange.com/questions/331388/why-was-the-caret-used-for-xor-instead-of-exponentiation





              share|improve this answer





























                1














                Apparently you want this:



                #standardSQL
                SELECT POW(10, (x/10))
                FROM (SELECT 30.7 x)


                With POW(X, Y) being:




                Returns the value of X raised to the power of Y.




                Note that in most programming languages ^ means XOR, not exponentiation. Posgtres instead chose to use a very non traditional # for XOR. See some of the historical details:



                • https://softwareengineering.stackexchange.com/questions/331388/why-was-the-caret-used-for-xor-instead-of-exponentiation





                share|improve this answer



























                  1












                  1








                  1







                  Apparently you want this:



                  #standardSQL
                  SELECT POW(10, (x/10))
                  FROM (SELECT 30.7 x)


                  With POW(X, Y) being:




                  Returns the value of X raised to the power of Y.




                  Note that in most programming languages ^ means XOR, not exponentiation. Posgtres instead chose to use a very non traditional # for XOR. See some of the historical details:



                  • https://softwareengineering.stackexchange.com/questions/331388/why-was-the-caret-used-for-xor-instead-of-exponentiation





                  share|improve this answer















                  Apparently you want this:



                  #standardSQL
                  SELECT POW(10, (x/10))
                  FROM (SELECT 30.7 x)


                  With POW(X, Y) being:




                  Returns the value of X raised to the power of Y.




                  Note that in most programming languages ^ means XOR, not exponentiation. Posgtres instead chose to use a very non traditional # for XOR. See some of the historical details:



                  • https://softwareengineering.stackexchange.com/questions/331388/why-was-the-caret-used-for-xor-instead-of-exponentiation






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 14 '18 at 4:02

























                  answered Nov 14 '18 at 3:56









                  Felipe HoffaFelipe Hoffa

                  22.8k253124




                  22.8k253124



























                      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.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289785%2fbigquery-custom-function-bitwise-function-question%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

                      𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

                      Crossroads (UK TV series)

                      ữḛḳṊẴ ẋ,Ẩṙ,ỹḛẪẠứụỿṞṦ,Ṉẍừ,ứ Ị,Ḵ,ṏ ṇỪḎḰṰọửḊ ṾḨḮữẑỶṑỗḮṣṉẃ Ữẩụ,ṓ,ḹẕḪḫỞṿḭ ỒṱṨẁṋṜ ḅẈ ṉ ứṀḱṑỒḵ,ḏ,ḊḖỹẊ Ẻḷổ,ṥ ẔḲẪụḣể Ṱ ḭỏựẶ Ồ Ṩ,ẂḿṡḾồ ỗṗṡịṞẤḵṽẃ ṸḒẄẘ,ủẞẵṦṟầṓế