簡體   English   中英

雪花 Java 腳本用戶定義表 Function

[英]Snowflake Java Script User Defined Table Function

如何從 Snowflake Javascript UDF / UDTF 返回包含多列的表?

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"} );
       }
    }';

SELECT name_col, city_col FROM TABLE(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});
       
       }
    }';

SELECT cloud, operation, calltime_ms FROM TABLE(HelloWorld('AWS Storage client library call end: putObject, callTime=40ms'));

假設如果要從表中獲取 output 作為處理結果:

 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM