Using Custom Functions in Queries
When you issue a query with a custom function to Drill, Drill searches the classpath for the function that matches the request in the query. Once Drill locates the function for the request, Drill processes the query and applies the function during processing.
Your Drill installation includes sample files in the Drill classpath. One
sample file, employee.json
, contains some fictitious employee data that you
can query with a custom function.
Simple Function Example
This example uses the myaddints
simple function in a query on the
employee.json
file.
If you issue the following query to Drill, you can see all of the employee
data within the employee.json
file:
0: jdbc:drill:zk=local> SELECT * FROM cp.`employee.json`;
The query returns the following results:
| employee_id | full_name | first_name | last_name | position_id | position_title | store_id | department_id | birth_da | | ————- | ———— | ———— | ———— | ————- | —————- | ———— | ————— | ———- | ———– | 1101 | Steve Eurich | Steve | Eurich | 16 | Store Temporary Checker | 12 | 16 | | 1102 | Mary Pierson | Mary | Pierson | 16 | Store Temporary Checker | 12 | 16 | | 1103 | Leo Jones | Leo | Jones | 16 | Store Temporary Checker | 12 | 16 | …
Since the postion_id
and store_id
columns contain integers, you can issue
a query with the myaddints
custom function on these columns to add the
integers in the columns.
The following query tells Drill to apply the myaddints
function to the
position_id
and store_id
columns in the employee.json
file:
0: jdbc:drill:zk=local> SELECT myaddints(CAST(position_id AS int),CAST(store_id AS int)) FROM cp.`employee.json`;
Since JSON files do not store information about data types, you must apply the
CAST
function in the query to tell Drill that the columns contain integer
values.
The query returns the following results:
|--------|
| EXPR$0 |
|--------|
| 28 |
| 28 |
| 36 |
|--------|
…