Какое ограничение на число параметров, переданных в SQL UDF? - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь преобразовать информацию, которую я извлекаю, в Snowflake с помощью таблицы вариантов и создаю новую таблицу с необходимыми мне расчетными данными.

Например, я извлекаю эту информацию

Стол данных:

enter image description here

, и я хочу вычислить: таблица как эта: и SQL UDF, но не удалось найти никаких ограничений на количество параметров, которые я мог бы передать в UDF.

С помощью python я могу преобразовать эту информацию, но я хочу, чтобы таблица вставляла ее сверхурочно - я изучаю Lamdas на своем этапе s3, но сейчас мне нужно сосредоточиться на udf, чтобы вызвать загрузка новых данных в таблицу.

CREATE OR REPLACE PROCEDURE SPEED_BY_GAME_DAY (team_id, sprint_speed)
LANGUAGE SQL
AS '
    INSERT INTO new_table VALUES(SELECT team_id, MIN(sprint_speed) as Min_speed, MAX(sprint_speed) as AVG(sprint_speed_) as AVG_speed, CURRENT_DATE() 
    FROM 
      tablename
    WHERE 
      CURRENT_DATE() = TODAY()
    GROUP BY team_id; )
';

Это правильное направление?

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Если данные доступны как тип Variant, то мы можем напрямую сгладить данные для достижения цели и не нужно go через код UDF.

Для тестирования я создал таблицу со столбцом варианта и добавил записи для team_id и sprint_speed. Затем эти записи были сведены, чтобы получить их значения, которые использовались для вставки записей в new_table.

create or replace table team_table1 (col1 variant)


create or replace table team_table2 
(team_id number, 
 min_sprint number (3,1), 
 max_sprint number (3,1),
 avg_sprint number (3,1),
 current_date date)

insert into team_table1
select parse_json(column1) as col1
from values 
( '
{
"team statistics": 
{
"stats": [
{
"team_Id": "109",
"sprint_Speed": "30.8"
}
]
}
}') as valinsert 

insert into team_table1
select parse_json(column1) as col1
from values 
( '
{
"team statistics": 
{
"stats": [
{
"team_Id": "120",
"sprint_Speed": "30.4"
}
]
}
}') as valinsert 

insert into team_table1
select parse_json(column1) as col1
from values 
( '
{
"team statistics": 
{
"stats": [
{
"team_Id": "142",
"sprint_Speed": "30.3"
}
]
}
}') as valinsert 




insert into team_table2
with cte as (
SELECT *
FROM (
SELECT
SEQ,
VALUE['team_Id']::number AS team_Id,
VALUE['sprint_Speed']::number(3,1) AS sprint_speed
from team_table1,
LATERAL FLATTEN(INPUT => COL1['team statistics']['stats'])
ORDER BY SEQ, INDEX
) 
)

select 
team_Id,
MIN(sprint_speed), 
MAX(sprint_speed),
AVG(sprint_speed), 
CURRENT_DATE 
FROM cte  
GROUP BY team_id;

select * from team_Table2;
0 голосов
/ 13 января 2020

Ваш вопрос выглядит как теоретическое упражнение.

Где-то явно есть практический максимум, как вы можете сохранить контроль над сотнями параметров?

Если вам нужно смешное количество параметров, Вы можете структурировать их в один параметр типа VARIANT, который может быть создан с OBJECT_CONSTRUCT() и ARRAY_CONSTRUCT().

...