Prueba de estimación periódica en juegos de datos grandes
En este tema se proporcionan directrices sobre cómo probar estimaciones periódicas en juegos de datos grandes.
Antes de ejecutar una estimación periódica en un juego de datos de gran tamaño se recomienda conocer aproximadamente el número de dispositivos para los que está previsto hacer la estimación y el tiempo que considera que va a durar. Puede calcularlo de un manera bastante rápida si observa la fecha y hora de la última medida en el componente de medición. La consulta de muestra siguiente proporcionará un recuento de componentes de medición por el número de meses desde la fecha de proceso proporcionada en la fecha y hora de la última medida contigua:
select count(*)
, round((to_date(:processDateTime,'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm)/31,0) MONTHS
from d1_measr_comp mc
group by round((to_date(:processDateTime,'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm)/31,0)
order by 2
;
La siguiente consulta es algo más compleja y muestra en threads cuántos componentes de medición para una fecha y hora de la última medida determinada va a procesar, se detiene un poco más en observar solo los dispositivos instalados y componentes de medición que están configurados para la estimación periódica y el componente de medición que está ya preparado para hacer su estimación según esa configuración.
-
threads: introduzca 1 para evitar que los resultados se dividan en threads.
-
processDateTime: déjelo en blanco para que se utilice la fecha del sistema o indique una fecha/hora con el formato YYYY-MM-DD-HH24.MI.SS
with threads as (
select rownum thread_nbr
, lpad(round((rownum - 1) * (rpad('9',12,'9')+1)/:threads,0),12,'0') low_id
, lpad(round(rownum * ((rpad('9',12,'9')+1)/:threads),0)-1,12,'0') high_id
from dual
connect by rownum <= :threads
)
select /*+ parallel */ threads.thread_nbr
, threads.low_Id
, threads.high_id
, nvl(mc.adj_latest_msrmt_dttm,mc.latest_msrmt_dttm) LATEST_MSRMT_DTTM
, count(*) MC_COUNT
from threads
inner join d1_dvc dvc
on dvc.d1_device_id between threads.low_id and threads.high_id
inner join d1_dvc_cfg dc
on dc.d1_device_id = dvc.d1_device_id
inner join d1_install_evt ie
on ie.device_config_id = dc.device_config_id
and ie.d1_install_dttm < sysdate
and (ie.d1_removal_dttm is null or ie.d1_removal_dttm >= sysdate)
inner join d1_measr_comp mc
on mc.device_config_id = dc.device_config_id
inner join d1_measr_comp_type mct
on mct.measr_comp_type_cd = mc.measr_comp_type_cd
and hrs_wait_before_est > 0
where (to_date(nvl(:processDateTime,sysdate),'YYYY-MM-DD-HH24.MI.SS') - latest_msrmt_dttm) * 24 > mct.hrs_wait_before_est
group by threads.thread_nbr
, threads.low_Id
, threads.high_id
, nvl(mc.adj_latest_msrmt_dttm,mc.latest_msrmt_dttm)
order by 1, 4
;