| <?xml version="1.0" encoding="UTF-8"?><!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| <!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd"> |
| <concept id="functions"> |
| |
| <title>Overview of Impala Functions</title> |
| <titlealts audience="PDF"><navtitle>Functions</navtitle></titlealts> |
| <prolog> |
| <metadata> |
| <data name="Category" value="Impala"/> |
| <data name="Category" value="Impala Functions"/> |
| <data name="Category" value="SQL"/> |
| <data name="Category" value="Data Analysts"/> |
| <data name="Category" value="Developers"/> |
| </metadata> |
| </prolog> |
| |
| <conbody> |
| |
| <p> |
| Functions let you apply arithmetic, string, or other computations and transformations to Impala data. You |
| typically use them in <codeph>SELECT</codeph> lists and <codeph>WHERE</codeph> clauses to filter and format |
| query results so that the result set is exactly what you want, with no further processing needed on the |
| application side. |
| </p> |
| |
| <p> |
| Scalar functions return a single result for each input row. See <xref href="impala_functions.xml#builtins"/>. |
| </p> |
| |
| <codeblock>[localhost:21000] > select name, population from country where continent = 'North America' order by population desc limit 4; |
| [localhost:21000] > select upper(name), population from country where continent = 'North America' order by population desc limit 4; |
| +-------------+------------+ |
| | upper(name) | population | |
| +-------------+------------+ |
| | USA | 320000000 | |
| | MEXICO | 122000000 | |
| | CANADA | 25000000 | |
| | GUATEMALA | 16000000 | |
| +-------------+------------+ |
| </codeblock> |
| <p> |
| Aggregate functions combine the results from multiple rows: |
| either a single result for the entire table, or a separate result for each group of rows. |
| Aggregate functions are frequently used in combination with <codeph>GROUP BY</codeph> |
| and <codeph>HAVING</codeph> clauses in the <codeph>SELECT</codeph> statement. |
| See <xref href="impala_aggregate_functions.xml#aggregate_functions"/>. |
| </p> |
| |
| <codeblock>[localhost:21000] > select continent, <b>sum(population)</b> as howmany from country <b>group by continent</b> order by howmany desc; |
| +---------------+------------+ |
| | continent | howmany | |
| +---------------+------------+ |
| | Asia | 4298723000 | |
| | Africa | 1110635000 | |
| | Europe | 742452000 | |
| | North America | 565265000 | |
| | South America | 406740000 | |
| | Oceania | 38304000 | |
| +---------------+------------+ |
| </codeblock> |
| |
| <p> |
| User-defined functions (UDFs) let you code your own logic. They can be either scalar or aggregate functions. |
| UDFs let you implement important business or scientific logic using high-performance code for Impala to automatically parallelize. |
| You can also use UDFs to implement convenience functions to simplify reporting or porting SQL from other database systems. |
| See <xref href="impala_udf.xml#udfs"/>. |
| </p> |
| |
| <codeblock>[localhost:21000] > select <b>rot13('Hello world!')</b> as 'Weak obfuscation'; |
| +------------------+ |
| | weak obfuscation | |
| +------------------+ |
| | Uryyb jbeyq! | |
| +------------------+ |
| [localhost:21000] > select <b>likelihood_of_new_subatomic_particle(sensor1, sensor2, sensor3)</b> as probability |
| > from experimental_results group by experiment; |
| </codeblock> |
| |
| <p> |
| Each function is associated with a specific database. For example, if you issue a <codeph>USE somedb</codeph> |
| statement followed by <codeph>CREATE FUNCTION somefunc</codeph>, the new function is created in the |
| <codeph>somedb</codeph> database, and you could refer to it through the fully qualified name |
| <codeph>somedb.somefunc</codeph>. You could then issue another <codeph>USE</codeph> statement |
| and create a function with the same name in a different database. |
| </p> |
| |
| <p> |
| Impala built-in functions are associated with a special database named <codeph>_impala_builtins</codeph>, |
| which lets you refer to them from any database without qualifying the name. |
| </p> |
| |
| <codeblock>[localhost:21000] > show databases; |
| +-------------------------+ |
| | name | |
| +-------------------------+ |
| | <b>_impala_builtins</b> | |
| | analytic_functions | |
| | avro_testing | |
| | data_file_size | |
| ... |
| [localhost:21000] > show functions in _impala_builtins like '*subs*'; |
| +-------------+-----------------------------------+ |
| | return type | signature | |
| +-------------+-----------------------------------+ |
| | STRING | substr(STRING, BIGINT) | |
| | STRING | substr(STRING, BIGINT, BIGINT) | |
| | STRING | substring(STRING, BIGINT) | |
| | STRING | substring(STRING, BIGINT, BIGINT) | |
| +-------------+-----------------------------------+ |
| </codeblock> |
| |
| <p> |
| <b>Related statements:</b> <xref href="impala_create_function.xml#create_function"/>, |
| <xref href="impala_drop_function.xml#drop_function"/> |
| </p> |
| </conbody> |
| </concept> |