Built-in query language functions
Like constants and variables, there are many built-in functions that can be called from the query language with no additional imports or setup. These built-in functions should be used over Python or other user-defined functions in query strings for two reasons:
- They are almost always more performant.
- They handle null values gracefully.
For more on why, see The Python-Java boundary.
Built-in functions
Built-in functions range from simple mathematical functions to date-time arithmetic, string manipulation, and more.
The following query calculates the absolute value of a column using the built-in abs
function:
from deephaven import empty_table
source = empty_table(10).update(["X = -ii", "AbsX = abs(X)"])
The following query parses a column of strings containing integers into Java primitive int
values using parseInt
:
from deephaven import empty_table
from random import choice
def rand_string_number() -> str:
return choice([str(item) for item in list(range(10))])
source = empty_table(10).update("StringColumn = rand_string_number()")
result = source.update("IntegerColumn = parseInt(StringColumn)")
The following query uses the built-in and
function to evaluate whether or not three different columns are all true
:
from deephaven import new_table
from deephaven.column import bool_col
source = new_table(
[
bool_col("A", [True, True, True]),
bool_col("B", [True, True, False]),
bool_col("C", [True, False, True]),
]
)
result = source.update(["IsOk = and(A, B, C)"])
Built-in functions gracefully handle null values as input. For example, the following example calls the built-in sin
function on a column that contains null values:
from deephaven import empty_table
source = empty_table(40).update(
["X = (ii % 3 != 0) ? 0.1 * ii : NULL_DOUBLE", "SinX = sin(X)"]
)
This page does not provide a comprehensive list of all built-ins. For the complete list of functions built into the query language, see Auto-imported functions.
Add Java classes to the query library
To use a non-default Java class in a Deephaven Query Language (DQL) query string, you must first import the class into DQL using Python. For this, Deephaven offers the query_library
module.
The following example adds the java.net.URL
class to the query library then uses it in table operations.
from deephaven import empty_table
from deephaven import query_library
query_library.import_class("java.net.URL")
source = empty_table(1).update(
[
"DeephavenUrl = new URL(`https://deephaven.io/`)",
"Protocol = DeephavenUrl.getProtocol()",
"Host = DeephavenUrl.getHost()",
"Path = DeephavenUrl.getPath()",
]
)
You can also import static methods from a class into the query language to use them in table operations. The following example imports static methods from the java.lang.StrictMath
class and uses them in table operations.
Note
import_static
allows you to call methods without the class name. The class name is included in the examples below because methods of the same name also exist in the built-in io.deephaven.function.Numeric
class.
from deephaven import empty_table
from deephaven import query_library
query_library.import_static("java.lang.StrictMath")
source = empty_table(10).update(
[
"X = randomDouble(-1.67, 1.67)",
"AcosX = StrictMath.acos(X)",
"ExpX = StrictMath.exp(X)",
"ExponentX = StrictMath.getExponent(X)",
]
)