This page shows you how to use Unity Catalog to store, access and govern Functions.
Functions are units of saved logic that return a scalar value or a set of rows.
Using Unity Catalog to store your Functions is great for:
- reusing code, and
- applying permissions or filters.
The following diagram shows an example of a Unity Catalog instance with two functions: sum and my_function:
Let's look at how this works.
We'll use a local Unity Catalog server to get started. The default local UC server comes with some sample data.
If this is your first time spinning up a UC server, you might want to check out the Quickstart first.
Spin up a local UC server by running the following code in a terminal from the root directory of your local
unitycatalog repository:
bin/start-uc-serverNow open a second terminal window to start working with your Unity Catalog instance.
You can list the functions in your UC namespace using:
bin/uc function list --catalog unity --schema defaultYou should see something that looks like:
ββββββββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ¬βββββββββ
β NAME βCATALOG_βSCHEMA_NβINPUT_PAβDATA_TYPβFULL_DATβRETURN_PβROUTINE_βROUTINE_βROUTINE_βPARAMETEβIS_DETERβSQL_DATAβIS_NULL_βSECURITYβSPECIFICβCOMMENT βPROPERTIβFULL_NAMβCREATED_βUPDATED_βFUNCTIONβEXTERNALβ
β β NAME β AME β RAMS β E β A_TYPE β ARAMS β BODY βDEFINITIβDEPENDENβR_STYLE βMINISTICβ_ACCESS β CALL β _TYPE β _NAME β β ES β E β AT β AT β _ID β_LANGUAGβ
β β β β β β β β β ON β CIES β β β β β β β β β β β β β E β
ββββββββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββ€
βsum βunity βdefault β{"par...βINT βINT βnull βEXTERNALβt = x...βnull βS βtrue βNO_SQL βfalse βDEFINER βsum βAdds ...βnull βunity...β17183...βnull β8e83e...βpython β
ββββββββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββΌβββββββββ€
βlowercase βunity βdefault β{"par...βSTRING βSTRING βnull βEXTERNALβg = s...βnull βS βtrue βNO_SQL βfalse βDEFINER βlower...βConve...βnull βunity...β17183...βnull β33d81...βpython β
ββββββββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββ΄βββββββββYou can get the metadata of one of these functions using:
bin/uc function get --full_name unity.default.sumYou should see something that looks like:
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β KEY β VALUE β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βNAME βsum β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βCATALOG_NAME βunity β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βSCHEMA_NAME βdefault β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βINPUT_PARAMS β{"parameters":[{"name":"x","type_text":"int","type_json":"{\"name\":\"x\",\"type\":\"integer\",\"nulβ
β βlable\":false,\"metadata\":{}}","type_name":"INT","type_precision":null,"type_scale":null,"type_inteβ
β βrval_type":null,"position":0,"parameter_mode":"IN","parameter_type":"PARAM","parameter_default":nullβ
β β,"comment":null},{"name":"y","type_text":"int","type_json":"{\"name\":\"y\",\"type\":\"integer\",\"nβ
β βullable\":false,\"metadata\":{}}","type_name":"INT","type_precision":null,"type_scale":null,"type_inβ
β βterval_type":null,"position":1,"parameter_mode":"IN","parameter_type":"PARAM","parameter_default":nuβ
β βll,"comment":null},{"name":"z","type_text":"int","type_json":"{\"name\":\"z\",\"type\":\"integer\",\β
β β"nullable\":false,\"metadata\":{}}","type_name":"INT","type_precision":null,"type_scale":null,"type_β
β βinterval_type":null,"position":2,"parameter_mode":"IN","parameter_type":"PARAM","parameter_default":β
β βnull,"comment":null}]} β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βDATA_TYPE βINT β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βFULL_DATA_TYPE βINT β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βRETURN_PARAMS βnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βROUTINE_BODY βEXTERNAL β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βROUTINE_DEFINITION βt = x + y + z\nreturn t β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βROUTINE_DEPENDENCIESβnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βPARAMETER_STYLE βS β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βIS_DETERMINISTIC βtrue β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βSQL_DATA_ACCESS βNO_SQL β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βIS_NULL_CALL βfalse β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βSECURITY_TYPE βDEFINER β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βSPECIFIC_NAME βsum β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βCOMMENT βAdds two numbers. β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βPROPERTIES βnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βFULL_NAME βunity.default.sum β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βCREATED_AT β1718315581372 β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βUPDATED_AT βnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βFUNCTION_ID β8e83e2d9-e523-46a1-b69c-8fe9212f1057 β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βEXTERNAL_LANGUAGE βpython β
ββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββThe routine definition is probably most helpful here: t = x + y + z\nreturn t
It looks like this functions takes in 3 arguments and returns their sum. The DATA_TYPE field tells us that the
output should be of INT data type.
Let's try calling this function.
We'll use function call to reference the Function by its full name and pass 3 input parameters:
bin/uc function call --full_name unity.default.sum --input_params "1,2,3"This should return:
6
Nicely done! You have called a Function stored in your Unity Catalog.
Let's create a new function and add it to your Unity Catalog.
We'll start with a basic example using only scalar values.
Suppose you want to register the following function to Unity Catalog: c = a * b
To do so, define a new Function by its full name, specify the data type of the output, the input parameters and their data types, and define the function.
bin/uc function create --full_name unity.default.my_function \
--data_type INT --input_params "a int, b int" --def "c=a*b\nreturn c"This should output something like:
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β KEY β VALUE β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βNAME βmyFunction β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βCATALOG_NAME βunity β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βSCHEMA_NAME βdefault β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βINPUT_PARAMS β{"parameters":[{"name":"a","type_text":"int","type_json":"{\"name\":\"a\",\"type\":\"integer\",\"nulβ
β βlable\":true,\"metadata\":{}}","type_name":"INT","type_precision":null,"type_scale":null,"type_interβ
β βval_type":null,"position":0,"parameter_mode":null,"parameter_type":null,"parameter_default":null,"coβ
β βmment":null},{"name":"b","type_text":"int","type_json":"{\"name\":\"b\",\"type\":\"integer\",\"nullaβ
β βble\":true,\"metadata\":{}}","type_name":"INT","type_precision":null,"type_scale":null,"type_intervaβ
β βl_type":null,"position":1,"parameter_mode":null,"parameter_type":null,"parameter_default":null,"commβ
β βent":null}]} β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βDATA_TYPE βINT β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βFULL_DATA_TYPE βINT β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βRETURN_PARAMS βnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βROUTINE_BODY βEXTERNAL β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βROUTINE_DEFINITION βc=a*b\nreturn c β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βROUTINE_DEPENDENCIESβnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βPARAMETER_STYLE βS β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βIS_DETERMINISTIC βtrue β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βSQL_DATA_ACCESS βNO_SQL β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βIS_NULL_CALL βtrue β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βSECURITY_TYPE βDEFINER β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βSPECIFIC_NAME βmyFunction β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βCOMMENT βnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βPROPERTIES βnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βFULL_NAME βunity.default.myFunction β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βCREATED_AT β1720516826170 β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βUPDATED_AT βnull β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βFUNCTION_ID β012545ee-2a89-4534-b8e9-f41b09f4b2eb β
ββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βEXTERNAL_LANGUAGE βpython β
ββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββYou can also store more complex functions. For example, you can import Python modules and use them in your function. Note if you have multiple lines in complex functions, you must insert "\n" to separate lines in the function definition. Otherwise, the function will return "invalid syntax" error when it is called.
Let's take the example below of a function that uses the Numpy library to simulate a random roll of dice:
def myPythonFunction(n_sides, n_dice):
import numpy as np
rolls=np.random.randint(1, n_sides + 1, size=n_dice)
return print(rolls)"You can register this function to your Unity Catalog as follows:
bin/uc function create --full_name unity.default.myPythonFunction --data_type INT --input_params "n_sides int, n_dice int" --language "python" --def "import numpy as np\nrolls=np.random.randint(1, n_sides + 1, size=n_dice)\nreturn print(rolls)"And then call it with:
bin/uc function call --full_name unity.default.myPythonFunction --input_params "6,1"This will simulate rolling a single die with 6 sides.
function create takes the following parameters:
Required Parameters:
--full_name: The full name of the table. The full name is the concatenation of the catalog name, schema name, and table/volume name separated by a dot. For example, catalog_name.schema_name.table_name.--input_params: The input parameters of the function,--data_type: The data type of the function.
Optional Parameters:
--comment: Comment/Description of the entity.--def: The routine definition of the function--language: The language of the function, currently only "python" is supported.
