اختبار التقدير الدوري في مجموعات بيانات كبيرة
يتناول هذا الموضوع الإرشادات الخاصة باختبار التقدير الدوري في مجموعات كبيرة من البيانات.
قبل تشغيل التقدير الدوري في مجموعة بيانات كبيرة، من المهم أن يكون لديك فكرة عن عدد الأجهزة التقريبي والمدة التي تتوقع تقديرها. ويمكن قياس ذلك بسرعة كبيرة من خلال النظر إلى تاريخ/وقت آخر قياس في مكون القياس. إليك نموذج استعلام يوفر عدد مكونات القياس حسب عدد الشهور بدءًا من تاريخ معالجة مُدخل، وكان تاريخ/وقت آخر قياس متجاور هو:
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
;