The emulator cannot find a user-defined function. bqutil is filtered out from the zetasqlite's NamePath, so the analyzer cannot find it.
What did you expect to happen?
User-defined function executes successfully.
How can we reproduce it (as minimally and precisely as possible)?
Create a project with an example bqutil UDF:
bq_client.run_query_async(
query_str="""CREATE OR REPLACE FUNCTION bqutil.fn.json_extract_keys(input STRING)
RETURNS Array<String>
LANGUAGE js
OPTIONS (description=\"\"\"Returns all keys in the input JSON as an array of string.
Returns NULL if invalid JSON string is passed.
\"\"\"
)
AS \"\"\"
try {
return Object.keys(JSON.parse(input));
} catch {
return null;
}
\"\"\";
""",
use_query_cache=False,
).result()
The bqutil functions are packaged with all installations of BigQuery. The emulator should support calling them, if not also packaging these UDFs into the emulator.
What happened?
The emulator cannot find a user-defined function.
bqutil
is filtered out from the zetasqlite'sNamePath
, so the analyzer cannot find it.What did you expect to happen?
User-defined function executes successfully.
How can we reproduce it (as minimally and precisely as possible)?
Create a project with an example
bqutil
UDF:Submit a query which uses this:
Anything else we need to know?
The
bqutil
functions are packaged with all installations of BigQuery. The emulator should support calling them, if not also packaging these UDFs into the emulator.