Snowflake Java Script User Defined Table Function
How do I return a table with multiple columns from Snowflake Javascript UDF / UDTF?
1 ответ
CREATE OR REPLACE FUNCTION HelloWorld()
RETURNS TABLE (NAME_COL VARCHAR, CITY_COL VARCHAR)
LANGUAGE JAVASCRIPT
AS '{
processRow: function f(row, rowWriter, context){
rowWriter.writeRow({NAME_COL: "Ram"}, {CITY_COL : "Vellore"});
rowWriter.writeRow({NAME_COL: "Krish"}, {CITY_COL : "Chennai"} );
}
}';
ВЫБЕРИТЕ name_col, city_col ИЗ ТАБЛИЦЫ (HelloWorld());
Предположим, если вы хотите обработать ввод столбца (например, строку) и вернуть из него несколько столбцов:
CREATE OR REPLACE FUNCTION HelloWorld(MESSAGE VARCHAR)
RETURNS TABLE (CLOUD VARCHAR, OPERATION VARCHAR, CALLTIME_MS double)
LANGUAGE JAVASCRIPT
AS '{
processRow: function f(row, rowWriter, context){
var str = row.MESSAGE;
var res = str.split(",");
var prefix = res[0].split(":");
var cloud = prefix[0].split(" ")[0];
var oper = prefix[1].substring(1);
var callTimeMs = parseFloat(res[1].split("=")[1].split("m")[0]);
rowWriter.writeRow({OPERATION : oper, CLOUD: cloud, CALLTIME_MS : callTimeMs});
}
}';
ВЫБРАТЬ облако, операция, calltime_ms ИЗ ТАБЛИЦЫ (HelloWorld('Завершение вызова клиентской библиотеки AWS Storage: putObject, callTime=40ms'));
Предположим, если вы хотите получить вывод как результат обработки из таблицы:
with stg as (
select gs.THREAD_CLASS as tc, gs.message AS msg
from logs_table as gs
where true
and timestamp between '2020-06-08 00:00:00' and '2020-06-08 01:00:00'
and contains(message, 'Storage client library call end:')
)
SELECT stg.tc, proc.operation, AVG(proc.calltime_ms)
FROM stg, table(ProcStorageCallEnd(stg.msg)) as proc
group by stg.tc, proc.operation;