Currently, function system was designed few years ago. So, there are lack of key features necessary for functions and user-defined functions.
I have discussed this issue with epsilon. We could summary the following issues.
- There is no way to describe explanation of functions.
- For user convenience, Tajo needs to show users function information, including signature, parameters, results, descriptions, and examples.
- TajoMaster registers lots of functions at startup time. This is a burden to maintain registration codes. We need to improve this to automatically register built-in functions in a specific package.
- Currently, the way to find matched function is too strict.
- Due to this function match system, we have to register functions for each parameter type combination.
- Function match mechanism should consider type compatibility. For example, count(val:integer) can be compatibly to count(val:long). In this case, we need to only register count(val:bigint) function. Tajo has to find count(val:bigint) even though count(val:integer) function is called.
- We need more elaborate UDF regestration system.
- Currently, registering a user-defined function requires system restart. There is no way to register UDFs in runtime.
- Tajo should provide a run-time UDF registration system.
- It should involve user jars distribution.
- It should provide 'CREATE FUNCTION' and 'DROP FUNCTION' statements.
- The registration functions are stored in catalog system, and they should be loaded even though a Tajo cluster is restarted.
This is an umbrella issue. we'll create one or more sub tasks for the above issues.