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.

Los parámetros son los siguientes:
  • 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
;