اختبار التقدير الدوري في مجموعات بيانات كبيرة

يتناول هذا الموضوع الإرشادات الخاصة باختبار التقدير الدوري في مجموعات كبيرة من البيانات.

قبل تشغيل التقدير الدوري في مجموعة بيانات كبيرة، من المهم أن يكون لديك فكرة عن عدد الأجهزة التقريبي والمدة التي تتوقع تقديرها. ويمكن قياس ذلك بسرعة كبيرة من خلال النظر إلى تاريخ/وقت آخر قياس في مكون القياس. إليك نموذج استعلام يوفر عدد مكونات القياس حسب عدد الشهور بدءًا من تاريخ معالجة مُدخل، وكان تاريخ/وقت آخر قياس متجاور هو:

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
;

فيما يلي استعلام أكثر تعقيدًا يعرض لك حسب تسلسل العمليات عدد مكونات القياس لتاريخ/وقت آخر قياس محدد ستقوم بمعالجته، كما يبحث في الأجهزة المركبة ومكونات القياس التي تم تكوينها للتقدير الدوري فقط، ومكون القياس هنا جاهز فعليًا للتقدير استنادًا إلى هذا التكوين.

المعلمات الخاصة بذلك هي:
  • تسلسلات العمليات: أدخل 1 لتجنب تجزئة النتائج إلى تسلسلات عمليات

  • processDateTime: اترك الحقل فارغًا لاستخدام تاريخ النظام، أو أدخل تاريخًا/وقتًا بالصيغة: س س س س-ش ش-ي ي-س س24.د د.ث ث

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
;