Ejemplos de UDA
Ejemplo nº 1
Calcular una media para un valor de doble precisión. Este UDA realiza la misma función que el agregado SQL AVG, pero sólo para el tipo de dato DOUBLE.
SUM=1
COUNT=2
function initState(state)
state[SUM] = 0
state[COUNT] = 0
return state
end
function accumulate(state, value)
state[SUM] = state[SUM] + value
state[COUNT] = state[COUNT] + 1
return state
end
function merge(state1, state2)
state1[SUM] = state1[SUM] + state2[SUM] state1[COUNT] = state1[COUNT] + state2[COUNT] return state1
end
function finalResult(state)
return state[SUM] / state[COUNT]
end
function getState()
state = {}
state[1] = { "sum", double }
state[2] = { "count", double }
return state
end
function getType()
return "uda"
end
function getName()
return "lua_avg"
end
function getArgs()
args = {}
args[1] = { "value", double }
return args
end
function getResult()
return double
end
Ejemplo nº 2
El segundo ejemplo de UDA es un UDA analítico (un UDA que se invoca con una cláusula OVER). Este UDA puede utilizarse para crear identificadores de sesión únicos para datos de weblog basados en un valor de tiempo de espera de sesión.
--[[---------------------------------------------------------
Example usage in SQL:
select
customer,
click_time,
sessionize(click_time, 900) over (partition by customer order by click_time)
from
weblog_data
--]]---------------------------------------------------------
function initState(state)
state[1] = 0
state[2] = 0
return state
end
function accumulate(state, ts, seconds)
if ts - state[1] > seconds then
state[2] = getNextId()
end
state[1] = ts
return state
end
function finalResult(state)
return state[2]
end
function getName()
return "sessionize"
end
function getType()
return "uda"
end
function getState()
state={}
state[1] = { "", timestamp }
state[2] = { "", integer }
return state
end
function getArgs()
args={}
args[1] = { "click_time", timestamp }
args[2] = { "timeout", integer }
return args
end
function getResult()
return integer
end
function getOptions()
options={}
options[OPT_AGGTYPE] = "analytic"
return options
end